乐筑天下

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

[编程交流] 在交点处插入点

[复制链接]

14

主题

75

帖子

65

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
75
发表于 2022-7-5 17:05:04 | 显示全部楼层 |阅读模式
大家好,
我是这个网站的新手,有没有lisp程序可以在每一条直线的交点和端点插入点?
 
这里我附上样品图纸。请提供lisp。
 
谢谢
点在交点和线的端点处插入。图纸
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 17:08:39 | 显示全部楼层
我丢失了一个解决方案,或者我把它叫做其他东西,所以找不到,所以现在,唯一的问题是,在多条线相交的地方,你们会得到很多点,所以版本二将删除重复项。
 
  1. ; notested
  2. (defun c:test ( / ss x obj stpt endpt)
  3. (setq ss (ssget '((0 . "line"))))
  4. (repeat (setq x (sslength ss))
  5. (setq obj (vlax-ename->vla-object(ssname ss (setq x (- x 1)))))
  6. (setq stpt (vlax-safearray->list (vlax-variant-value(vla-get-startpoint obj))))
  7. (setq endpt (vlax-safearray->list (vlax-variant-value (vla-get-endpoint obj))))
  8. (command "point" stpt "point" endpt)
  9. )
  10. )
回复

使用道具 举报

14

主题

75

帖子

65

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
75
发表于 2022-7-5 17:11:53 | 显示全部楼层
好的,回答BIGAL,
是,生成了重复点。
代码对于行的起点和终点都很好。但缺少交点。请看一下交点。
 
谢谢
180509vtmxj2njjbavwjax.jpg
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-5 17:15:40 | 显示全部楼层
这是可能的,但在大文件上效率很低。
 
[列表]
  • 所有实体都是二维线吗?
  • 所有线路的标高是否相同?
  • 您需要指定公差值
  • 如果PDMODE=0,该点将不可见
    [/列表]
     
    -大卫
  • 回复

    使用道具 举报

    14

    主题

    75

    帖子

    65

    银币

    初露锋芒

    Rank: 3Rank: 3Rank: 3

    铜币
    75
    发表于 2022-7-5 17:18:31 | 显示全部楼层
    尊敬的DAVID:,
     
     
    [列表]
  • 所有实体都是二维线吗?>对
  • 所有线路的标高是否相同?>对
  • 您需要指定一个公差值>零公差
  • 如果PDMODE=0,该点将不可见>Ok
     
    [/列表]
     
     
    谢谢
  • 回复

    使用道具 举报

    26

    主题

    1495

    帖子

    20

    银币

    初露锋芒

    Rank: 3Rank: 3Rank: 3

    铜币
    118
    发表于 2022-7-5 17:22:51 | 显示全部楼层
    由于实数的存储方式,您必须具有某种类型的容差。
     
    可能是这样的:
     
    1. [b][color=BLACK]([/color][/b]defun c:line-pt [b][color=FUCHSIA]([/color][/b]/ f pl ss i en ed p10 p11 c cn cd c10 c11 ip[b][color=FUCHSIA])[/color][/b]
    2. [color=#8b4513];;;ROUND WITH PRECESSION[/color]
    3. [b][color=FUCHSIA]([/color][/b]defun rnd [b][color=NAVY]([/color][/b]n m[b][color=NAVY])[/color][/b]
    4.    [b][color=NAVY]([/color][/b]* m [b][color=MAROON]([/color][/b]fix [b][color=GREEN]([/color][/b][b][color=BLUE]([/color][/b]if [b][color=RED]([/color][/b]minusp n[b][color=RED])[/color][/b] - +[b][color=BLUE])[/color][/b] [b][color=BLUE]([/color][/b]/ n m[b][color=BLUE])[/color][/b] 0.5[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
    5. [b][color=FUCHSIA]([/color][/b]defun rp3 [b][color=NAVY]([/color][/b]p f[b][color=NAVY])[/color][/b]
    6.    [b][color=NAVY]([/color][/b]list [b][color=MAROON]([/color][/b]rnd [b][color=GREEN]([/color][/b]nth 0 p[b][color=GREEN])[/color][/b] f[b][color=MAROON])[/color][/b]
    7.          [b][color=MAROON]([/color][/b]rnd [b][color=GREEN]([/color][/b]nth 1 p[b][color=GREEN])[/color][/b] f[b][color=MAROON])[/color][/b]
    8.          [b][color=MAROON]([/color][/b]rnd [b][color=GREEN]([/color][/b]nth 2 p[b][color=GREEN])[/color][/b] f[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
    9. [b][color=FUCHSIA]([/color][/b]initget 6[b][color=FUCHSIA])[/color][/b]
    10. [b][color=FUCHSIA]([/color][/b]setq f [b][color=NAVY]([/color][/b]getdist [color=#2f4f4f]"\nFuzz Tolerance <1e-4>:   "[/color][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
    11. [b][color=FUCHSIA]([/color][/b]or f [b][color=NAVY]([/color][/b]setq f 1e-4[b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
    12. [b][color=FUCHSIA]([/color][/b]while [b][color=NAVY]([/color][/b]not ss[b][color=NAVY])[/color][/b]
    13.         [b][color=NAVY]([/color][/b]setq ss [b][color=MAROON]([/color][/b]ssget [b][color=GREEN]([/color][/b]list [b][color=BLUE]([/color][/b]cons 0 [color=#2f4f4f]"LINE"[/color][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
    14. [b][color=FUCHSIA]([/color][/b]setq i 0[b][color=FUCHSIA])[/color][/b]
    15. [b][color=FUCHSIA]([/color][/b]while [b][color=NAVY]([/color][/b]setq en [b][color=MAROON]([/color][/b]ssname ss i[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
    16.         [b][color=NAVY]([/color][/b]setq ed [b][color=MAROON]([/color][/b]entget en[b][color=MAROON])[/color][/b]
    17.               p10 [b][color=MAROON]([/color][/b]rp3 [b][color=GREEN]([/color][/b]cdr [b][color=BLUE]([/color][/b]assoc 10 ed[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b] f[b][color=MAROON])[/color][/b]
    18.               p11 [b][color=MAROON]([/color][/b]rp3 [b][color=GREEN]([/color][/b]cdr [b][color=BLUE]([/color][/b]assoc 11 ed[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b] f[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
    19.         [b][color=NAVY]([/color][/b]if [b][color=MAROON]([/color][/b]not [b][color=GREEN]([/color][/b]member p10 pl[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
    20.             [b][color=MAROON]([/color][/b]setq pl [b][color=GREEN]([/color][/b]cons p10 pl[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
    21.         [b][color=NAVY]([/color][/b]if [b][color=MAROON]([/color][/b]not [b][color=GREEN]([/color][/b]member p11 pl[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
    22.             [b][color=MAROON]([/color][/b]setq pl [b][color=GREEN]([/color][/b]cons p11 pl[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
    23.         [b][color=NAVY]([/color][/b]setq i [b][color=MAROON]([/color][/b]1+ i[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
    24. [b][color=FUCHSIA]([/color][/b]princ [color=#2f4f4f]"\nSearching For Intersections...\n"[/color][b][color=FUCHSIA])[/color][/b]
    25. [b][color=FUCHSIA]([/color][/b]setq i 0[b][color=FUCHSIA])[/color][/b]
    26. [b][color=FUCHSIA]([/color][/b]while [b][color=NAVY]([/color][/b]setq en [b][color=MAROON]([/color][/b]ssname ss i[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
    27.         [b][color=NAVY]([/color][/b]princ [color=#2f4f4f]"\r"[/color][b][color=NAVY])[/color][/b]
    28.         [b][color=NAVY]([/color][/b]prin1 en[b][color=NAVY])[/color][/b]
    29.         [b][color=NAVY]([/color][/b]setq ed [b][color=MAROON]([/color][/b]entget en[b][color=MAROON])[/color][/b]
    30.              p10 [b][color=MAROON]([/color][/b]cdr [b][color=GREEN]([/color][/b]assoc 10 ed[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
    31.              p11 [b][color=MAROON]([/color][/b]cdr [b][color=GREEN]([/color][/b]assoc 11 ed[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
    32.                c 0[b][color=NAVY])[/color][/b]
    33.         [b][color=NAVY]([/color][/b]while [b][color=MAROON]([/color][/b]setq cn [b][color=GREEN]([/color][/b]ssname ss c[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
    34.                [b][color=MAROON]([/color][/b]setq cd [b][color=GREEN]([/color][/b]entget cn[b][color=GREEN])[/color][/b]
    35.                      c10 [b][color=GREEN]([/color][/b]cdr [b][color=BLUE]([/color][/b]assoc 10 cd[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b]
    36.                      c11 [b][color=GREEN]([/color][/b]cdr [b][color=BLUE]([/color][/b]assoc 11 cd[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
    37.                [b][color=MAROON]([/color][/b]and [b][color=GREEN]([/color][/b]setq ip [b][color=BLUE]([/color][/b]inters p10 p11 c10 c11[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b]
    38.                     [b][color=GREEN]([/color][/b]setq ip [b][color=BLUE]([/color][/b]rp3 ip f[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b]
    39.                     [b][color=GREEN]([/color][/b]not [b][color=BLUE]([/color][/b]member ip pl[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b]
    40.                     [b][color=GREEN]([/color][/b]setq pl [b][color=BLUE]([/color][/b]cons ip pl[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
    41.                [b][color=MAROON]([/color][/b]setq c [b][color=GREEN]([/color][/b]1+ c[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
    42.         [b][color=NAVY]([/color][/b]setq i [b][color=MAROON]([/color][/b]1+ i[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
    43. [b][color=FUCHSIA]([/color][/b]setvar [color=#2f4f4f]"PDMODE"[/color] 3[b][color=FUCHSIA])[/color][/b]
    44. [b][color=FUCHSIA]([/color][/b]foreach p pl
    45.     [b][color=NAVY]([/color][/b]entmake [b][color=MAROON]([/color][/b]list [b][color=GREEN]([/color][/b]cons 0 [color=#2f4f4f]"POINT"[/color][b][color=GREEN])[/color][/b][b][color=GREEN]([/color][/b]cons 10 p[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
    46. [b][color=FUCHSIA]([/color][/b]prin1[b][color=FUCHSIA])[/color][/b][b][color=BLACK])[/color][/b]

     
     
    我在400条线上试了一下,大约花了5秒钟。
     
    -大卫
    回复

    使用道具 举报

    14

    主题

    75

    帖子

    65

    银币

    初露锋芒

    Rank: 3Rank: 3Rank: 3

    铜币
    75
    发表于 2022-7-5 17:25:35 | 显示全部楼层
    尊敬的DAVID:,
    谢谢你的Lisp程序。现在所有的点都产生了。但点不是在精确的角点和端点处产生的。请查看附件中的图片。
     
    为什么要问你的Lisp程序模糊容忍度?不用问。请将其设置为应在线路的每个起点、终点和交点处形成的点。并建立了重复点。请修改。
     
     
    谢谢
    180511bncwt34hujdc34dt.jpg
    回复

    使用道具 举报

    26

    主题

    1495

    帖子

    20

    银币

    初露锋芒

    Rank: 3Rank: 3Rank: 3

    铜币
    118
    发表于 2022-7-5 17:29:45 | 显示全部楼层
    尝试将公差设置为1e-14。比较点并不是一个精确的过程。特别是当其中一个点值由另一个计算调用确定时。即(inters)或(polar)或修剪或延伸功能已应用。(成员)测试必须精确等于才能返回T
     
    -大卫
    回复

    使用道具 举报

    14

    主题

    75

    帖子

    65

    银币

    初露锋芒

    Rank: 3Rank: 3Rank: 3

    铜币
    75
    发表于 2022-7-5 17:32:42 | 显示全部楼层
    尊敬的DAVID:,
    改为1e-14后,分数表现良好。但在某些相交区域,会出现重复点。请看一看。请删除命令提示框中的模糊容差选项,以指导点的开发。
     
    谢谢
    回复

    使用道具 举报

    26

    主题

    1495

    帖子

    20

    银币

    初露锋芒

    Rank: 3Rank: 3Rank: 3

    铜币
    118
    发表于 2022-7-5 17:35:52 | 显示全部楼层
    你没听懂
     
    试试这个:
     
    理论上,这些点是相等的:
     
    1. (setq p1 (list 1000 3000 0))
    2. (setq tp (inters
    3.             (polar (list 1000 3000 0) (* pi  0.5) 1000)
    4.             (polar (list 1000 4000 0) (* pi -0.5) 1000)
    5.             (polar (list 1000 2000 0)    pi        500)
    6.             (polar (list 1500 2000 0) (* pi  0.5) 2000)
    7.           ))
    8. (princ "\nEqual p1 tp : ") (prin1 (equal p1 tp))
    9. (princ "\nEqual p1 tp 1e-1  : ") (prin1 (equal p1 tp 1e-1))
    10. (princ "\nEqual p1 tp 1e-3  : ") (prin1 (equal p1 tp 1e-3))
    11. (princ "\nEqual p1 tp 1e-5  : ") (prin1 (equal p1 tp 1e-5))
    12. (princ "\nEqual p1 tp 1e-7  : ") (prin1 (equal p1 tp 1e-7))
    13. (princ "\nEqual p1 tp 1e-9  : ") (prin1 (equal p1 tp 1e-9))
    14. (princ "\nEqual p1 tp 1e-11 : ") (prin1 (equal p1 tp 1e-11))
    15. (princ "\nEqual p1 tp 1e-13 : ") (prin1 (equal p1 tp 1e-13))
    16. (princ "\nEqual p1 tp 1e-14 : ") (prin1 (equal p1 tp 1e-14))

     
    但1e-13和1e-14返回零
     
    这是计算机存储超过14位有效数字的方式。否则,你会得到看起来重复但实际上很接近但不精确的点。
    回复

    使用道具 举报

    发表回复

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

    本版积分规则

    • 微信公众平台

    • 扫描访问手机版

    • 点击图片下载手机App

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

    GMT+8, 2025-7-7 09:29 , Processed in 2.099599 second(s), 74 queries .

    © 2020-2025 乐筑天下

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