nmulder 发表于 2022-7-5 18:53:04

更改插入点

大家好。我正在用一个相当简单的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)
)

iconeo 发表于 2022-7-5 19:09:09

试试这个。不是我的代码。
 
(defun c:Mxr ( / elst matrix target)
(if
(and
(setq elst (nentselp "\nSelect Source Xref. "))
(setq matrix (caddr elst))
(setq target (car (entsel "\nSelect Target Xref. ")))
(setq target (vlax-ename->vla-object target))
)
(progn
(vlax-put target 'InsertionPoint '(0.0 0.0 0.0))
(vlax-put target 'XScaleFactor 1.0)
(vlax-put target 'YScaleFactor 1.0)
(vlax-put target 'ZScaleFactor 1.0)
(vlax-put target 'Rotation 0.0)
(vla-TransformBy target (vlax-tmatrix matrix))
)
)
(princ)
)
(c:mxr)

Commandobill 发表于 2022-7-5 19:22:40

更简单一点:
(defun c:xer ( / source matrix target)
(if
(and
(setq source (car (entsel "\nSelect Source Xref. ")))
(setq source (vlax-ename->vla-object source))
(setq target (car (entsel "\nSelect Target Xref. ")))
(setq target (vlax-ename->vla-object target))
)
(vla-put-insertionpoint target (vla-get-insertionpoint source))
)
(princ)
)

iconeo 发表于 2022-7-5 19:32:58

这不包括比例和旋转,但正确吗?

Commandobill 发表于 2022-7-5 19:39:11

如果要检查某个对象是否为外部参照,可以在其中进行另一个检查,如下所示:
(vlax-property-available-p source 'path)

Commandobill 发表于 2022-7-5 19:45:21

 
没有,但OP没有要求旋转或缩放,只要求插入点。

iconeo 发表于 2022-7-5 19:54:36

没错,这部作品是从2011年开始的。。。死者在我们中间行走。
页: [1]
查看完整版本: 更改插入点