teknomatika 发表于 2022-7-6 10:02:48

具有高程特性的图层

亲爱的朋友们。
是否可以使用例程Autolisp将图层指定给特性高程?
我知道我们可以在工作的任何时候更改高程属性
甚至UCS的Z值,但有趣的是,这个属性可以
进行聚合以形成一个层。当该层处于活动状态时,高程假设为设定值。
在这种情况下,可能有多个层
具有不同的海拔高度。可能对一些3D作品感兴趣。

ccowgill 发表于 2022-7-6 10:10:47

您可以编写一个例程,在调用命令时使用reactor更改高程系统变量,并且特定图层是当前图层,至于将其设置为图层特性,我认为这是不可能的。

ReMark 发表于 2022-7-6 10:15:10

我会回答“不”。从AutoCAD帮助文件。
 
高程
 
“存储新对象相对于当前UCS的当前高程。”
 
注意“objects”这个词吗?

teknomatika 发表于 2022-7-6 10:21:01

谢谢你的回复。
好的,确实如此。我想要的是激活
UCS参数Z已更改为预先设置的值,并且
在此层中创建的实体将具有其所有高程。
总而言之,高程是图层的另一个属性,例如颜色、线型、线宽等。。

ReMark 发表于 2022-7-6 10:25:29

Z的值总是常数还是变量?

irneb 发表于 2022-7-6 10:34:50

这是一个“大”问题,不是吗? 
我想您“可以”将数据作为ldata/xdata/xrecord添加到层中。但是,您需要有一个单独的lisp,以便用户可以通过它设置这些“图层高程”。然后,您需要遍历所有图元,将图层上的图元修改为其指定高程。然后,正如ccowgill所建议的那样,使用reactor根据当前层的设置来设置当前高程,因此所有新实体也都会这样做。

ccowgill 发表于 2022-7-6 10:39:30

这可能适用于现有图形,但对于reactor,您可能可以将其设置为程序本身中的列表,因此不需要进入ldata/xdata/xrecords。假设有适当的标准,并且所有内容都绘制在正确的图层上,然而,在大多数情况下,情况并非如此,至少我知道在这里,大多数情况下,某些内容无意中使用错误的图层电流绘制,然后移到正确的图层。因此,特性的变化也必须包括在这个反应堆中。我想说没有简单的方法可以做到这一点。也许应该建议Autodesk将其作为AutoCAD“愿望列表”项?

teknomatika 发表于 2022-7-6 10:41:56

层与层之间应该是可变的,但在其自身层中应该是恒定的。也就是说:要将图层定义为当前图层,请获取归因于该图层的高程值。

ccowgill 发表于 2022-7-6 10:51:51

哦,那更容易

(if (not Sysvar_Changing_Reactor)
(setq    Sysvar_Changing_Reactor
    (vlr-sysvar-reactor
      "Monitor System Variable changes"
      '((:vlr-sysVarChanged
         .
         Sysvar_Changed_Command
      )
       )
    ) ;_ end of vlr-command-reactor
) ;_ end of setq
() ;_ the reactor is already loaded
) ;_ end of if

(defun Sysvar_Changed_Command (In_ReactorName In_Command / LayObj)
                   ;(alert (car In_Command ))
   (if (= (car In_Command) "CLAYER")
    (elevationswitch)
) ;_ end of if
) ;_ end of defun

您所需要的只是高程切换例程

BlackBox 发表于 2022-7-6 10:55:33

基于Chris的提议(如果可以的话):
 

;;;--------------------------------------------------------------------;
;;; SysvarChanged reactor function:
(defun SysvarChanged:Reactors()
(cond
   (*Reactor_SysvarChanged*)
   ((setq *Reactor_SysvarChanged*
         (vlr-sysvar-reactor
             "Monitor System Variable changes"
             '((:vlr-sysVarChanged . Callback:SysvarChanged))))))
(prompt "\n \n>>SysvarChanged Reactors Loaded ")
(princ))
;;;--------------------------------------------------------------------;
;;; SysvarChanged callback function:
(defun Callback:SysvarChanged(Rea Cmd / item)
(cond
   ((= "CLAYER" (car Cmd))                                             ; Layer changed
    (progn
      (cond (*elevList*)
            ((setq *elevList*
                  '(("Layer1" . elev1)
                      ("Layer2" . elev2)
                      ("Layer3" . elev3)
                      ;; ...etc.
                      ))))
      (if (setq item (assoc (getvar 'clayer) *elevList*))
      (setvar 'elevation (cdr item)))))
   ;; ... Add other conditions here
   )
(princ))
;;;--------------------------------------------------------------------;
;;; Conditional load reactor function:
(defun Reactor:Start(/ vrsn)
(vl-load-com)
(cond
   ((or (vl-string-search "R17.2" (setq vrsn (vlax-product-key)))      ; 2009
      (vl-string-search "R18.1" vrsn))                               ; 2011
    (SysvarChanged:Reactors))))
;;;--------------------------------------------------------------------;
(princ)
页: [1] 2
查看完整版本: 具有高程特性的图层