乐筑天下

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

[编程交流] IF函数

[复制链接]

8

主题

34

帖子

26

银币

初来乍到

Rank: 1

铜币
40
发表于 2022-7-5 17:07:30 | 显示全部楼层 |阅读模式
我目前有一个lisp例程,只有在其路径内的特定层上检测到45度斜接线时,才会创建十字线构造线。若我在屏幕上的任何地方点击,它并没有检测到和斜接线相交,它将根本不会创建一条构造线。因此,我想合并一个IF函数或类似的东西,它将允许lisp例程在没有斜接线的情况下像正常的构造线命令一样执行。任何帮助都将不胜感激。
 
谢谢
杰森
 
  1. (defun c:xlineV45 ( / *error* ucsf p xli ss el pp )
  2. (vl-load-com)
  3. (defun *error* ( m )
  4.    (if (eq el (entlast))
  5.      (entdel xli)
  6.    )
  7.    (if ucsf
  8.      (command "_.UCS" "_P")
  9.    )
  10.    (if m
  11.      (prompt m)
  12.    )
  13.    (princ)
  14. )
  15. (if (= 0 (getvar 'worlducs))
  16.    (progn
  17.      (command "_.UCS" "_W")
  18.      (setq ucsf t)
  19.    )
  20. )
  21. (setq p (getpoint "\nPick or specify point : "))
  22. (setq xli
  23.    (entmakex
  24.      (list
  25.        '(0 . "XLINE")
  26.        '(100 . "AcDbEntity")
  27.        '(100 . "AcDbXline")
  28.        (cons 10 p)
  29.        '(11 0.0 1.0 0.0)
  30.      )
  31.    )
  32. )
  33. (setq ss (ssget "_A" '((0 . "LINE") (8 . "45"))))
  34. (setq el (entlast))
  35. (foreach e (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))
  36.    (if (setq pp (vlax-invoke (vlax-ename->vla-object xli) 'intersectwith (vlax-ename->vla-object e) acextendnone))
  37.      (entmake
  38.        (list
  39.          '(0 . "XLINE")
  40.          '(100 . "AcDbEntity")
  41.          '(100 . "AcDbXline")
  42.          (cons 10 pp)
  43.          '(11 1.0 0.0 0.0)
  44.        )
  45.      )
  46.    )
  47. )
  48. (*error* nil)
  49. )
  50. (defun c:xlineH45 ( / *error* ucsf p xli ss el pp )
  51. (vl-load-com)
  52. (defun *error* ( m )
  53.    (if (eq el (entlast))
  54.      (entdel xli)
  55.    )
  56.    (if ucsf
  57.      (command "_.UCS" "_P")
  58.    )
  59.    (if m
  60.      (prompt m)
  61.    )
  62.    (princ)
  63. )
  64. (if (= 0 (getvar 'worlducs))
  65.    (progn
  66.      (command "_.UCS" "_W")
  67.      (setq ucsf t)
  68.    )
  69. )
  70. (setq p (getpoint "\nPick or specify point : "))
  71. (setq xli
  72.    (entmakex
  73.      (list
  74.        '(0 . "XLINE")
  75.        '(100 . "AcDbEntity")
  76.        '(100 . "AcDbXline")
  77.        (cons 10 p)
  78.        '(11 1.0 0.0 0.0)
  79.      )
  80.    )
  81. )
  82. (setq ss (ssget "_A" '((0 . "LINE") (8 . "45"))))
  83. (setq el (entlast))
  84. (foreach e (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))
  85.    (if (setq pp (vlax-invoke (vlax-ename->vla-object xli) 'intersectwith (vlax-ename->vla-object e) acextendnone))
  86.      (entmake
  87.        (list
  88.          '(0 . "XLINE")
  89.          '(100 . "AcDbEntity")
  90.          '(100 . "AcDbXline")
  91.          (cons 10 pp)
  92.          '(11 0.0 1.0 0.0)
  93.        )
  94.      )
  95.    )
  96. )
  97. (*error* nil)
  98. )
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-5 17:28:37 | 显示全部楼层
这(未经测试)
 
  1. (defun c:xlins ( / p )
  2. (setq p (getpoint "\nPick or specify point : "))
  3. (if p
  4.    (command "_.XLINE" "_H" "_non" p "_V" "_non" p "")
  5. )
  6. (princ)
  7. )
回复

使用道具 举报

8

主题

34

帖子

26

银币

初来乍到

Rank: 1

铜币
40
发表于 2022-7-5 17:36:24 | 显示全部楼层
谢谢,但不幸的是,我不知道该把它粘贴到哪里。我有一个宏按钮,它加载lisp例程,然后根据我单击的两个宏按钮中的哪一个启动XLINEV45命令或XLINEH45命令。请告知,谢谢。
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-5 17:53:30 | 显示全部楼层
你们可以把代码复制粘贴到记事本中,并将文件保存为“xlins.lsp”。。。然后将lisp加载到CAD会话中(将文件复制并粘贴到CAD界面或使用APLOAD命令)。。。加载lisp后,只需键入不带引号的“xlins”:xlins,然后只需选取点。。。应创建构造线(xline)。。。你也可以像之前发布的Lisp一样创建第三个宏按钮^C^CXLIN
回复

使用道具 举报

8

主题

34

帖子

26

银币

初来乍到

Rank: 1

铜币
40
发表于 2022-7-5 18:04:27 | 显示全部楼层
谢谢你的帮助,但我目前有第三个按钮,执行相同的功能,并试图消除它。
回复

使用道具 举报

8

主题

34

帖子

26

银币

初来乍到

Rank: 1

铜币
40
发表于 2022-7-5 18:17:50 | 显示全部楼层
我似乎通过忽略一些代码行来实现它。
 
 
  1. (defun c:xlineV45 ( / *error* ucsf p xli ss el pp )
  2. (vl-load-com)
  3. [color="red"];[/color]  (defun *error* ( m )
  4. [color="red"];[/color]    (if (eq el (entlast))
  5. [color="red"];[/color]      (entdel xli)
  6. [color="red"];[/color]    )
  7. [color="red"];[/color]    (if ucsf
  8. [color="red"];[/color]      (command "_.UCS" "_P")
  9. [color="red"];[/color]    )
  10. [color="red"];[/color]    (if m
  11. [color="red"];[/color]      (prompt m)
  12. [color="red"];[/color]    )
  13. [color="red"];[/color]    (princ)
  14. [color="red"];[/color]  )
  15. (if (= 0 (getvar 'worlducs))
  16.    (progn
  17.      (command "_.UCS" "_W")
  18.      (setq ucsf t)
  19.    )
  20. )
  21. (setq p (getpoint "\nPick or specify point : "))
  22. (setq xli
  23.    (entmakex
  24.      (list
  25.        '(0 . "XLINE")
  26.        '(100 . "AcDbEntity")
  27.        '(100 . "AcDbXline")
  28.        (cons 10 p)
  29.        '(11 0.0 1.0 0.0)
  30.      )
  31.    )
  32. )
  33. (setq ss (ssget "_A" '((0 . "LINE") (8 . "45"))))
  34. (setq el (entlast))
  35. (foreach e (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))
  36.    (if (setq pp (vlax-invoke (vlax-ename->vla-object xli) 'intersectwith (vlax-ename->vla-object e) acextendnone))
  37.      (entmake
  38.        (list
  39.          '(0 . "XLINE")
  40.          '(100 . "AcDbEntity")
  41.          '(100 . "AcDbXline")
  42.          (cons 10 pp)
  43.          '(11 1.0 0.0 0.0)
  44.        )
  45.      )
  46.    )
  47. )
  48. (*error* nil)
  49. )
  50. (defun c:xlineH45 ( / *error* ucsf p xli ss el pp )
  51. (vl-load-com)
  52. [color="red"];[/color]  (defun *error* ( m )
  53. [color="red"];[/color]    (if (eq el (entlast))
  54. [color="red"];[/color]      (entdel xli)
  55. [color="red"];[/color]    )
  56. [color="red"];[/color]    (if ucsf
  57. [color="red"];[/color]      (command "_.UCS" "_P")
  58. [color="red"];[/color]    )
  59. [color="red"];[/color]    (if m
  60. [color="red"];[/color]      (prompt m)
  61. [color="red"];[/color]    )
  62. [color="red"];[/color]    (princ)
  63. [color="red"];[/color]  )
  64. (if (= 0 (getvar 'worlducs))
  65.    (progn
  66.      (command "_.UCS" "_W")
  67.      (setq ucsf t)
  68.    )
  69. )
  70. (setq p (getpoint "\nPick or specify point : "))
  71. (setq xli
  72.    (entmakex
  73.      (list
  74.        '(0 . "XLINE")
  75.        '(100 . "AcDbEntity")
  76.        '(100 . "AcDbXline")
  77.        (cons 10 p)
  78.        '(11 1.0 0.0 0.0)
  79.      )
  80.    )
  81. )
  82. (setq ss (ssget "_A" '((0 . "LINE") (8 . "45"))))
  83. (setq el (entlast))
  84. (foreach e (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))
  85.    (if (setq pp (vlax-invoke (vlax-ename->vla-object xli) 'intersectwith (vlax-ename->vla-object e) acextendnone))
  86.      (entmake
  87.        (list
  88.          '(0 . "XLINE")
  89.          '(100 . "AcDbEntity")
  90.          '(100 . "AcDbXline")
  91.          (cons 10 pp)
  92.          '(11 0.0 1.0 0.0)
  93.        )
  94.      )
  95.    )
  96. )
  97. (*error* nil)
  98. )
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-13 08:58 , Processed in 1.125506 second(s), 64 queries .

© 2020-2025 乐筑天下

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