Создание LWPOLYLINE через ActiveX в NC
Понадобилось мне тут создать LWPOLYLINE в NC24.1. Казалось бы - что сложного? Угу, ага... Наник - как всегда - подкинул сюрпризов
Если взять вручную нарисованную полилинию и ее отдампить, в свойствах Coordinates будет видно, что там идут трехмерные точки (и плевать, что третья координата всегда 0). Я и предположил (наивный!), что для создания полилинии в ее координаты надо передавать массив трехмерных точек.
Так я и делал. К примеру, pt_list - список трехмерных точек, полученных неважно как. И я даже нарисовал код типа
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | (setq pt_list (apply (function append) pt_list ) ) (vla-AddLightWeightPolyline OWNER (vlax-make-variant (vlax-safearray-fill (vlax-make-safearray vlax-vbDouble (cons 0 (1- (length pt_list))) ) pt_list ) ) ) |
И даже запустил в нанике. И тут - ух ты! - получаю сообщение об ошибке! Оказывается, для создания LWPOLYLINE надо использовать все же двумерные точки! Т.е. код моментально преобразовывается в нечто типа
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | (setq pt_list (apply (function append) (mapcar (function (lambda (x) (list (car x) (cadr x)) ) ) pt_list ) ) ) (vla-AddLightWeightPolyline OWNER (vlax-make-variant (vlax-safearray-fill (vlax-make-safearray vlax-vbDouble (cons 0 (1- (length pt_list))) ) pt_list ) ) ) |
Что там будет твориться при попытке переназначения координаты хотя бы одной вершины - даже думать не хочу. По крайней мере пока.
P.S. Так что моя фраза в одном из чатов на предмет того, что "код создания полилинии под ACAD и под NC будет отличаться" - неправда ((