jeremyearle5 发表于 2022-7-6 08:26:13

如何获得起点和终点

我需要知道如何获得多段线的起点和终点。我是这方面的新手,刚刚学会了如何绘制直线的起点和终点,当我去绘制多段线时,我完全迷路了。
 
另一个问题:我使用一个comand,它取一条线,并将其转化为一条穿孔线,每个线段都是一条单独的多段线。它按顺序创建了所有这些。紧接着这个命令,是否有一种方法可以调用为提取其数据而创建的第一条多边形线,而无需手动选择它?

Dadgad 发表于 2022-7-6 09:22:25

我怀疑您在Autocad 2000上是这样做的,但在2012年,在命令行类型列表>输入,然后选择多段线或直线或其他任何内容,然后向下查看列表底部的坐标,如附件所示。
 
 
 
 
 
 
 
 
哎呀,我无意中误入了池的最深处,刚刚注意到您正在寻找编码帮助。不要介意。

Lee Mac 发表于 2022-7-6 09:26:29

 
假设您引用的是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]
查看完整版本: 如何获得起点和终点