ObjectARX, AutoCAD. Среда программирования библиотеки C++

       

Преобразования Системы координат


AcedTrans () функция транслирует точку или смещение от одной системы координат в другой. Требуется параметр точки, запятая, которая может интерпретироваться или как трехмерная точка или трехмерный вектор смещения. Это управляется параметром, вызвал disp, который должен быть отличный от нуля, если с запятой обращаются как вектор смещения; иначе, с запятой обращаются как точка. Оттранслированная точка или вектор возвращены в параметре результата " передача параметра по ссылке ", который, подобно запятой, имеют тип ads_point.

Параметры, которые определяют эти две системы координат, от и до, являются обоими буферами результатов. От параметра определяет систему координат, в которой запятая выражена, и к параметру определяет систему координат результата. И от и до параметр может определить систему координат следующим способом:

§         целочисленный код (restype == RTSHORT) который определяет WCS, текущий UCS, или текущий DCS (или текущей области просмотра или пространства листа).

§         имя примитива (restype == RTENAME), как возвращено одним имени примитива или выбора устанавливают функции. Это определяет ECS названного примитива. Для плоских примитивов, ECS может отличиться от WCS. Если ECS не отличается, преобразование между ECS и WCS - операция тождества.

§         трехмерный вектор вытеснения (restype == RT3DPOINT), который является другим методом определения ECS примитива. Векторы Вытеснения всегда представляются в мировых координатах; вектор вытеснения (0,0,1) определяет WCS непосредственно.

Следующее - описания систем координат AutoCAD, которые могут быть определены от и до параметров.



WCS

 Мировая система координат. Система координат “ссылки”. Все другие системы координат определены относительно WCS, который никогда не изменяется. Значения, измеренные относительно WCS устойчивы поперек изменений{*замен*} к другим системам координат.

UCS

Система координат Пользователя. “Рабочая” система координат. Все точки прошли к AutoCAD, командует, включая возвратился от подпрограмм AutoLISP и внешних функций, - точки в текущем UCS (если пользователь не предшествует им с * в Приглашении ко вводу команды). Если Вы хотите, чтобы ваше приложение послало координаты в WCS, ECS, или DCS к AutoCAD командует, Вы должны сначала преобразовать их к UCS,  вызывая acedTrans ().

ECS

Система координат Примитива. Значения Точки, возвращенные acdbEntGet () выражены в этой системе координат относительно примитива непосредственно. Такие точки бесполезны, пока они не преобразованы{*конвертированы*} в WCS, текущий UCS, или текущий DCS, согласно предназначенному использованию примитива. Наоборот, точки должны быть оттранслированы в ECS прежде, чем они написаны к базе данных посредством acdbEntMod () или acdbEntMake ().

DCS

Система координат Дисплея. Система координат, в которую объекты преобразованы прежде, чем они отображены. Начало координат DCS - точка, сохраненная в переменной ЦЕЛЕВОЙ СИСТЕМЫ AutoCAD, и ее Z ось - направление рассмотрения. Другими словами, область просмотра - всегда представление{*вид*} плана его DCS. Эти координаты могут использоваться, чтобы определить, где кое-что появляется пользователю AutoCAD. Когда от и до целочисленных кодов - 2 и 3, в любом порядке, 2 указывает, что  DCS для текущей области просмотра пространства модели, и 3 указывает DCS для пространства листа (PSDCS). Когда этот код 2 используется с целым числом, закодируют другой чем 3 (или другие средства определения системы координат), принято указать DCS пространства потока (пространство листа или пространство модели), и другой параметр принят, чтобы указать систему координат в текущем пространстве.

PSDCS

DCS Пространства листа. Эта система координат может быть преобразована только к или от DCS в настоящее время активной области просмотра пространства модели. Это - по существу 2-ое преобразование, где X и координаты Y всегда масштабируются и смещены, если disp параметр - 0. Координата Z масштабируется, но никогда не оттранслирована; это может использоваться, чтобы найти коэффициент масштаба между этими двумя системами координат. PSDCS (целое число закодируют 2) может быть преобразован только в текущую область просмотра пространства модели: если от параметра равняется 3, к параметру должен равняться 2, и наоборот.

Следующий пример транслирует точку с WCS в текущий UCS.

ads_point pt, result;

struct resbuf fromrb, torb;

pt[X] = 1.0;

pt[Y] = 2.0;

pt[Z] = 3.0;

fromrb.restype = RTSHORT;

fromrb.resval.rint = 0; // WCS

torb.restype = RTSHORT;

torb.resval.rint = 1; // UCS

// disp == 0 indicates that pt is a point:

acedTrans(pt, &fromrb, &torb, FALSE, result);

Если текущий UCS вращается на 90 градусов против часовой стрелки во всем мире Z ось, запрос к acedTrans() устанавливают результат к сути (2.0, -1.0,3.0).

Однако, если acedTrans() вызван, как показано в следующем примере, результат - (-2.0,1.0,3.0).

acedTrans(pt, &torb, &fromrb, FALSE, result);



Содержание раздела