Точки
Точки AutoCAD определены как следующий тип массива:
typedef ads_real ads_point [3];
Точка всегда включает три значения. Если точка двумерна, третий элемент массива может игнорироваться; самое безопасное инициализировать это к 0.
ObjectARX
определяет следующие значения точки:
#define X 0
#define Y 1
#define Z 2
В отличие от простых типов данных (или списки точки в AutoLISP), точка не может быть назначена с единственной{*отдельной*} инструкцией. Чтобы назначать указатель, Вы должны копировать индивидуальные элементы массива, как показано в следующем примере:
newpt [X] = oldpt [X];
newpt [Y] = oldpt [Y];
newpt [Z] = oldpt [Z];
Вы можете также копировать значение точки с ads_point_set () макрокоманда. Результат - второй параметр к макрокоманде.
Следующие типовые кодовые наборы точка, чтобы равняться к сути от:
ads_point to, from;
from[X] = from[Y] = 5.0; from[Z] = 0.0;
ads_point_set(from, to);
ОБРАТИТЕ ВНИМАНИЕ на макрокоманду This, подобно ads_name_set () макрокоманда, определен по-другому, в зависимости от того, действительно ли символ __ STDC __ (для стандарта C) определен.
Стандартная версия C ads_point_set () требует, чтобы ваша программа включила string.h.
Из-за соглашений передачи параметров языка C, точки пропускает ссылка без адреса оператор (косвенности) и. (C всегда передает параметры массива ссылкой, с указателем на первый элемент массива.)
AcedOsnap () библиотечная функция берет точку как параметр, и возвращает точку в результате. Это объявлено следующим образом:
int acedOsnap(pt, mode, result)
ads_point pt;
char *mode;
ads_point result;
AcedOsnap () функция ведет себя подобно AutoLISP osnap функция. Требуется точка (запятая) и некоторые режимы объектной привязки (указанный в строковом режиме), и возвращает самую близкую точку (в результате). Значение int, что acedOsnap () возвращения - код состояния, который указывает успех (RTNORM) или отказ{*неудачу*}.
Следующий кодовый фрагмент вызывает acedOsnap ():
int findendpoint(ads_point oldpt, ads_point newpt)
{
ads_point ptres;
int foundpt;
foundpt = acedOsnap(oldpt, "end", ptres);
if (foundpt == RTNORM) {
ads_point_set(ptres, newpt);
}
return foundpt;
}
Поскольку точки - массивы, oldpt и ptres автоматически проходят к acedOsnap () ссылкой (то есть как указатели на первый элемент каждого массива) скорее чем значением. AcedOsnap () функция возвращает ее результат (в противоположность ее состоянию) устанавливая значение newpt параметра.
ObjectARX
определяет указатель на точку, когда указатель необходим вместо типа массива.
typedef ads_real *ads_pointp;