折线运行程序
你好假设我指定了四个点,我想用
折线入口。
如何在多段线entmake中构建起点和其余点?
完成的方法。。。。。
(defun c:try (/ p1 p2 p3 p4 )
(if (setq p1 (getpoint "\nSpecify first Point :")
p2 (getpoint "\nSpecify second Point : ")
p3 (getpoint "\nSpecify third Point : ")
p4 (getpoint "\nSpecify forth Point : ")
)
(entmake
(list
(cons 0 "POLYLINE")
(cons 10 ..)
(.................
))
(princ)
)
(princ)
)
谢谢 在我向大家展示之前,首先要做一些其他事情:
[列表]
[*]IF语句的构造方式意味着只测试最后选择的点的有效性,您需要使用AND表达式来检查所有点是否有效。
[/列表]
[列表]
[*]您想创建LWPolyline还是Polyline?
[/列表] 此外,这是我的一条老线索,它可能会帮助你:
http://www.cadtutor.net/forum/showthread.php?44768-Entmake函数&p=302880&viewfull=1#post302880 这一封错寄了,请检查第二封。 谢谢
对我应该在if之后添加和,以包含所有点。非常注意。
所以我想知道entmake(s)POLYLINE和LWPOLYLINE。
处理mapcar、function、lambda的方法。我完全不清楚,我的意思是,我已经尝试理解他们很长时间了,但没有很好的知识。。。
这是给定链接的Lwpolyline。
(defun LWPoly (lst cls)
(entmakex (append (list (cons 0 "LWPOLYLINE")
(cons 100 "AcDbEntity")
(cons 100 "AcDbPolyline")
(cons 90 (length lst))
(cons 70 cls))
(mapcar (function (lambda (p) (cons 10 p))) lst))))
这是第二个带折线的。。。
(defun Polyline (lst)
(entmakex (list (cons 0 "POLYLINE")
(cons 10 '(0 0 0))))
(mapcar
(function (lambda (p)
(entmake (list (cons 0 "VERTEX") (cons 10 p))))) lst)
(entmakex (list (cons 0 "SEQEND"))))
谢谢 首先处理LWPolyline,所有顶点作为DXF Group 10代码存储在主DXF数据列表中。
因此,要创建LWPolyline,我们需要做的就是向entmake(x)函数提供一个包含所有必要数据的列表,如果可能的话,将创建LWPolyline。
在我的代码中:
第一个列表包含子类标记、顶点数以及lwpolyline是开放的还是闭合的等数据。
然后,我将其附加到mapcar函数返回的列表中,在本例中,该函数包含所有顶点数据。
提供给mapcar函数的列表(lst)中的每个坐标(顶点)都传递给lambda函数,然后对该函数进行求值,随后在结果列表中返回lambda函数每次求值的结果。
因此,假设我们有一个列表:
有关哪些DXF代码意味着什么的信息,请参阅此处:
http://images.autodesk.com/adsk/files/acad_dxf1.pdf 在您的第一个示例中,我们可以这样处理:
(defun c:try (/ p1 p2 p3 p4)
(if
(and
(setq p1 (getpoint "\nSpecify First Point : " ))
(setq p2 (getpoint "\nSpecify Second Point : "))
(setq p3 (getpoint "\nSpecify Third Point : " ))
(setq p4 (getpoint "\nSpecify Fourth Point : "))
)
(entmakex
(list
(cons 0 "LWPOLYLINE")
(cons 100 "AcDbEntity")
(cons 100 "AcDbPolyline")
(cons 90 4)
(cons 70 1)
(cons 10 p1)
(cons 10 p2)
(cons 10 p3)
(cons 10 p4)
)
)
)
(princ)
)
这很好。
多段线呢。我替换了上面的。。。(cons 0“LWPOLYLINE”)和(cons 0“POLYLINE”)并给我
entmake中出现90错误。
谢谢 你看过关于DXF代码的文件了吗?这并不像更改第一个条目、DXF代码那么简单,对于多段线来说,顶点的构造方式是完全不同的过程。
我稍后将发布一个示例。 从我前面的链接中可以看到,创建多段线的方法与创建LWD多段线的方法完全不同:
(defun Polyline ( lst )
(entmakex
(list
(cons 0 "POLYLINE")
(cons 10 '(0 0 0))
)
)
(mapcar
(function
(lambda ( p )
(entmake (list (cons 0 "VERTEX") (cons 10 p)))
)
)
lst
)
(entmakex (list (cons 0 "SEQEND")))
)
对于多段线,我们必须连续entmake(x)每个单独的顶点实体,然后entmake一个终止的sequend实体,以声明我们已经完成了多段线的构造。
mapcar的逻辑如下所示,您可以再次在我链接到的文档中查找DXF代码。
页:
[1]
2