乐筑天下

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

[编程交流] Lisp确定

[复制链接]

34

主题

123

帖子

90

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
175
发表于 2022-7-6 06:45:53 | 显示全部楼层 |阅读模式
我需要列出图纸中参考块前面的块(前列表)和后面的第二个块列表(后列表)。前面的列表需要相对于参考块从左到右(顺时针)排序,而后面的列表必须从右到左(逆时针)排序。
 
参考块是一个矩形,箭头指向正面。当箭头(面)指向下方时,其旋转角度(dxf 50)为零。
 
我曾想过比较参考块和其他块(插入点-dxf 10)的旋转角度(dxf 50)以获得前列表和后列表,但我缺少一些基本的数学/几何和lisp命令。
 
感谢所有需要调查的帮助、想法和想法。
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-6 07:04:37 | 显示全部楼层
张贴一张不确定“在前面”的图片
回复

使用道具 举报

34

主题

123

帖子

90

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
175
发表于 2022-7-6 07:13:05 | 显示全部楼层
这就是我的工作方式。
见附件。
 
  1. (defun C: test(/)
  2. (setq blklst (ssget "X" (list '(0 . "INSERT"))))
  3. (setq numblk (sslength blklst)
  4.      blk_cnt        0)
  5. (while (< blk_cnt numblk)
  6.   
  7.    (setq en (ssname blklst blk_cnt))
  8.    (setq enlist (entget en))               
  9.    
  10. (cond ((and (= (cdr (assoc 0 enlist)) "INSERT")(= (cdr (assoc 2 enlist)) "ITEMS"))
  11.        "(get ITEMS angle [item_angle])
  12.        (compare with REF_BLK angle [ref_blk_angle])
  13.       
  14.        [( if   ref_blk_angle + 270° > Item_angle > ref_blk_angle + 90°) then add to back_list]
  15.        [( if   ref_blk_angle + 90° > Item_angle > ref_blk_angle - 90°) then add to front_list]        "
  16.       
  17.       ))
  18. (setq blk_cnt (+ 1 blk_cnt))
  19. ))

测试。图纸
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 07:24:47 | 显示全部楼层
这可能是一个起点:
 
  1. [b][color=BLACK]([/color][/b]defun c:fblst [b][color=FUCHSIA]([/color][/b]/ ss rn rd rp sa ea ia i en ed ip an[b][color=FUCHSIA])[/color][/b]
  2. [b][color=FUCHSIA]([/color][/b]while [b][color=NAVY]([/color][/b]not rn[b][color=NAVY])[/color][/b]
  3.         [b][color=NAVY]([/color][/b]princ [color=#2f4f4f]"\nSelect Reference INSERT ..."[/color][b][color=NAVY])[/color][/b]
  4.         [b][color=NAVY]([/color][/b]setq ss [b][color=MAROON]([/color][/b]ssget '[b][color=GREEN]([/color][/b][b][color=BLUE]([/color][/b]0 . [color=#2f4f4f]"INSERT"[/color][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
  5.         [b][color=NAVY]([/color][/b]if [b][color=MAROON]([/color][/b]= [b][color=GREEN]([/color][/b]sslength ss[b][color=GREEN])[/color][/b] 1[b][color=MAROON])[/color][/b]
  6.             [b][color=MAROON]([/color][/b]setq rn [b][color=GREEN]([/color][/b]ssname ss 0[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
  7. [b][color=FUCHSIA]([/color][/b]setq rd [b][color=NAVY]([/color][/b]entget rn[b][color=NAVY])[/color][/b]
  8.        rp [b][color=NAVY]([/color][/b]cdr [b][color=MAROON]([/color][/b]assoc 10 rd[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
  9.        sa [b][color=NAVY]([/color][/b]cdr [b][color=MAROON]([/color][/b]assoc 50 rd[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
  10.        ea [b][color=NAVY]([/color][/b]+ sa pi[b][color=NAVY])[/color][/b]
  11.        ia [b][color=NAVY]([/color][/b]if [b][color=MAROON]([/color][/b]> sa ea[b][color=MAROON])[/color][/b]
  12.               [b][color=MAROON]([/color][/b]+ [b][color=GREEN]([/color][/b]- [b][color=BLUE]([/color][/b]* 2 pi[b][color=BLUE])[/color][/b] sa[b][color=GREEN])[/color][/b] ea[b][color=MAROON])[/color][/b]
  13.               [b][color=MAROON]([/color][/b]- ea sa[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
  14. [b][color=FUCHSIA]([/color][/b]setq rl [b][color=NAVY]([/color][/b]ssadd[b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
  15. [b][color=FUCHSIA]([/color][/b]setq fl [b][color=NAVY]([/color][/b]ssadd[b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
  16. [b][color=FUCHSIA]([/color][/b]and [b][color=NAVY]([/color][/b]setq ss [b][color=MAROON]([/color][/b]ssget [color=#2f4f4f]"X"[/color] '[b][color=GREEN]([/color][/b][b][color=BLUE]([/color][/b]0 . [color=#2f4f4f]"INSERT"[/color][b][color=BLUE])[/color][/b][b][color=BLUE]([/color][/b]2 . [color=#2f4f4f]"ITEMS"[/color][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
  17.       [b][color=NAVY]([/color][/b]setq i 0[b][color=NAVY])[/color][/b]
  18.       [b][color=NAVY]([/color][/b]while [b][color=MAROON]([/color][/b]setq en [b][color=GREEN]([/color][/b]ssname ss i[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
  19.              [b][color=MAROON]([/color][/b]setq i [b][color=GREEN]([/color][/b]1+ i[b][color=GREEN])[/color][/b]
  20.                   ed [b][color=GREEN]([/color][/b]entget en[b][color=GREEN])[/color][/b]
  21.                   ip [b][color=GREEN]([/color][/b]cdr [b][color=BLUE]([/color][/b]assoc 10 ed[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b]
  22.                   an [b][color=GREEN]([/color][/b]angle rp ip[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
  23.              [b][color=MAROON]([/color][/b]if [b][color=GREEN]([/color][/b]> sa an[b][color=GREEN])[/color][/b]
  24.                  [b][color=GREEN]([/color][/b]setq an [b][color=BLUE]([/color][/b]+ an pi pi[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
  25.              [b][color=MAROON]([/color][/b]if [b][color=GREEN]([/color][/b]< sa an [b][color=BLUE]([/color][/b]+ sa ia[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b]
  26.                  [b][color=GREEN]([/color][/b]ssadd en rl[b][color=GREEN])[/color][/b]
  27.                  [b][color=GREEN]([/color][/b]ssadd en fl[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
  28. [b][color=FUCHSIA]([/color][/b]prin1[b][color=FUCHSIA])[/color][/b][b][color=BLACK])[/color][/b]

 
 
选取集rl包含“后”的实体,fl包含“前”的实体
 
-大卫
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 07:31:14 | 显示全部楼层
另一个与David的方法非常相似的快速示例:
  1. (defun c:orderblocks ( / 2pi ang blk bot ent inc ins rot sel top )
  2.    (if
  3.        (and
  4.            (princ "\nSelect Reference Block: ")
  5.            (setq blk (ssget "_+.:E:S" '((0 . "INSERT"))))
  6.            (setq sel (ssget "_X"      '((0 . "INSERT") (2 . "ITEMS"))))
  7.        )
  8.        (progn
  9.            (setq blk (entget (ssname blk 0))
  10.                  ins (cdr (assoc 10 blk))
  11.                  rot (cdr (assoc 50 blk))
  12.                  2pi (+ pi pi)
  13.            )
  14.            (repeat (setq inc (sslength sel))
  15.                (setq ent (ssname sel (setq inc (1- inc)))
  16.                      ang (rem (+ 2pi (- (angle ins (cdr (assoc 10 (entget ent)))) rot)) 2pi)
  17.                )
  18.                (if (< 0 ang pi)
  19.                    (setq bot (cons (cons ang ent) bot))
  20.                    (setq top (cons (cons ang ent) top))
  21.                )
  22.            )
  23.            (setq bot (vl-sort bot '(lambda ( a b ) (< (car a) (car b))))
  24.                  top (vl-sort top '(lambda ( a b ) (> (car a) (car b))))
  25.            )
  26.            [color=green](getstring "\n-- 'Top' blocks --\n<Next>")
  27.            (while top
  28.                (redraw (cdar top) 3)
  29.                (getstring "\n<Next>")
  30.                (redraw (cdar top) 4)
  31.                (setq top (cdr top))
  32.            )
  33.            (getstring "\n-- 'Bottom' blocks --\n<Next>")
  34.            (while bot
  35.                (redraw (cdar bot) 3)
  36.                (getstring "\n<Next>")
  37.                (redraw (cdar bot) 4)
  38.                (setq bot (cdr bot))
  39.            )[/color]
  40.        )
  41.    )
  42.    (princ)
  43. )

 
突出显示的部分纯粹是为了显示结果。
回复

使用道具 举报

34

主题

123

帖子

90

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
175
发表于 2022-7-6 07:44:52 | 显示全部楼层
谢谢大卫,谢谢李。这正是我需要的。你们真的很好。
 
李,你的代码也会排序,图形效果很有帮助。再次感谢。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 07:55:05 | 显示全部楼层
非常欢迎sadhu
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-10 14:47 , Processed in 0.500661 second(s), 66 queries .

© 2020-2025 乐筑天下

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