自贡黄明儒 发表于 2014-9-28 13:56:59

反应器的困惑

本帖最后由 自贡黄明儒 于 2014-9-29 08:36 编辑

;;在(:vlr-lispEnded . w2)中,①自定义w2是两个还是三个参数呢?②这些参数是什么呢?
;;一直以来我都相当困惑,也是我从用不反应器的原因,今天试一下

;;[第一步]
;;1.1 查看所有反应器
(defun C:w1 ()
(foreach x (vlr-types)
    (princ (strcat "\n" (VL-PRINC-TO-STRING x)))
    (foreach y (VLR-Reaction-Names x)
      (princ (strcat "\n\t" (VL-PRINC-TO-STRING y)))
    )
)
(princ)
)
;|05
:VLR-Linker-Reactor
:VLR-rxAppLoaded
:VLR-rxAppUnLoaded
:VLR-Editor-Reactor
:VLR-unknownCommand
:VLR-commandWillStart
:VLR-commandEnded
:VLR-commandCancelled
:VLR-commandFailed
:VLR-lispWillStart
:VLR-lispEnded
:VLR-lispCancelled
:VLR-beginClose
:VLR-beginDxfIn
:VLR-abortDxfIn
:VLR-dxfInComplete
:VLR-beginDxfOut
:VLR-abortDxfOut
:VLR-dxfOutComplete
:VLR-beginDwgOpen
:VLR-endDwgOpen
:VLR-dwgFileOpened
:VLR-databaseConstructed
:VLR-databaseToBeDestroyed
:VLR-beginSave
:VLR-saveComplete
:VLR-sysVarWillChange
:VLR-sysVarChanged
:VLR-AcDb-Reactor
:VLR-objectAppended
:VLR-objectUnAppended
:VLR-objectReAppended
:VLR-objectOpenedForModify
:VLR-objectModified
:VLR-objectErased
:VLR-objectUnErased
:VLR-DocManager-Reactor
:VLR-documentCreated
:VLR-documentToBeDestroyed
:VLR-documentLockModeWillChange
:VLR-documentLockModeChangeVetoed
:VLR-documentLockModeChanged
:VLR-documentBecameCurrent
:VLR-documentToBeActivated
:VLR-documentToBeDeactivated
:VLR-Command-Reactor
:VLR-unknownCommand
:VLR-commandWillStart
:VLR-commandEnded
:VLR-commandCancelled
:VLR-commandFailed
:VLR-Lisp-Reactor
:VLR-lispWillStart
:VLR-lispEnded
:VLR-lispCancelled
:VLR-DXF-Reactor
:VLR-beginDxfIn
:VLR-abortDxfIn
:VLR-dxfInComplete
:VLR-beginDxfOut
:VLR-abortDxfOut
:VLR-dxfOutComplete
:VLR-DWG-Reactor
:VLR-beginDwgOpen
:VLR-endDwgOpen
:VLR-dwgFileOpened
:VLR-databaseConstructed
:VLR-databaseToBeDestroyed
:VLR-beginSave
:VLR-saveComplete
:VLR-beginClose
:VLR-Insert-Reactor
:VLR-beginInsert
:VLR-beginInsertM
:VLR-otherInsert
:VLR-abortInsert
:VLR-endInsert
:VLR-Wblock-Reactor
:VLR-wblockNotice
:VLR-beginWblockPt
:VLR-beginWblockId
:VLR-beginWblock
:VLR-otherWblock
:VLR-abortWblock
:VLR-endWblock
:VLR-beginWblockObjects
:VLR-SysVar-Reactor
:VLR-sysVarWillChange
:VLR-sysVarChanged
:VLR-DeepClone-Reactor
:VLR-beginDeepClone
:VLR-beginDeepCloneXlation
:VLR-abortDeepClone
:VLR-endDeepClone
:VLR-XREF-Reactor
:VLR-beginAttach
:VLR-otherAttach
:VLR-abortAttach
:VLR-endAttach
:VLR-redirected
:VLR-comandeered
:VLR-beginRestore
:VLR-abortRestore
:VLR-endRestore
:VLR-xrefSubcommandBindItem
:VLR-xrefSubcommandAttachItem
:VLR-xrefSubcommandOverlayItem
:VLR-xrefSubcommandDetachItem
:VLR-xrefSubcommandPathItem
:VLR-xrefSubcommandReloadItem
:VLR-xrefSubcommandUnloadItem
:VLR-Undo-Reactor
:VLR-undoSubcommandAuto
:VLR-undoSubcommandControl
:VLR-undoSubcommandBegin
:VLR-undoSubcommandEnd
:VLR-undoSubcommandMark
:VLR-undoSubcommandBack
:VLR-undoSubcommandNumber
:VLR-Window-Reactor
:VLR-docFrameMovedOrResized
:VLR-mainFrameMovedOrResized
:VLR-Toolbar-Reactor
:VLR-toolbarBitmapSizeWillChange
:VLR-toolbarBitmapSizeChanged
:VLR-Mouse-Reactor
:VLR-beginDoubleClick
:VLR-beginRightClick
:VLR-Miscellaneous-Reactor
:VLR-pickfirstModified
:VLR-layoutSwitched
:VLR-Object-Reactor
:VLR-cancelled
:VLR-copied
:VLR-erased
:VLR-unerased
:VLR-goodbye
:VLR-openedForModify
:VLR-modified
:VLR-subObjModified
:VLR-modifyUndone
:VLR-modifiedXData
:VLR-unappended
:VLR-reappended
:VLR-objectClosed
|;

