乐筑天下

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

[编程交流] 使用存储特定点

[复制链接]

37

主题

264

帖子

236

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
185
发表于 2022-7-5 17:51:55 | 显示全部楼层 |阅读模式
大家好,
 
 
我正在编写一个例程,将图纸空间中所有绘制的对象从drawingframe右下方移动到点0,0。我必须存储这一点,以便接下来可以使用move命令使用它。
 
 
感谢您的输入,以获得一些像样的编码。。
 
 
检查
http://www.lee-mac.com/ssboundingbox.html
 
 
  1. ;; Selection Set Bounding Box  -  Lee Mac
  2. ;; Returns a list of the lower-left and upper-right WCS coordinates of a
  3. ;; rectangular frame bounding all objects in a supplied selection set.
  4. ;; s - [sel] Selection set for which to return bounding box
  5. (defun LM:ssboundingbox ( s / a b i m n o )
  6.    (repeat (setq i (sslength s))
  7.        (if
  8.            (and
  9.                (setq o (vlax-ename->vla-object (ssname s (setq i (1- i)))))
  10.                (vlax-method-applicable-p o 'getboundingbox)
  11.                (not (vl-catch-all-error-p (vl-catch-all-apply 'vla-getboundingbox (list o 'a 'b))))
  12.            )
  13.            (setq m (cons (vlax-safearray->list a) m)
  14.                  n (cons (vlax-safearray->list b) n)
  15.            )
  16.        )
  17.    )
  18.    (if (and m n)
  19.        (mapcar '(lambda ( a b ) (apply 'mapcar (cons a b))) '(min max) (list m n))
  20.    )
  21. )
  22. (defun c:test ( / b s )
  23.    (if
  24.        (and
  25.            (setq s (ssget))
  26.            (setq b (LM:ssboundingbox s))
  27.        )
  28.        (entmake
  29.            (append
  30.               '(
  31.                    (000 . "LWPOLYLINE")
  32.                    (100 . "AcDbEntity")
  33.                    (100 . "AcDbPolyline")
  34.          ; MAKE THE POLYLINE ON DEFPOINTS
  35.                    (090 . 4)
  36.                    (070 . 1)
  37.                )
  38.                (mapcar '(lambda ( x ) (cons 10 (mapcar '(lambda ( y ) ((eval y) b)) x)))
  39.                   '(
  40.                        (caar   cadar)
  41.                        (caadr  cadar)   ; THIS IS UNDER RIGHT, HOW TO STORE THIS POINT AS PAPER_ORIGIN?
  42.                        (caadr cadadr)
  43.                        (caar  cadadr)
  44.                    )
  45.                )
  46.            )
  47.        )
  48.      )
  49.      (COMMAND "MOVE" "ALL" ""
  50.                
  51.                        (caadr  cadar)   ; THIS IS UNDER RIGHT, STORED POINT FOR PAPER_ORIGIN
  52.                                  
  53.                         
  54.        "0,0" "")
  55.    (princ)
  56. )
  57. (vl-load-com)
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 18:06:42 | 显示全部楼层
你好,哈勒姆,
 
首先,感谢您保留了我的代码头并提供了原始代码的链接,我非常感谢您的小小礼遇。
 
