间距LISP
你好有人知道LISP例程可以在对象之间创建空间吗?数组对于一个重复的对象是合适的,如果对象都不同呢?
我花了很多时间手动分隔对象。。。
谢谢 间距是随机的吗?
我知道一个叫做Scatter的VLX lisp程序:
“在2D或3D中随机移动选定对象-果园、停车场、群组…”
间隔的原因是什么?为了清晰起见,只是将实体从下一个实体中移开?
你好,pBe。
假设他有几十个圆圈和文本,并希望以特定的距离将它们彼此分开!所以数组命令不会
允许他同时选择多个实体。
使用移动命令需要很长时间才能完成。
谢谢
你这么认为塔尔瓦?无论如何,我们要有耐心。我们最好等待OP为我们澄清这一点。
干杯 我想是的,因为他提到的物体给了我灵感,让我说它可能是不同种类的实体。
干杯 不管它是什么,重要的是如何计算包含对象的框的大小,如果你取100个块,做一个10x10的网格,一些块可能会太大并且重叠。
您可以通过多种方式执行此操作:读取文件/Excel,设置框的大小,创建新的布局选项卡放置块或对象,并计算其范围最小值最大值。这会给出框的大小,然后删除所有跳回并添加对象。如果需要多行,请保留x max和y max的记录,但确实可行。对于每个布局选项卡,这绝对可以为extmin extmax得到不同的答案。 快一点。我明天会把它清理干净并发布一些代码。
编辑:
啊,去他妈的,这里(提前警告,这太草率了):
(defun _bboxAndMid (obj / a b l)
(vla-getboundingbox obj 'a 'b)
(list (car (setq l (mapcar 'vlax-safearray->list (list a b))))
(apply '(lambda (a b) (mapcar '(lambda (a b) (/ (+ a b) 2.)) a b)) l)
(cadr l)
)
)
(defun ss->lst (ss / i l)
(if (eq (type ss) 'PICKSET)
(repeat (setq i (sslength ss))
(setq l (cons (vlax-ename->vla-object (ssname ss (setq i (1- i)))) l))
)
)
)
(defun c:Test (/ lst p1 g p2 a d)
(if (and (setq lst (ss->lst (ssget "_:L")))
(setq p1 (getpoint "\nSpecify first point: "))
)
(while (eq 5 (car (setq g (grread T 15 0))))
(redraw)
(grdraw p1 (polar (setq p2 (cadr g)) (angle p1 p2) 10000000.) 1 -1)
(setq p1 (trans p1 1 0)
p2 (trans p2 1 0)
a(angle p1 p2)
d(/ (distance p1 p2) (float (length lst)))
)
(vla-move (car lst) (vlax-3d-point (cadr (_bboxAndMid (car lst)))) (vlax-3d-point p1))
(mapcar
'(lambda (o1 o2 / l)
(vla-move o2
(vlax-3d-point (cadr (_bboxAndMid o2)))
(vlax-3d-point
(polar (cadr (setq l (_bboxAndMid o1)))
a
(+ d (distance (car l) (caddr l)))
)
)
)
)
lst
(cdr lst)
)
)
)
(redraw)
(princ)
) 谢谢大家的快速回复!
谢谢你的评论,不过我确实需要有序的间距。。。
是的,pBe,它基本上是布置结构,以便模糊和注释。。。
看起来alnajt的常规动作应该能奏效,谢谢你,伙计。。。
喜欢这个网站! 干得好,艾伦。
页:
[1]
2