Michaels 发表于 2022-7-6 10:35:29

折线运行程序

你好
 
假设我指定了四个点,我想用
折线入口。
 
如何在多段线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)
)

 
谢谢

Lee Mac 发表于 2022-7-6 10:39:16

在我向大家展示之前,首先要做一些其他事情:
 
 
[列表]
[*]IF语句的构造方式意味着只测试最后选择的点的有效性,您需要使用AND表达式来检查所有点是否有效。
[/列表]
 
[列表]
[*]您想创建LWPolyline还是Polyline?
[/列表]

Lee Mac 发表于 2022-7-6 10:42:13

此外,这是我的一条老线索,它可能会帮助你:
 
http://www.cadtutor.net/forum/showthread.php?44768-Entmake函数&p=302880&viewfull=1#post302880

Michaels 发表于 2022-7-6 10:46:12

这一封错寄了,请检查第二封。

Michaels 发表于 2022-7-6 10:49:49

谢谢
 
对我应该在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"))))

 
谢谢

Lee Mac 发表于 2022-7-6 10:53:30

首先处理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

Lee Mac 发表于 2022-7-6 10:56:33

在您的第一个示例中,我们可以这样处理:
 

(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)
)

Michaels 发表于 2022-7-6 10:59:44

 
这很好。
 
多段线呢。我替换了上面的。。。(cons 0“LWPOLYLINE”)和(cons 0“POLYLINE”)并给我
entmake中出现90错误。
 
谢谢

Lee Mac 发表于 2022-7-6 11:03:30

你看过关于DXF代码的文件了吗?这并不像更改第一个条目、DXF代码那么简单,对于多段线来说,顶点的构造方式是完全不同的过程。
 
我稍后将发布一个示例。

Lee Mac 发表于 2022-7-6 11:06:14

从我前面的链接中可以看到,创建多段线的方法与创建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
查看完整版本: 折线运行程序