乐筑天下

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

[编程交流] 偏移多个块

[复制链接]

1

主题

3

帖子

2

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 23:45:41 | 显示全部楼层 |阅读模式
好的,让我先解释一下我的情况。我目前正在处理2000多个模块,根据终端消费者的需要,将它们以不同的组合进行组装。组装后,我需要在最终产品周围添加一个6英尺的边框。目前,我一直在这样做,就是在我拥有的任何块的粗糙顶点周围使用“圆”命令,然后从一个切线到另一个切线绘制一条线,然后修剪掉多余的圆。完成后,我把它展平到z=0,这样我就有了一个6英尺的边界。效果很好,但这是一个缓慢而乏味的过程。
 
现在我的问题是,有没有一种方法(lisp或其他方法)来获取所有选定的块并执行相同的操作,或者甚至只是生成圆,因为这会缩短一些时间?
 
我会说我几乎没有lisp的知识,所以如果这是解决方案,在启动和运行中有任何帮助都将不胜感激。
 
万分感谢!
回复

使用道具 举报

0

主题

99

帖子

99

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-6 00:03:56 | 显示全部楼层
  1. (defun C:test (/ ss p pr d o)
  2. (if
  3. (setq ss (ssget)
  4.        p  (LM:ssboundingbox ss)
  5.        o  72) ;;change offset value  
  6. (entmake
  7.    (list
  8.      '(0 . "LWPOLYLINE")
  9.      '(100 . "AcDbEntity")
  10.      '(67 . 0)
  11.      (cons 410 (getvar 'ctab))
  12.      '(100 . "AcDbPolyline")
  13.      '(90 . 4)
  14.      '(70 . 1)
  15.      (cons 10 (setq pr (polar (polar (car p) pi o) (* pi 1.5) o)))
  16.      (cons 10 (setq pr (polar pr 0 (setq d (+ (- (caadr p) (caar p)) (* o 2))))))
  17.      (cons 10 (setq pr (polar pr (/ pi 2.) (+ (- (cadadr p) (cadar p)) (* 2 o)))))
  18.      (cons 10 (polar pr pi d ))
  19.      '(210 0.0 0.0 1.0)
  20.    )
  21. )
  22. )
  23. (princ)
  24. )
  25. (defun LM:ssboundingbox ( s / a b i m n o )
  26. ;; Selection Set Bounding Box  -  Lee Mac
  27.    (repeat (setq i (sslength s))
  28.        (if
  29.            (and
  30.                (setq o (vlax-ename->vla-object (ssname s (setq i (1- i)))))
  31.                (vlax-method-applicable-p o 'getboundingbox)
  32.                (not (vl-catch-all-error-p (vl-catch-all-apply 'vla-getboundingbox (list o 'a 'b))))
  33.            )
  34.            (setq m (cons (vlax-safearray->list a) m)
  35.                  n (cons (vlax-safearray->list b) n)
  36.            )
  37.        )
  38.    )
  39.    (if (and m n)
  40.        (mapcar '(lambda ( a b ) (apply 'mapcar (cons a b))) '(min max) (list m n))
  41.    )
  42. )
回复

使用道具 举报

1

主题

3

帖子

2

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 00:15:26 | 显示全部楼层
好的,很抱歉耽搁了,不过我刚刚有机会尝试一下。它画了一个盒子,有点像我想要的,但有很多额外的空间,因为它只是在一个正方形中做了最大值,而不是围绕每个组件做一个圆,然后相切。你知道这是否容易做到吗?
回复

使用道具 举报

1

主题

3

帖子

2

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 00:23:23 | 显示全部楼层
以下是一个问题示例:

                               
登录/注册后可看大图

 
 
黑色边框是绘制的lisp函数。
红色虚线是我从每个主要点手动创建的6’,然后与切线相切,然后修剪多余部分。
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-6 00:42:12 | 显示全部楼层
您需要一个边界生成器,它可以查看所有对象并计算出外部形状,例如围绕其绘制的一条柱线,一条柱线将从一个角开始,然后相切,直到它与下一个对象再次相切或相切。手动地,它就像是拾取对象、拾取下一个、拾取下一个,并使用一些规则来连接端点或切线。尝试使用“边界”搜索
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-6 00:47:12 | 显示全部楼层
试着在你的形状周围画一条线,比如说一个正方形,然后边界选择所有对象,内部拾取点位于对象和新正方形之间的间隙,它应该在你的对象周围画两条线,其中一条线,然后偏移该线。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-10 21:16 , Processed in 0.406869 second(s), 67 queries .

© 2020-2025 乐筑天下

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