乐筑天下

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

[编程交流] LISP用于将图形移动到0,

[复制链接]

22

主题

78

帖子

59

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
114
发表于 2022-7-5 16:07:29 | 显示全部楼层 |阅读模式
如果有办法消除用户干预,那将是理想的。作为需要移动的中心点的对象始终是同一层“塔”上唯一的三角形或圆。
有没有办法让它自动抓取特定层上的圆心和/或三角形的几何中心,然后从所有层中选择所有对象,然后将该中心点作为基点移动到0,0,所有这些都在命令的关键点处?
 
 
你们帮了我很多忙。提前感谢您的建议!
回复

使用道具 举报

12

主题

395

帖子

384

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
60
发表于 2022-7-5 16:15:18 | 显示全部楼层
如果这是该层上唯一的对象,那么它应该非常简单。你能用LISP写吗?或者你在找人写吗?
 
首先,我将使用李-麦克的多边形质心来获得塔的中心。然后只需使用ssget选择所有项目和vla移动。
 
应该很简单。
回复

使用道具 举报

58

主题

3353

帖子

33

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1761
发表于 2022-7-5 16:18:25 | 显示全部楼层
  1. (defun c:moveto0 (/ p s s2)
  2. (if (and (setq s (ssget "_X"
  3.                   '((-4 . "<OR")
  4.                     (0 . "circle")
  5.                     (-4 . "<AND")
  6.                     (0 . "lwpolyline")
  7.                     (90 . 3)
  8.                     (-4 . "AND>")
  9.                     (-4 . "OR>")
  10.                     (8 . "tower")
  11.                    )
  12.            )
  13.    )
  14.    (setq s2 (ssget "_X" (list (cons 410 (getvar 'ctab)))))
  15.      )
  16.    (progn
  17.      (foreach e (vl-remove-if 'listp (mapcar 'cadr (ssnamex s)))
  18. (if (= "LWPOLYLINE" (cdr (assoc 0 (entget e))))
  19.   (progn (setq p (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= 10 (car x))) (entget e))))
  20.          (setq p
  21.                 (append (mapcar '(lambda (x) (/ x (length p))) (apply 'mapcar (cons '+ p))) '(0.0))
  22.          )
  23.   )
  24.   (setq p (cdr (assoc 10 (entget e))))
  25. )
  26. ;; Does not check if the object is on a locked layer...
  27. (vlax-invoke (vlax-ename->vla-object e) 'move p '(0. 0. 0.))
  28. (ssdel e s2)
  29.      )
  30.      (foreach e (vl-remove-if 'listp (mapcar 'cadr (ssnamex s2)))
  31. ;; Does not check if the object is on a locked layer...
  32. (vlax-invoke (vlax-ename->vla-object e) 'move p '(0. 0. 0.))
  33.      )
  34.    )
  35. )
  36. (princ)
  37. )
  38. (vl-load-com)
回复

使用道具 举报

22

主题

78

帖子

59

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
114
发表于 2022-7-5 16:23:26 | 显示全部楼层
这对于移动塔来说效果很好!!在移动之前,是否需要在图形上进行全选?现在,这只移动了那个物体,这很可爱,但我肯定需要整个图形一起移动。
 
非常感谢!!!
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 16:27:43 | 显示全部楼层
罗恩对我来说太快了,但我还是会发我的:
  1. (defun c:twrm ( / ent len lst sel )
  2.    (if (setq sel
  3.            (ssget "_X"
  4.               '(
  5.                    (008 . "TOWER")
  6.                    (410 . "Model")
  7.                    (-04 . "<OR")
  8.                        (000 . "CIRCLE")
  9.                        (-04 . "<AND")
  10.                            (000 . "LWPOLYLINE")
  11.                            (090 . 3)
  12.                            (-04 . "&=")
  13.                            (070 . 1)
  14.                        (-04 . "AND>")
  15.                    (-04 . "OR>")
  16.                )
  17.            )
  18.        )
  19.        (progn
  20.            (setq ent (ssname sel 0)
  21.                  lst (mapcar 'cdr (vl-remove-if-not '(lambda ( x ) (= 10 (car x))) (entget ent)))
  22.                  len (length lst)
  23.            )
  24.            (command "_.move"
  25.                (ssget "_X" '((410 . "Model"))) ""
  26.                "_non"  (trans (mapcar '/ (apply 'mapcar (cons '+ lst)) (list len len)) ent 1)
  27.                "_non" '(0.0 0.0)
  28.            )
  29.        )  
  30.        (princ "\nTower object not found.")
  31.    )
  32.    (princ)
  33. )
回复

使用道具 举报

58

主题

3353

帖子

33

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1761
发表于 2022-7-5 16:35:20 | 显示全部楼层
代码已更新。
回复

使用道具 举报

22

主题

78

帖子

59

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
114
发表于 2022-7-5 16:42:16 | 显示全部楼层
这非常有效。非常感谢你们俩!!!
回复

使用道具 举报

22

主题

78

帖子

59

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
114
发表于 2022-7-5 16:45:13 | 显示全部楼层
  1. (defun c:twrm ( / ent len lst sel )
  2.    (if (setq sel
  3.            (ssget "_X"
  4.               '(
  5.                    (008 . "TOWER")
  6.                    (410 . "Model")
  7.                    (-04 . "<OR")
  8.                        (000 . "CIRCLE")
  9.                        (-04 . "<AND")
  10.                            (000 . "LWPOLYLINE")
  11.                            (090 . 3)
  12.                            (-04 . "&=")
  13.                            (070 . 1)
  14.                        (-04 . "AND>")
  15.                    (-04 . "OR>")
  16.                )
  17.            )
  18.        )
  19.        (progn
  20.            (setq ent (ssname sel 0)
  21.                  lst (mapcar 'cdr (vl-remove-if-not '(lambda ( x ) (= 10 (car x))) (entget ent)))
  22.                  len (length lst)
  23.            )
  24.            (command "_.move"
  25.                (ssget "_X" '((410 . "Model"))) ""
  26.                "_non"  (trans (mapcar '/ (apply 'mapcar (cons '+ lst)) (list len len)) ent 1)
  27.                "_non" '(0.0 0.0)
  28.            )
  29.        )  
  30.        (princ "\nTower object not found.")
  31.    )
  32.    (princ)
  33. )

 
添加罕见但偶尔出现的方形塔楼只是添加另一条线吗?我猜突出显示的线会寻找带有3个点的线?它会像重复这个并使其成为4一样简单吗?
回复

使用道具 举报

58

主题

3353

帖子

33

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1761
发表于 2022-7-5 16:48:43 | 显示全部楼层
如果分层是实心的,则可能需要进行顶点数检查。
 
您也可以这样做来检查顶点少于5个的LWD多段线:
[code](ssget“_X”'((008“*”)(410。“型号”)(-04。“
回复

使用道具 举报

22

主题

78

帖子

59

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
114
发表于 2022-7-5 16:54:01 | 显示全部楼层
打得好!我甚至没想过。这适用于我测试过的各种场景。谢谢大家!!
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-13 20:21 , Processed in 0.667881 second(s), 83 queries .

© 2020-2025 乐筑天下

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