ccowgill 发表于 2022-7-6 09:44:11

加载反应器

我有一个问题,关于反应堆程序的加载。我对正确的程序有点困惑,因为我知道多次加载反应堆可能会导致问题。情况是这样的:我们在民用应用程序中使用第三方软件Eagle Point。经过数小时的挫折和实验,我发现Eagle Point似乎与我们运行的许多基于反应堆的fire程序不太合拍。然而,有一些程序,我希望不会引起问题,这对我们的生产力至关重要(链接注释,因此当一个注释被更改时,其他链接的注释被更改;以及在启动某些命令时自动切换层;都是大程序)。在装载反应堆时,我目前正在使用:
 

(if (not Command_Ending_Reactor)
(setq    Command_Ending_Reactor
   (vlr-command-reactor
       nil
       '((:vlr-commandended
          .
          Command_Ended_Command
         )
      )
   ) ;_ end of vlr-command-reactor
) ;_ end of setq
() ;_ the reactor is already loaded
) ;_ end of if



当提到“多次未加载反应堆”时,它是指:vlr commandended还是指Command\u Ending\u reactor?换句话说,我是否可以运行以下操作而不产生问题:
 

(cond
((and (not Command_Ending_Reactor) (not (member "egpt.exe" (dos_processes))))
(setq    Command_Ending_Reactor_EP
   (vlr-command-reactor
       nil
       '((:vlr-commandended
          .
          Command_Ended_Command_EP
         )
      )
   ) ;_ end of vlr-command-reactor
) ;_ end of setq
(setq    Command_Ending_Reactor_NOEP
      (vlr-command-reactor
      nil
      '((:vlr-commandended
         .
         Command_Ended_Command_NOEP
          )
         )
      ) ;_ end of vlr-command-reactor
   ) ;_ end of setq
) ;_ end of cond1
((and (not Command_Ending_Reactor) (member "egpt.exe" (dos_processes)))
   (setq    Command_Ending_Reactor_EP
      (vlr-command-reactor
      nil
      '((:vlr-commandended
         .
         Command_Ended_Command_EP
          )
         )
      ) ;_ end of vlr-command-reactor
   ) ;_ end of setq
) ;_ end of cond2
) ;_ end cond



(前面是一个未经测试的代码,出于示例目的,它更多地是一个psuedo代码)

BlackBox 发表于 2022-7-6 10:02:51

看看这个,克里斯:
 

;;;--------------------------------------------------------------------;
;;; Start reactor function:
(defun Reactors:Command()
;; CommandCancelled reactor:
(cond
   (*Reactor_CommandCancelled*)
   ((setq *Reactor_CommandCancelled*
         (vlr-command-reactor
             nil
             '((:vlr-commandCancelled . Callback:CommandEnded))))))
;; CommandEnded reactor:
(cond
   (*Reactor_CommandEnded*)
   ((setq *Reactor_CommandEnded*
         (vlr-command-reactor
             nil
             '((:vlr-commandEnded . Callback:CommandEnded))))))
;; CommandFailed reactor:
(cond
   (*Reactor_CommandFailed*)
   ((setq *Reactor_CommandFailed*
         (vlr-command-reactor
             nil
             '((:vlr-commandFailed . Callback:CommandEnded))))))
;; CommandStarted reactor:
(cond
   (*Reactor_CommandStarted*)
   ((setq *Reactor_CommandStarted*
         (vlr-command-reactor
             nil
             '((:vlr-commandwillstart . Callback:CommandStarted))))))
(prompt "\n \n>>Command Reactors Loaded ")
(princ)) ;_end defun
;;;--------------------------------------------------------------------;
;; CommandStarted callback function:
(defun Callback:CommandStarted(Rea Cmd / layerName LayerItem)
;; <- Your code here
(princ))
;;;--------------------------------------------------------------------;
;; CommandEnded callback function:
(defun Callback:CommandEnded(Rea Cmd)
;; <- Your code here
(princ))
;;;--------------------------------------------------------------------;
(cond
((or (vl-string-search "R17.2" *vrsn*)                              ; 2009 LDC
      (vl-string-search "R18.1" *vrsn*))                               ; 2011 C3D
(Reactors:Command)))
(princ)

 
我通常使用反应堆数据来跟踪反应堆,但是:
 

(defun Reactors:Command nil
(cond
   ( *Reactor_Command* )
   ( (setq *Reactor_Command*
       (vlr-command-reactor nil
      '(
         (:vlr-commandcancelled . callback:commandended)
         (:vlr-commandended   . callback:commandended)
         (:vlr-commandfailed    . callback:commandended)
         (:vlr-commandwillstart . callback:commandstarted)
         )
       )
   )
   )
)
(princ "\n--> Command Reactors Loaded.")
(princ)
)
 
这样,就不需要涉及全局变量

Lee Mac 发表于 2022-7-6 10:18:58

像往常一样,李,你有一个很好的建议,让我重新考虑去年发展起来的一些事情。。。一直以来,我都在努力为Civil 3D 2011建立支持结构和标准,并为我们从Land Desktop到Civil 3D的过渡进行反向规划。
 
谢谢你增加了工作量,伙计。笑死我了

BlackBox 发表于 2022-7-6 10:44:09

 
哈哈,我不觉得有必要实施它。。。

Lee Mac 发表于 2022-7-6 10:52:09

页: [1]
查看完整版本: 加载反应器