mcguirepm 发表于 2022-7-6 17:19:09

抓取时的Entitity ID

我试图编写一个例程,当有人试图通过夹点移动特定实体时,该例程就会激活。
 
有人有什么好主意从哪里开始吗?
 
谢谢

ASMI 发表于 2022-7-6 19:00:05

您可以使用两个命令和AcDb反应器。例如,通过GRON命令转动电抗器,并对某些对象进行夹点旋转(GROFF关闭):
 
(defun c:gron()
(vl-load-com)
(if(not grip:reactor)
   (setq grip:reactor
   (vlr-Command-Reactor nil
   '((:vlr-CommandEnded . GripReaction))
   ); end vlr-Command-Reactor
); end setq
   ); end if
(if(not acdb:reactor)
   (setq acdb:reactor
   (vlr-AcDb-Reactor nil
   '((:vlr-objectModified . GripModified))
   ); end vlr-Command-Reactor
); end setq
   ); end if
(princ)
); end of c:gron


(defun c:groff()
(if grip:reactor
   (progn
   (vlr-remove grip:reactor)
   (setq grip:reactor nil)
   (vlr-remove acdb:reactor)
   (setq acdb:reactor nil)
   ); end progn
   ); end if
(princ)
); end of c:groff


(defun GripModified(Reac Args / lEnt)
(setq lEnt(vlax-ename->vla-object(cadr Args))
gron:lastent(strcat(vla-get-ObjectName lEnt)
                   " ID: "(itoa(vla-get-ObjectID lEnt)))
); end setq
(princ)
); end of GripModified


(defun GripReaction(Reac Args)
(if(equal "GRIP_ROTATE"(car Args))
   (if gron:lastent
   (alert
(strcat "You have just rotated:\n" gron:lastent))
   ); end if
   ); end if
(princ)
); end of GripReaction
页: [1]
查看完整版本: 抓取时的Entitity ID