Группы пользователей Autodesk

Преобразование списка точек в массив типа variant


Построение границы дорожки

 

Построение границы дорожки 
 

Преобразование списка точек в массив типа variant



Таким образом, данные о вершинах полилинии теперь сгруппированы в список, формат которого подходит для передачи его в другие функции AutoLISP. Но нам нужно использовать их как входной параметр для вызова функции ActiveX, которая требует на входе массива типа variant, хранящего числа типа double. Для преобразования списка в тип variant можно воспользоваться следующей служебной функцией:

(defun gp:list->variantArray (ptsList / arraySpace sArray)

; allocate space for an array of 2d points stored as doubles

(setq arraySpace (vlax-make-safearray

vlax-vbdouble ; element type

(cons 0

(- (length ptsList) 1)

) ; array dimension

)

)

(setq sArray (vlax-safearray-fill arraySpace ptsList))

; return array variant

(vlax-make-variant sArray)

)

Внутри функции gp:list->variantArray выполняются следующие действия:

  • Функция vlax-make-safearray вызывается для выделения памяти под массив чисел типа double (vlax-vbdouble). Функция vlax?make?safearray также требует задания минимального и максимального индекса элементов массива. В gp:list->variantArray в запросе к vlax?make?safearray начальный индекс принимается равным 0, а максимальный индекс устанавливается на единицу меньше числа передаваемых в него элементов (ptsList).
  • Функция vlax-safearray-fill заполняет массив элементами списка точек.
  • Функция vlax-make-variant преобразует массив в тип данных variant. Так как это последняя функция в gp:list->variantArray, возвращаемое ей значение передается наверх в вызывающую процедуру.
  • Ниже приведен пример вызова функции, которая использует gp:list->variantArray для преобразования списка в массив типа variant:

    ; data conversion from list to variant

    (setq VLADataPts (gp:list->variantArray polypoints))

     



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