有问,请问怎样将点先对象改框选对象?
各位大侠,在社区里找到xiang19751218的定数等分复制图形代码,我想要更改点先对象改框选对象。请问怎样改?
(defun c:tes( / en xfx pt1 pt2 zljl sl)
(setvar 'cmdecho 0)
(setq en (car(entsel "\n选择对象:")))
(setq xfx (car(apply 'mapcar(cons '- (bwh en)))))
(setq pt1 (getpoint "\n指定第一点:"))
(setq pt2 (getpoint "\n指定第二点:"))
(setq zljl (- (distance pt1 pt2) (abs xfx) ) )
(setq sl (getint "输入间隔数<2>:") )
(if (not sl) (setq sl 2))
(command "-array" en "" "r" 1 sl (/ zljl (float sl)))
(setvar 'cmdecho 1)
(princ)
)
(defun bwh (en / p1 p2)
(vla-getboundingbox (vlax-ename->vla-object en) 'p1 'p2)
(setq p1 (vlax-safearray->list p1)
p2 (vlax-safearray->list p2)
)
(list p1 p2)
)
本帖最后由 start4444 于 2019-3-1 14:25 编辑
把自定义函数改为选集外框函数就行了,我测试你的原代码根本就不是那个效果,阵列间距搞错了
(defun c:tes( / ss xfx pt1 pt2sl)
(setvar 'cmdecho 0)
(setq ss (ssget))
(setq xfx (car(apply 'mapcar(cons '- (bwhss ss)))))
(setq pt1 (getpoint "\n指定第一点:"))
(setq pt2 (getpoint pt1 "\n指定第二点:"))
;(setq zljl (- (distance pt1 pt2) (abs xfx) ) )
(setq sl (getint "输入间隔数<2>:") )
(if (not sl) (setq sl 2))
(command "-array" ss "" "r" 1 sl (/ (distance pt1 pt2) (1- sl)))
(setvar 'cmdecho 1)
(princ)
)
(defun bwhss (ss / p1 p2)
(setq BLK_BOUND (ACET-GEOM-SS-EXTENTS ss t))
(setq P1 (car BLK_BOUND))
(setq P2 (cadr BLK_BOUND))
(list p1 p2))
start4444 发表于 2019-3-1 13:52
把自定义函数改为选集外框函数就行了,我测试你的原代码根本就不是那个效果,阵列间距搞错了
(defun c:t ...
请教,我运行时提示, 错误: no function definition: ACET-GEOM-SS-EXTENTS sunny_8848 发表于 2019-3-1 15:21
请教,我运行时提示, 错误: no function definition: ACET-GEOM-SS-EXTENTS
这个我也是论坛看到了,我能用,应该要装了ET才行吧 start4444 发表于 2019-3-1 13:52
把自定义函数改为选集外框函数就行了,我测试你的原代码根本就不是那个效果,阵列间距搞错了
(defun c:t ...
十分感谢!你随手一码,解决了我的一个工作难题! 论坛有个递增刷,可快速实现你的目的,使用性更强 alexmai 发表于 2019-3-3 12:27
论坛有个递增刷,可快速实现你的目的,使用性更强
只看到有文字的增递刷,看到有图形的增递刷!再说我是想要在两次之间确定数量或等分! start4444 发表于 2019-3-1 15:35
这个我也是论坛看到了,我能用,应该要装了ET才行吧
谢谢,确实可以 sdls 发表于 2019-3-3 19:12
只看到有文字的增递刷,看到有图形的增递刷!再说我是想要在两次之间确定数量或等分!
把你想要的东西建个块,等分用DIVIDE,距离偏移用MEASURE,按提示选 block ,写入block文件名,就行了 alexmai 发表于 2019-3-6 11:25
把你想要的东西建个块,等分用DIVIDE,距离偏移用MEASURE,按提示选 block ,写入block文件名,就行了
谢谢,这也是个办法!!
页:
[1]