对于您的任务,请尝试以下代码:
  1. ;; Selection Set Bounding Box  -  Lee Mac
  2. ;; Returns a list of the lower-left and upper-right WCS coordinates of a
  3. ;; rectangular frame bounding all objects in a supplied selection set.
  4. ;; s - [sel] Selection set for which to return bounding box
  5. (defun LM:ssboundingbox ( s / a b i m n o )
  6.    (repeat (setq i (sslength s))
  7.        (if
  8.            (and
  9.                (setq o (vlax-ename->vla-object (ssname s (setq i (1- i)))))
  10.                (vlax-method-applicable-p o 'getboundingbox)
  11.                (not (vl-catch-all-error-p (vl-catch-all-apply 'vla-getboundingbox (list o 'a 'b))))
  12.            )
  13.            (setq m (cons (vlax-safearray->list a) m)
  14.                  n (cons (vlax-safearray->list b) n)
  15.            )
  16.        )
  17.    )
  18.    (if (and m n)
  19.        (mapcar '(lambda ( a b ) (apply 'mapcar (cons a b))) '(min max) (list m n))
  20.    )
  21. )
  22. (defun c:test ( / b s )
  23.    (if
  24.        (and
  25.            (setq s (ssget))
  26.            (setq b (LM:ssboundingbox s))
  27.        )
  28.        (command "_.move" s "" "_non" (list (caadr b) (cadar b)) "_non" '(0.0 0.0))
  29.    )
  30.    (princ)
  31. )
  32. (vl-load-com)
回复

使用道具 举报

37

主题

264

帖子

236

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
185
发表于 2022-7-5 18:07:48 | 显示全部楼层
很棒的代码!谢谢你的时间和努力。
 
 
以下挑战。。。
我想将代码与脚本结合使用,一次性组织一组dwg(使用其他工具;-)
因此,我想去掉select提示符,但如果您使用类似
 
 
  1. (ssget "X" )(67 . 1) ; only the paperspace stuff..

但奇怪的事情发生在运动中。它不再是0,0了
也许模型空间中绘制的内容仍然会混淆。(?)那么,我们真的希望有办法做到这一点吗?
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 18:20:44 | 显示全部楼层
尝试以下操作:
  1. (defun c:test ( / box ctb sel )
  2.    (setq ctb (getvar 'ctab))
  3.    (foreach tab (layoutlist)
  4.        (setvar 'ctab tab)
  5.        (if (and (setq sel (ssget "_X" (list '(-4 . "<NOT") '(-4 . "<AND") '(0 . "VIEWPORT") '(69 . 1) '(-4 . "AND>") '(-4 . "NOT>") (cons 410 tab))))
  6.                 (setq box (LM:ssboundingbox sel))
  7.            )
  8.            (command "_.move" sel "" "_non" (list (caadr box) (cadar box)) "_non" '(0.0 0.0))
  9.        )
  10.    )
  11.    (setvar 'ctab ctb)
  12.    (princ)
  13. )
回复

使用道具 举报

37

主题

264

帖子

236

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
185
发表于 2022-7-5 18:27:47 | 显示全部楼层
对不起,李,我只是好像没法用。
 
 
命令:测试
; 错误:错误的参数类型:lselsetp nil
错误的参数类型:consp“AND>”
 
 
也许我没有输入正确的文字,我也想移动视口。纸面上的一切。。
试图使用此代码。。
 
 
  1. (ssget "_X" (list '(69 . 1) (cons 410 tab)))
似乎被移动命令卡住了,不知道为什么。
“非”真正迫使它做什么?
 
 
没有结果,事情不会改变。。。
 
 
  1. 6
回复

使用道具 举报

37

主题

264

帖子

236

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
185
发表于 2022-7-5 18:36:26 | 显示全部楼层
李,我在第二篇文章中用模式尝试了你的代码。我喜欢那个。。。
 
然而结合Wscript(v1.2)让我想到了如何用于paperspace的问题。。。
如何在paperspace中仅选择和所有对象?。。这很难。。至少对我来说。。
 
 
下图:将m2or_sel读作“移动到原点_u选择项目”。。
 
 
你好,汉斯
185158byj0s2qyij3j0u1j.png
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 18:38:12 | 显示全部楼层
 
很抱歉,汉斯,我在上面的代码中漏掉了几个撇号(这将教会我直接在论坛邮箱中键入代码!)我现在已经更新了上述代码。
 
 
请注意,我的代码并没有排除所有视口,只是排除了不应移动的图纸空间视口本身(显示图纸空间布局的视口)。
 
 
当通过AutoLISP向命令提供点输入时,要求“非”忽略任何活动的对象捕捉模式。
回复

使用道具 举报

37

主题

264

帖子

236

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
185
发表于 2022-7-5 18:44:47 | 显示全部楼层
.. 竖起大拇指。。!!
我把这个小视频放在一起演示。
与编剧相结合的例程将使我更容易找到和替换标题栏。
 
 
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 18:56:14 | 显示全部楼层
很好的演示,汉斯-我很高兴看到它运行良好
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-13 00:51 , Processed in 0.679203 second(s), 72 queries .

© 2020-2025 乐筑天下

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