假设您引用的是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 (car lst))
或者,您可以直接从DXF数据的开始和结束处获取第一对和最后一对:
- (setq el (entget <LWPolyline Entity>)
- p1 (cdr (assoc 10 el))
- p2 (cdr (assoc 10 (reverse el)))
- )
2) 使用LWPolyline VLA对象的坐标特性:
使用Visual LISP时,请记住调用:
在会话期间加载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”图元之后的每个图元。 |