乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 92|回复: 19

[编程交流] 折线运行程序

[复制链接]

55

主题

293

帖子

239

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
275
发表于 2022-7-6 10:35:29 | 显示全部楼层 |阅读模式
你好
 
假设我指定了四个点,我想用
折线入口。
 
如何在多段线entmake中构建起点和其余点?
 
完成的方法。。。。。
 
  1. (defun c:try (/ p1 p2 p3 p4 )
  2. (if (setq p1 (getpoint "\nSpecify first Point :")
  3.     p2 (getpoint "\nSpecify second Point : ")
  4.     p3 (getpoint "\nSpecify third Point : ")
  5.     p4 (getpoint "\nSpecify forth Point : ")
  6.       )
  7.    
  8.    (entmake
  9.      (list
  10.           (cons 0 "POLYLINE")
  11.          [color="red"](cons 10 ..)
  12.          (.................[/color]
  13.        ))
  14. (princ)
  15.    )
  16. (princ)
  17. )

 
谢谢
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 10:39:16 | 显示全部楼层
在我向大家展示之前,首先要做一些其他事情:
 
 
[列表]
  • IF语句的构造方式意味着只测试最后选择的点的有效性,您需要使用AND表达式来检查所有点是否有效。
    [/列表]
     
    [列表]
  • 您想创建LWPolyline还是Polyline?
    [/列表]
  • 回复

    使用道具 举报

    114

    主题

    1万

    帖子

    1万

    银币

    中流砥柱

    Rank: 25

    铜币
    543
    发表于 2022-7-6 10:42:13 | 显示全部楼层
    此外,这是我的一条老线索,它可能会帮助你:
     
    http://www.cadtutor.net/forum/showthread.php?44768-Entmake函数&p=302880&viewfull=1#post302880
    回复

    使用道具 举报

    55

    主题

    293

    帖子

    239

    银币

    后起之秀

    Rank: 20Rank: 20Rank: 20Rank: 20

    铜币
    275
    发表于 2022-7-6 10:46:12 | 显示全部楼层
    这一封错寄了,请检查第二封。
    回复

    使用道具 举报

    55

    主题

    293

    帖子

    239

    银币

    后起之秀

    Rank: 20Rank: 20Rank: 20Rank: 20

    铜币
    275
    发表于 2022-7-6 10:49:49 | 显示全部楼层
    谢谢
     
    对我应该在if之后添加和,以包含所有点。非常注意。
     
    所以我想知道entmake(s)POLYLINE和LWPOLYLINE。
     
    处理mapcar、function、lambda的方法。我完全不清楚,我的意思是,我已经尝试理解他们很长时间了,但没有很好的知识。。。
     
    这是给定链接的Lwpolyline。
     
    1. (defun LWPoly (lst cls)
    2. (entmakex (append (list (cons 0 "LWPOLYLINE")
    3.                          (cons 100 "AcDbEntity")
    4.                          (cons 100 "AcDbPolyline")
    5.                          (cons 90 (length lst))
    6.                          (cons 70 cls))
    7.                    (mapcar (function (lambda (p) (cons 10 p))) lst))))

     
    这是第二个带折线的。。。
    1. (defun Polyline (lst)
    2. (entmakex (list (cons 0 "POLYLINE")
    3.                  (cons 10 '(0 0 0))))
    4. (mapcar
    5.    (function (lambda (p)
    6.                (entmake (list (cons 0 "VERTEX") (cons 10 p))))) lst)
    7. (entmakex (list (cons 0 "SEQEND"))))

     
    谢谢
    回复

    使用道具 举报

    114

    主题

    1万

    帖子

    1万

    银币

    中流砥柱

    Rank: 25

    铜币
    543
    发表于 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
    回复

    使用道具 举报

    114

    主题

    1万

    帖子

    1万

    银币

    中流砥柱

    Rank: 25

    铜币
    543
    发表于 2022-7-6 10:56:33 | 显示全部楼层
    在您的第一个示例中,我们可以这样处理:
     
    1. (defun c:try (/ p1 p2 p3 p4)
    2. (if
    3.    (and
    4.      (setq p1 (getpoint "\nSpecify First Point : " ))
    5.      (setq p2 (getpoint "\nSpecify Second Point : "))
    6.      (setq p3 (getpoint "\nSpecify Third Point : " ))
    7.      (setq p4 (getpoint "\nSpecify Fourth Point : "))
    8.    )
    9.     (entmakex
    10.       (list
    11.         (cons 0 "LWPOLYLINE")
    12.         (cons 100 "AcDbEntity")
    13.         (cons 100 "AcDbPolyline")
    14.         (cons 90 4)
    15.         (cons 70 1)
    16.         (cons 10 p1)
    17.         (cons 10 p2)
    18.         (cons 10 p3)
    19.         (cons 10 p4)
    20.       )
    21.     )
    22. )
    23. (princ)
    24. )
    回复

    使用道具 举报

    55

    主题

    293

    帖子

    239

    银币

    后起之秀

    Rank: 20Rank: 20Rank: 20Rank: 20

    铜币
    275
    发表于 2022-7-6 10:59:44 | 显示全部楼层
     
    这很好。
     
    多段线呢。我替换了上面的。。。(cons 0“LWPOLYLINE”)和(cons 0“POLYLINE”)并给我
    entmake中出现90错误。
     
    谢谢
    回复

    使用道具 举报

    114

    主题

    1万

    帖子

    1万

    银币

    中流砥柱

    Rank: 25

    铜币
    543
    发表于 2022-7-6 11:03:30 | 显示全部楼层
    你看过关于DXF代码的文件了吗?这并不像更改第一个条目、DXF代码那么简单,对于多段线来说,顶点的构造方式是完全不同的过程。
     
    我稍后将发布一个示例。
    回复

    使用道具 举报

    114

    主题

    1万

    帖子

    1万

    银币

    中流砥柱

    Rank: 25

    铜币
    543
    发表于 2022-7-6 11:06:14 | 显示全部楼层
    从我前面的链接中可以看到,创建多段线的方法与创建LWD多段线的方法完全不同:
     
    1. (defun Polyline ( lst )
    2. (entmakex
    3.    (list
    4.      (cons 0 "POLYLINE")
    5.      (cons 10 '(0 0 0))
    6.    )
    7. )
    8. (mapcar
    9.    (function
    10.      (lambda ( p )
    11.        (entmake (list (cons 0 "VERTEX") (cons 10 p)))
    12.      )
    13.    )
    14.    lst
    15. )
    16. (entmakex (list (cons 0 "SEQEND")))
    17. )

     
    对于多段线,我们必须连续entmake(x)每个单独的顶点实体,然后entmake一个终止的sequend实体,以声明我们已经完成了多段线的构造。
     
    mapcar的逻辑如下所示,您可以再次在我链接到的文档中查找DXF代码。
    回复

    使用道具 举报

    发表回复

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    • 微信公众平台

    • 扫描访问手机版

    • 点击图片下载手机App

    QQ|关于我们|小黑屋|乐筑天下 繁体中文

    GMT+8, 2025-3-6 16:57 , Processed in 0.476667 second(s), 72 queries .

    © 2020-2025 乐筑天下

    联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表