连接2个命令
好的,这看起来很简单。我该如何连接这两个命令,这样无论直线是直线还是pline。谢谢(defun c:heal2(/ block ll ur p1 p2)
(vl-load-com)
(setq block (car (entsel "\nSelect Block:")))
(vla-getboundingbox (vlax-ename->vla-object block) 'll 'ur)
(command "_.erase" block "")
(command
"_.pedit"
"_m"
(ssget "C"
(setq p1 (vlax-safearray->list ll))
(setq p2 (vlax-safearray->list ur)))
""
"_join" "_Joint" "_Both"
(distance p1 p2)
"")
(princ)
)
(defun c:HEAL (/ block ll ur objecttojoin)
(vl-load-com)
(setq block (car (entsel "\nSelect Block:")))
(vla-getboundingbox (vlax-ename->vla-object block) 'll 'ur)
(command "_.erase" block "")
(setq objecttojoin
(ssget "C"
(vlax-safearray->list ll)
(vlax-safearray->list ur)))
(command
"_.join"
(ssname objecttojoin 0)
(ssname objecttojoin 1)
"")
)
如果您不介意将线转换为PLINE,那么如果将PEDITACEPT设置为1,则可以同时使用heal2
(defun c:heal2(/ block pea ll ur p1 p2)
(vl-load-com)
(setq pea (getvar 'Peditaccept))
(setvar 'PeditAccept 1)
(setq block (car (entsel "\nSelect Block:")))
(vla-getboundingbox (vlax-ename->vla-object block) 'll 'ur)
(command "_.erase" block "")
(command
"_.pedit"
"_m"
(ssget "C"
(setq p1 (vlax-safearray->list ll))
(setq p2 (vlax-safearray->list ur)))
""
"_join" "_Joint" "_Both"
(distance p1 p2)
"")
(setvar 'PeditAccept pea)
(princ)
) 首先感谢pBe的关注。
如果我有选择的话,我想把普林斯转换成直线连接。但我不应该添加一个:
(cond
((= $ent2 line)(c:heal))
((= $ent2 lwpolyline)(c:heal2))
)
$ent2将是选中的挂起的直线或lwpolyline。
它要么你分解选择,把它变成线,然后加入或使用heal2然后分解。
(defun c:heald(/ pea block ll ur objs p1 p2)
(vl-load-com)
(setq pea (getvar 'Peditaccept))
(setvar 'PeditAccept 1)
(setq block (car (entsel "\nSelect Block:")))
(vla-getboundingbox (vlax-ename->vla-object block) 'll 'ur)
(command "_.erase" block "")
(setq objs (ssget "C"
(setq p1 (vlax-safearray->list ll))
(setq p2 (vlax-safearray->list ur))))
(if (eq (cdr (assoc 0 (entget (ssname objs 0)))) "LWPOLYLINE")
(command "_.pedit" "_m" objs "" "_join" "_Joint" "_Both"
(distance p1 p2) "")
(command "_.join" (ssname objs 0) (ssname objs 1) "")
)
(setvar 'PeditAccept pea)
(princ)
) 谢谢pBe。这很有效。我知道你是怎么做到的,但我知道我只需要弄清楚你是怎么想到的。我要看看我是否能想出如何过滤出只选择块。如果我这样做,我会重新发布。再次感谢你的帮助。
对你很好,希望你能从中学习。毕竟这是你的代码。
如果你的意思是一次多选。是的,可以做到。你肯定会自己解决的。随时向我们通报
干杯 好的,我得到了,所以我只能选择一个街区。但如果我选择多个区块,它只对一个区块有效,而忽略其他区块。我该如何使其对选择集中的每个项目运行?谢谢
(defun c:ee (/ pea $blk block ll ur objs p1 p2)
(vl-load-com)
(setq pea (getvar 'Peditaccept))
(setvar 'PeditAccept 1)
(setq $blk (ssget '((0 . "insert"))))
(setq block (ssname $blk 0))
(vla-getboundingbox (vlax-ename->vla-object block) 'll 'ur)
(command "_.erase" block "")
(setq objs (ssget "C"
(setq p1 (vlax-safearray->list ll))
(setq p2 (vlax-safearray->list ur))
)
)
(if (eq (cdr (assoc 0 (entget (ssname objs 0)))) "LWPOLYLINE")
(command "_.pedit"
"_m"
objs
""
"_join"
"_Joint"
"_Both"
(distance p1 p2)
""
)
(command "_.join" (ssname objs 0) (ssname objs 1) "")
)
(setvar 'PeditAccept pea)
(princ)
)
让我们试试
(defun c:hint ()
(if (setq ss (ssget '((0 . "INSERT"))))
(repeat (setq i (sslength ss))
(setq pt(cdr
(assoc10
(entget
(setq e (ssname ss (setq i (1- i))))
))))
(command "_rotate" e "" "_non" pt "180")
)
)(princ)
)
Scroll down when you're ready
|||
|||
|||
\ /
\/
(defun c:ee (/ pea $blk block i ll ur objs p1 p2)
(vl-load-com)
(setq pea (getvar 'Peditaccept))
(setvar 'PeditAccept 1)
(if (setq $blk (ssget '((0 . "insert"))))
(repeat (setq i (sslength $blk))
(setq e (ssname$blk (setq i (1- i))))
(vla-getboundingbox (vlax-ename->vla-object e) 'll 'ur)
(entdel e)
(setq objs (ssget "C"
(setq p1 (vlax-safearray->list ll))
(setq p2 (vlax-safearray->list ur))
)
)
(if (eq (cdr (assoc 0 (entget (ssname objs 0)))) "LWPOLYLINE")
(command "_.pedit""_m"objs
"""_join" "_Joint"
"_Both" (distance p1 p2)
"" )
(command "_.join" (ssname objs 0) (ssname objs 1) "")
)
)
(princ "\nNo Blocks Selected")
)
(setvar 'PeditAccept pea)
(princ)
)
看看你能不能把它作为参考。
这毕竟是CAD导师 嘿,pbe,我想我不太明白为什么我们需要我们sslength并得到块的插入点。但它确实有效。非常感谢您抽出时间。
(defun c:ee (/ pea $blk block ll ur objs p1 p2)
(vl-load-com)
(setq pea (getvar 'Peditaccept))
(setvar 'PeditAccept 1)
(if (setq $blk (ssget '((0 . "insert"))))
(repeat (setq i (sslength $blk))
(setq pt (cdr
(assoc 10
(entget
(setq block (ssname $blk (setq i (1- i))))
))))
(vla-getboundingbox (vlax-ename->vla-object block) 'll 'ur)
(command "_.erase" block "")
(setq objs (ssget "C"
(setq p1 (vlax-safearray->list ll))
(setq p2 (vlax-safearray->list ur))
)
)
(if (eq (cdr (assoc 0 (entget (ssname objs 0)))) "LWPOLYLINE")
(command "_.pedit"
"_m"
objs
""
"_join"
"_Joint"
"_Both"
(distance p1 p2)
""
)
(command "_.join" (ssname objs 0) (ssname objs 1) "")
)
);repeat
);if
(setvar 'PeditAccept pea)
(princ)
)
页:
[1]