(defun c:AutoPL ( / *ModSpc *ActDoc *acad ss sslen junk done pnt ep )
(setq *ModSpc (vlax-get-property (setq *ActDoc (vlax-get-property (setq *acad (vlax-get-acad-object)) 'ActiveDocument)) 'ModelSpace))
(princ "\nSelect Point Objects:")
(if
(and
(setq ss (ssget '(( 0 . "POINT"))))
(setq junk (getpoint "\nClick to Start")))
(progn
(setq sslen (sslength ss))
(setq drawn nil)
(setq done nil)
(while
(and (= 5 (car (setq pnt (grread T 1 0)))) (= done nil))
(setq ep (is_nearest ss (nth 1 pnt)))
(cond
((= drawn nil)(progn
(setq drawn (list (car ep)))
(drx (vlax-safearray->list (vlax-variant-value (vlax-get-Property (vlax-ename->vla-object (car ep)) 'Coordinates))))))
((= (length drawn) 1)(if (not (is_drawn (car ep)))
(progn
(setq drawn (cons (car ep) drawn))
(drx (vlax-safearray->list (vlax-variant-value (vlax-get-Property (vlax-ename->vla-object (car ep)) 'Coordinates)))))))
((>= (length drawn) 2)(if (not (is_drawn (car ep)))
(progn
(setq drawn (cons (car ep) drawn))
(drx (vlax-safearray->list (vlax-variant-value (vlax-get-Property (vlax-ename->vla-object (car ep)) 'Coordinates)))))))
)
(if (= sslen (length drawn))
(setq done T)))
(setq pl-obj (vlax-invoke-method *ModSpc 'Addpolyline (pl->var (drawn->pntlist)))))
(exit))
(princ)
)
丹的腿,好建议!
@比加尔-我想我不知道你的意思。是否考虑为多段线添加宽度选项-添加闭合选项?你能澄清一下吗? 如果您使用
(vlax get(vlax ename->vla object ep)'坐标)
它将返回坐标。。
我已经想过了。我不必使用(vlax safe array->list(vlax variant value…但是,如果我希望它也使用Civil 3D点,该怎么办?)(vlax get(vlax ename->vla object ent)“location”也可以吗?如果是这样的话,我可以用一个变量代替“坐标”,使其在坐标和位置之间发生变化。我在测试这个时遇到了一些问题,因为有时我会得到一个值,而其他时候我会得到错误:Civil 3D API:句柄无效。 我不知道我知道你的意思,但是。。。
你可以这样做
(vlax-get ep
(if (vlax-property-available-p ep "location")
"location" "coordinates"
)
)
这样想:
(setq property 'Location)
(vlax-get-property property)
或
(setq property 'Coordinates)
(vlax-get-property property)
我想在这一点上,我不是我应该如何实现各种对象,如点,Civil 3D点或Land Desktop点。 你试过我的建议了吗?
你可以使用dxf代码10。。。似乎是一个简单的解决方案
(cdr(assoc 10(entget ep)))
到目前为止,我还没有试过你的建议。虽然使用(assoc 10…将不适用于Civil 3D点。据我所知,访问Civil 3D点的唯一方法是通过VLA对象。 命令:AUTOPL
; 错误:没有函数定义:VLAX-GET-ACAD-OBJECT
只需在例程的顶部添加(vl load com),然后重试
页:
1
[2]