(defun c:ncopy2 (/ *error* whilestop ent oldecho)
(defun *error* (msg)
(if oldecho
(setvar 'cmdecho oldecho)
)
(if (not
(member msg '("Function cancelled" "quit / exit abort"))
)
(princ (strcat "\nError: " msg))
)
(princ)
)
(setq oldecho (getvar 'cmdecho))
(setvar 'cmdecho 0)
(setq whilestop t)
(while whilestop
(setvar 'errno 0)
(setq ent (entsel "\nSelect nested objects to copy: "))
(cond
((= 52 (getvar 'errno))
(setq whilestop nil)
)
((null ent)
(princ "\nYou missed. Try again.")
)
((not (wcmatch (setq typ (cdr (assoc 0 (entget (car ent)))))
"INSERT"
)
)
(princ "\nNot a valid object, try again.")
)
;| ((/= (vla-get-IsXref (vlax-ename->vla-object (car ent))))
(princ "\nNot a valid object, try again.")
)|;
(t
(command "_.ncopy" ent "" "_non" '(0 0) "_non" '(0 0))
(princ)
)
)
)
(setvar 'cmdecho oldecho)
(princ)
) 是的,NCOPY使用嵌套选择,类似于使用nentsel/nentselp获得的选择。 我最近研究了一些代码,这些代码的工作方式类似于NCOPY,但会获取与使用objectDBX和外部参照的临时副本选择的嵌套对象相同层上的所有对象。我花了很多时间编写代码和测试。我成功地做到了这一点,尽管在继续测试、尝试覆盖所有可能的场景时,我得出了这样的结论:对于那些不了解代码在做什么的人来说,代码是危险的。尤其是涉及Civil 3D对象时,它可以复制从属对象和选定对象。我终于意识到最好还是放弃这个想法。我也不喜欢NCOPY的工作方式,想要一个更好的解决方案。我知道这可能对你的努力没有帮助,但请相信我,这可能是一个复杂的过程,结果可能不是最初想要的。
页:
1
[2]