乐筑天下

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

[编程交流] 在li的中点插入块

[复制链接]

5

主题

23

帖子

18

银币

初来乍到

Rank: 1

铜币
25
发表于 2022-7-5 19:51:46 | 显示全部楼层 |阅读模式
早上好,我需要一个lisp,它可以自动在预定长度的每个特定行的中点插入一个块。
 
我在图纸中创建了几个块,称为:
-“50m”->插入500 mm直线的中点
-“100m”->插入1000 mm线的中点。
ecc。。
我写了这个粗糙的代码
 
  1. (defun C:blockparlines (/)
  2. (setq s (ssget "x" '((0 . "LINE" ))))
  3. ;FILTER SELECTION FOR LINES WITH LENGTH 500 mm
  4. (setq ss1 (ssadd))
  5. (setq lung 500)
  6. (setq ss2 s)
  7. (if ss2 (progn
  8. (setq i 0  ssl (sslength ss2))
  9. (repeat ssl
  10. (setq ename (ssname ss2 i))
  11. (setq ll (distance (cdr (assoc 10 (entget ename))) (cdr (assoc 11 (entget ename)))))
  12. (if (= lung ll)(ssadd ename ss1))
  13. (setq i (1+ i))
  14. )
  15. (princ (strcat (itoa (sslength ss1)) " generated block's of 500 mm."))
  16. ;(sssetfirst nil ss1)
  17. ))
  18. (princ)
  19. ;INSERT BLOCK IN MIDPOINT of 500 mm
  20. (setq name "50M")
  21. (repeat (setq i (sslength ss1))
  22.       (setq e (entget (ssname ss1 (setq i (1- i)))))
  23.       (entmakex
  24.         (list '(0 . "INSERT")
  25.               (cons 10
  26.                     (mapcar (function (lambda (q p) (/ (+ q p) 2.)))
  27.                             (setq p1 (cdr (assoc 10 e)))
  28.                             (setq p2 (cdr (assoc 11 e)))
  29.                     )
  30.               )
  31.               (cons 2 name)
  32.               (cons 50 (angle p1 p2))
  33.               '(41 . 1.0)
  34.               '(42 . 1.0)
  35.               '(43 . 1.0)
  36.         )
  37.       )
  38. )
  39. (princ)
  40. ;RESET SS1
  41. (setq ss1 nil)
  42. (setq ss1 (ssadd))
  43. ;FILTER SELECTION FOR LINES WITH LENGTH 1000 mm
  44. (setq lung 1000)
  45. (setq ss2 s)
  46. (if ss2 (progn
  47. (setq i 0  ssl (sslength ss2))
  48. (repeat ssl
  49. (setq ename (ssname ss2 i))
  50. (setq ll (distance (cdr (assoc 10 (entget ename))) (cdr (assoc 11 (entget ename)))))
  51. (if (= lung ll)(ssadd ename ss1))
  52. (setq i (1+ i))
  53. )
  54. (princ (strcat (itoa (sslength ss1)) " generated block's of 1000 mm."))
  55. (sssetfirst nil ss1)
  56. ))
  57. (princ)
  58. ;INSERT BLOCK IN MIDPOINT of 1000 mm
  59. (setq name "100M")
  60. (repeat (setq i (sslength ss1))
  61.       (setq e (entget (ssname ss1 (setq i (1- i)))))
  62.       (entmakex
  63.         (list '(0 . "INSERT")
  64.               (cons 10
  65.                     (mapcar (function (lambda (q p) (/ (+ q p) 2.)))
  66.                             (setq p1 (cdr (assoc 10 e)))
  67.                             (setq p2 (cdr (assoc 11 e)))
  68.                     )
  69.               )
  70.               (cons 2 name)
  71.               (cons 50 (angle p1 p2))
  72.               '(41 . 1.0)
  73.               '(42 . 1.0)
  74.               '(43 . 1.0)
  75.         )
  76.       )
  77. )
  78. (princ)
  79. ;RESET SS1
  80. (setq ss1 nil)
  81. (setq ss1 (ssadd))
  82. )

 
以下是错误:
-它没有考虑沿XZ-YZ平面的线?我不明白为什么。
-这是一段很长的代码,我需要按长度插入10个或更多的块。优化例程的简单方法?
 
谢谢
米勒
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-5 20:00:40 | 显示全部楼层
你能列出其余的区块名及其相关长度吗?
回复

使用道具 举报

5

主题

23

帖子

18

银币

初来乍到

Rank: 1

铜币
25
发表于 2022-7-5 20:01:29 | 显示全部楼层
要在线路上关联的块列表:
长度为500 mm的线路中点处的“50M”->
长度为1000 mm的线路中点处的“100M”->
长度为1500 mm的线路中点处的“150M”->
长度为2000 mm的线路中点处的“200M”->
长度为2500 mm的线路中点处的“250M”->
长度为3000 mm的线路中点处的“300M”->
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-5 20:06:51 | 显示全部楼层
试试这个,让我知道。
 
[未测试]
 
  1. (defun c:Test  (/ l ss)
  2. ;;;        Tharwat 27.4.2015        ;;;
  3. (setq l '(("50M" 500)
  4.            ("100M" 1000)
  5.            ("150M" 1500)
  6.            ("200M" 2000)
  7.            ("250M" 2500)
  8.            ("300M" 3000))
  9.        )
  10. (if (setq ss (ssget '((0 . "LINE"))))
  11.    ((lambda (i / sn a b f)
  12.       (while (setq sn (ssname ss (setq i (1+ i))))
  13.         (if
  14.           (and (vl-some
  15.                  '(lambda (x)
  16.                     (equal
  17.                       (distance
  18.                         (setq a (cdr (assoc 10 (entget sn))))
  19.                         (setq b (cdr (assoc 11 (entget sn)))))
  20.                       (cadr (setq f x))
  21.                       1e-)
  22.                  l)
  23.                (tblsearch "BLOCK" (car f))
  24.                )
  25.            (entmake (list '(0 . "INSERT")(cons 10 (mapcar (function (lambda (q p) (/ (+ q p) 2.)))
  26.                                                           a
  27.                                                           b
  28.                                                           ))
  29.                           (cons 2 (car f))
  30.                           (cons 50 (angle a b))
  31.                           '(41 . 1.0)
  32.                           '(42 . 1.0)
  33.                           '(43 . 1.0)
  34.                           )
  35.                     ))))  -1)
  36.    )
  37. (princ)
  38. )
回复

使用道具 举报

5

主题

23

帖子

18

银币

初来乍到

Rank: 1

铜币
25
发表于 2022-7-5 20:11:43 | 显示全部楼层
谢谢,很有效!
但我需要修改一下。
过滤垂直线Z的选择,并从选择中拒绝所有其他线。
再次感谢
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-5 20:18:53 | 显示全部楼层
 
太好了,不客气
 
 
对不起,我没有领会你的意思。再进一步解释一下。
回复

使用道具 举报

5

主题

23

帖子

18

银币

初来乍到

Rank: 1

铜币
25
发表于 2022-7-5 20:20:23 | 显示全部楼层
 

                               
登录/注册后可看大图

 
在按距离过滤之前,我只想选择属于平面YZ XZ的垂直线(如图中红色所示)。
这可能吗?
谢谢
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-5 20:26:17 | 显示全部楼层
我们可以迭代选择特定的行标准,如果匹配,让代码移动到其他标准来检查它。
 
你能上传那张样图吗?
回复

使用道具 举报

5

主题

23

帖子

18

银币

初来乍到

Rank: 1

铜币
25
发表于 2022-7-5 20:32:49 | 显示全部楼层
 
给你。
红色竖线,长度为1000和1500。
样品图纸
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-5 20:35:21 | 显示全部楼层
我认为你不能,因为白线的Z坐标也等于红线的起点/终点。
 
您可以通过按层/颜色过滤线条来解决此问题。。。等
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-12 01:30 , Processed in 0.362794 second(s), 75 queries .

© 2020-2025 乐筑天下

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