;;[第二步]
;;w2后面的参数是什么东西?
(defun c:ww (/ HANDL1 HANDL2 OBJ VLROBJ)
(setq obj (vlax-ename->vla-object (car (entsel "\n 圆")))) ;要添加反应器的对象
(setq handL1 (cdr (assoc 5 (entget (car (entsel "\n 直线1")))))) ;要关联的对象
(setq handL2 (cdr (assoc 5 (entget (car (entsel "\n 直线2")))))) ;要关联的对象
(setq vlrobj (vlr-object-reactor (list obj) (list handL1 handL2) '((:VLR-modified . w2))))
;;上句有对象,说明w2带三个参数;下句为nil,w2带两个参数
;;(vlr-lisp-reactor nil '((:vlr-lispEnded . w2) (:vlr-lispCancelled . w2)))
)

(defun w2 (obj reactor pa)
(princ "\n")
(princ obj)
(princ "\n")
(princ reactor)
(princ "\n")
(princ pa)
(princ)
)

;;[第三步]
;|执行ww命令,圆与两直线关联起来,即当圆改变时,返回如下:
#<VLA-OBJECT IAcadCircle 0bdd3ef4> ;就是那个圆
#<VLR-Object-Reactor> ;(mapcar 'handent (vlr-data reactor))就是那两条直线
nil ;总是nil,就不管它了

这样就可以写代w2函数了,先得到obj的圆心,然后修改那条直线
|;

自贡黄明儒 发表于 2014-9-29 08:15:22

通过一步步学习,很容易弄清楚
;;4.1删除对象上的反应器
;;5.1 启动编辑反应器.
象我一样,对学习反应器的人来应该有用,昨天也把这个贴子发晓东了,结果被枪毙了

lucas_3333 发表于 2014-9-29 15:11:00

自贡黄明儒 发表于 2014-9-29 08:15 static/image/common/back.gif
通过一步步学习,很容易弄清楚
;;4.1删除对象上的反应器
;;5.1 启动编辑反应器.


为何,枪毙的原因是什么?

自贡黄明儒 发表于 2014-9-29 15:27:14

lucas_3333 发表于 2014-9-29 15:11 static/image/common/back.gif
为何,枪毙的原因是什么?

说明了,明经和晓东的差别。

lucas_3333 发表于 2014-9-29 15:48:36

本帖最后由 lucas_3333 于 2014-9-29 15:49 编辑

自贡黄明儒 发表于 2014-9-29 15:27 static/image/common/back.gif
说明了,明经和晓东的差别。
不明白, 是何原因?这不会触及别人的利益啊,晓东老大很开明的啊

rdhhb 发表于 2016-6-25 19:51:32

还是明经好
页: [1]
查看完整版本: 反应器的困惑