如何获得起点和终点
我需要知道如何获得多段线的起点和终点。我是这方面的新手,刚刚学会了如何绘制直线的起点和终点,当我去绘制多段线时,我完全迷路了。另一个问题:我使用一个comand,它取一条线,并将其转化为一条穿孔线,每个线段都是一条单独的多段线。它按顺序创建了所有这些。紧接着这个命令,是否有一种方法可以调用为提取其数据而创建的第一条多边形线,而无需手动选择它? 我怀疑您在Autocad 2000上是这样做的,但在2012年,在命令行类型列表>输入,然后选择多段线或直线或其他任何内容,然后向下查看列表底部的坐标,如附件所示。
哎呀,我无意中误入了池的最深处,刚刚注意到您正在寻找编码帮助。不要介意。
假设您引用的是LWMOLYLINE图元,而不是三维多段线或二维多段线,则有三种方法可以执行此操作:
1) 使用LWPolyline图元的DXF组码:
LWPolyline的顶点存储在多个DXF Group 10对中,我们可以使用简单的foreach循环获得它们,然后使用列表两端的条目(注意,列表将通过使用cons的构造反转):
(foreach pair (entget <LWPolyline Entity>)
(if (= 10 (car pair))
(setq lst (cons (cdr pair) lst))
)
)
(setq p1 (last lst))
(setq p2 (carlst))
或者,您可以直接从DXF数据的开始和结束处获取第一对和最后一对:
(setq el (entget <LWPolyline Entity>)
p1 (cdr (assoc 10 el))
p2 (cdr (assoc 10 (reverse el)))
)
2) 使用LWPolyline VLA对象的坐标特性:
使用Visual LISP时,请记住调用:
(vl-load-com)
在会话期间加载Visual LISP函数一次。
使用vlax ename->VLA对象将LWPolyline图元转换为VLA对象后,可以检索坐标特性,并再次使用列表的开始和结束:
(setq obj (vlax-ename->vla-object <LWPolyline Entity>)
lst (vlax-get obj 'coordinates)
p1 (list (car lst) (cadr lst))
lst (reverse lst)
p2 (list (cadr lst) (car lst))
)
注意,我使用了未记录的vlax get函数来避免从变体到SafeArray再到列表的转换。
3) 使用vlax曲线*函数:
这可能是最简单的方法,因为vlax curve*函数使用起来很直观,可以处理所有曲线对象(直线、圆弧、圆、椭圆、长多段线、多段线、样条曲线等)
同样,您需要调用(vl load com)来加载Visual LISP函数,然后:
(setq p1 (vlax-curve-getstartpoint <LWPolyline Entity>)
p2 (vlax-curve-getendpoint <LWPolyline Entity>)
)
如果要使用命令调用创建LWLopyline,请在创建LWLopyline之前,使用entlast将最后一个图元存储在数据库中,然后在创建LWLopyline之后,可以使用entnext函数逐步遍历数据库中位于“entlast”图元之后的每个图元。
页:
[1]