Создание 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 будет отличаться" - неправда ((

Размещено в nanoCAD, Код LISP, Функции LISP · Метки: , ,



Поделитесь своим мнением


Я не робот.