大家好。我正在用一个相当简单的lisp例程寻找一些帮助/建议。正如主题所说,我希望用户能够:
1.选择外部参照
2.选择第二个外部参照
3.更改第二个外部参照(插入点)的数字“10”dxf代码,以匹配第一个外部参照
我已经做了很多例行程序,但我想完善它,以防止用户拾取非外部参照实体或什么都没有。我已经玩了一些“while”和“if”语句,但我还没有掌握它们。
下面是我的代码和我的一些尝试,所以它还不是很好和整洁。该例程将在我们的办公室中使用,因此layerstate命令用于解决公司标准层的使用和问题。
谢谢你的帮助!
- (defun C:xer (/ 1ent 1elist 1inspnt 2ent 2elist temp)
- (acet-error-init
- (list (list "cmdecho" 0
- "osmode" (getvar "osmode")
- "clayer" (getvar "clayer")
- "attdia" (getvar "attdia")
- );list
- T
- );list
- );acet-error-init
-
- (layerstate-save "temp" 239 nil)
-
-
- (setq 1ent (entsel "\nSelect the source XREF with the desired insertion point: "))
- (setq 1elist(entget (car 1ent)))
- (setq 1inspnt (cdr (assoc 10 1elist)))
-
- (setq 1nestent (nentselp (cadr 1ent)))
- (setq 1nestlist (entget (car 1nestent)))
- (setq 1nentlay (cdr (assoc 8 1nestlist)))
- (if (vl-string-search "|" 1nentlay)
- (alert "yeah!") (alert "Object selected is not an xref. Please try again."))
- (setq 2ent (entsel "\nSelect the destination XREF to be moved: "))
- (setq 2elist (entget 2ent))
-
-
-
- (command ".layer" "unlock" "*" "")
-
- (setq 2elist (subst (cons 10 1inspnt)(assoc 10 2elist) 2elist))
- (entmod 2elist)
- (entupd 2ent)
- (layerstate-restore "temp")
-
- (layerstate-delete "temp")
- (command ".regenall")
- (setvar "CLAYER" CLay)
- (setvar "OSMODE" OMode)
- (setvar "CMDECHO" CEcho)
- (setvar "ATTDIA" ATTDIAmode)
- (acet-error-restore)
- (princ)
- )
|