autolisp 获取多段线的定点数 'vertices无效 替代方法
时间: 2024-03-23 18:36:50 浏览: 19
如果您想获取多段线的顶点数,您可以使用`entget`函数获取多段线的实体列表,然后遍历列表并查找其子列表中的点列表,如下所示:
```lisp
(defun get-vertices-count (polyline)
(setq vertices 0)
(setq ent (entget polyline))
(foreach el ent
(if (= (car el) 10) ; 判断是否为点
(setq vertices (+ vertices 1))
)
)
vertices
)
```
这个函数将返回多段线的顶点数。您可以将多段线的实体列表传递给这个函数,如下所示:
```lisp
(setq pline (car (entsel)))
(get-vertices-count pline)
```
请注意,这个函数仅适用于多段线的简单情况,如果您的多段线包含弧线或曲线,这个函数将不再有效。
相关问题
autolisp 画多段线
要使用AutoLISP在AutoCAD中画多段线,可以使用LWPOLYLINE命令。下面是一个简单的示例程序:
```lisp
(defun c:mline ()
(setq points '()) ; 创建一个空点列表
(while
(setq pt (getpoint "\n输入下一个点或 [闭合(C)]: "))
(setq points (cons pt points))
(if (y-or-n-p "是否闭合多段线?")
(progn
(setq points (reverse points))
(setq points (append points (list (car points)))) ; 在列表末尾添加第一个点
(setq points (reverse points))
(setq pline (entmakex (list (cons 0 "LWPOLYLINE") (cons 10 (car points)) (cons 90 (length points)) (cons 70 1) (cons 43 0.0) (cons 38 (getvar 'ltscale)) (cons 39 0) (cons 210 (list 0.0 0.0 1.0))))) ; 创建多段线实体
(entmake (list (cons 0 "SEQEND")))) ; 添加SEQEND实体
)
)
(princ)
)
```
运行程序后,输入多个点,最后选择是否闭合多段线。如果选择闭合,则程序将在多段线末尾添加第一个点,并创建多段线实体。程序还使用了一些实体属性,如点坐标、点数、闭合标志、线宽、线型比例、颜色和方向。
用AutoLISP提取多段线顶点坐标
提取多段线顶点坐标可以使用 AutoLISP 中的 `ssget` 函数选择多段线实体,然后使用 `vlax-curve-getPoints` 函数获取多段线的顶点坐标。
以下是一个示例代码,其中 `pline` 变量表示多段线实体,`points` 变量表示多段线的顶点坐标:
```lisp
(setq pline (vlax-ename->vla-object (car (ssget "_X" '((0 . "LWPOLYLINE"))))))
(setq points (vlax-curve-getPoints pline))
(foreach pt points
(setq x (car pt))
(setq y (cadr pt))
(setq z (caddr pt))
(format t "Vertex: (~d, ~d, ~d)~%" x y z))
```
在上面的代码中,我们使用 `ssget` 函数选择多段线实体,并使用 `vlax-ename->vla-object` 函数将其转换为 AutoCAD 对象。然后,我们使用 `vlax-curve-getPoints` 函数获取多段线的顶点坐标,分别存储到变量 `points` 中。最后,我们使用 `foreach` 循环遍历每个顶点坐标,并将其分别存储到变量 `x`、`y` 和 `z` 中,并输出到控制台上。
请注意,上述代码假设您已经熟悉 AutoLISP 和 AutoCAD 的基本操作。如果您需要更多的帮助,请参考 AutoLISP 和 AutoCAD 的官方文档。