具有高程特性的图层
亲爱的朋友们。是否可以使用例程Autolisp将图层指定给特性高程?
我知道我们可以在工作的任何时候更改高程属性
甚至UCS的Z值,但有趣的是,这个属性可以
进行聚合以形成一个层。当该层处于活动状态时,高程假设为设定值。
在这种情况下,可能有多个层
具有不同的海拔高度。可能对一些3D作品感兴趣。 您可以编写一个例程,在调用命令时使用reactor更改高程系统变量,并且特定图层是当前图层,至于将其设置为图层特性,我认为这是不可能的。 我会回答“不”。从AutoCAD帮助文件。
高程
“存储新对象相对于当前UCS的当前高程。”
注意“objects”这个词吗? 谢谢你的回复。
好的,确实如此。我想要的是激活
UCS参数Z已更改为预先设置的值,并且
在此层中创建的实体将具有其所有高程。
总而言之,高程是图层的另一个属性,例如颜色、线型、线宽等。。 Z的值总是常数还是变量? 这是一个“大”问题,不是吗?
我想您“可以”将数据作为ldata/xdata/xrecord添加到层中。但是,您需要有一个单独的lisp,以便用户可以通过它设置这些“图层高程”。然后,您需要遍历所有图元,将图层上的图元修改为其指定高程。然后,正如ccowgill所建议的那样,使用reactor根据当前层的设置来设置当前高程,因此所有新实体也都会这样做。 这可能适用于现有图形,但对于reactor,您可能可以将其设置为程序本身中的列表,因此不需要进入ldata/xdata/xrecords。假设有适当的标准,并且所有内容都绘制在正确的图层上,然而,在大多数情况下,情况并非如此,至少我知道在这里,大多数情况下,某些内容无意中使用错误的图层电流绘制,然后移到正确的图层。因此,特性的变化也必须包括在这个反应堆中。我想说没有简单的方法可以做到这一点。也许应该建议Autodesk将其作为AutoCAD“愿望列表”项? 层与层之间应该是可变的,但在其自身层中应该是恒定的。也就是说:要将图层定义为当前图层,请获取归因于该图层的高程值。 哦,那更容易
(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
您所需要的只是高程切换例程 基于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