Vla GetInterfaceObject什么是
这是我目前正在使用的创建MleaderStyle的代码;; original code by VVA
(defun Create_MleaderStyle (mleaderstylename
MldScale
/
; acaddoc
; mldrdict
; newldrstyle
;objcolor
)
(vl-load-com)
(setq acadobj (vlax-get-acad-object)
acaddoc (vla-get-activedocument acadobj)
mldrdict (vla-item (vla-get-dictionaries acaddoc) "ACAD_MLEADERSTYLE")
) ;_ end of setq
(setq newldrstyle (vlax-invoke-methodmldrdict 'addobject mleaderstylename "AcDbMLeaderStyle"
) ;_ end of vlax-invoke-method
) ;_ end of setq
(setq objcolor (vla-getinterfaceobject acadobj (strcat "AutoCAD.AcCmColor." (substr (getvar "acadver") 1 2)) ;_ end of strcat
) ;_ end of vla-getinterfaceobject ;;what is vla-getinerfaceobject, and what am i retreiving?
) ;_ end of setq
(vla-put-colorindex objcolor 2)
(vla-put-textcolor newldrstyle objcolor) ;;howcome I have to set color this way instead of the alternate in code below
(vla-put-colorindex objcolor 0)
(vla-put-leaderlinecolor newldrstyle objcolor)
(foreach item
(list
'("AlignSpace" 0.18)
'("Annotative" 0)
'("ArrowSize" 0.125)
;'("ArrowSymbol" "")
'("BitFlags" 0)
;'("Block" "")
'("BlockConnectionType" 0)
'("BlockRotation" 0.0)
'("BlockScale" 1.0)
'("BreakSize" 0.125)
'("ContentType" 2) ;mtext
'("Description" "")
'("DoglegLength" 0.125)
'("DrawLeaderOrderType" 0)
'("DrawMLeaderOrderType" 1)
'("EnableBlockRotation" -1)
'("EnableBlockScale" -1)
'("EnableDogleg" -1)
'("EnableFrameText" 0)
'("EnableLanding" -1)
'("FirstSegmentAngleConstraint" 0)
'("LandingGap" 0.09)
'("LeaderLineType" 1)
'("LeaderLineTypeId" "ByBlock")
'("LeaderLineWeight" -2)
'("MaxLeaderSegmentsPoints" 0)
(list "ScaleFactor" MldScale)
'("SecondSegmentAngleConstraint" 0)
'("TextAlignmentType" 0)
'("TextAngleType" 0)
'("TextAttachmentDirection" 0)
'("TextBottomAttachmentType" 0)
'("TextHeight" 0.09375)
'("TextLeftAttachmentType" 1)
'("TextRightAttachmentType" 1)
'("TextString" "")
'("TextStyle" "StyleName") ;need to add check for existing
'("TextTopAttachmentType" 0)
) ;_ end of list
(vlax-put newldrstyle (car item) (cadr item))
) ;_ end of foreach
newldrstyle
) ;_ end of defun
怎么会这样?我试过了,它不起作用。
(vlax-put-property (vlax-get-property newldrstyle 'Textcolor) 'ColorIndex 5) 查看“acadver”,它为每个版本的Autocad等返回不同的数字有时在打开Autocad数据库时,您必须在版本中使用正确的数字。因此,我有一些代码可以在打开CIV3D数据库之前检查哪个版本正在运行。
((vl-string-search "R20.0" vrsn)(setq appstr "10.4"));;2015
((vl-string-search "R20.1" vrsn)(setq appstr "10.5"));;2016
((vl-string-search "R21.0" vrsn)(setq appstr "11.0"));;2017
是的,我明白了
所以这条线本质上是这样计算的。
(setq objcolor (vla-getinterfaceobject acadobj "AutoCAD.AcCmColor.21") )
这给了我这个
objcolor = '#<VLA-OBJECT IAcadAcCmColor 000001607b35b8b0>
这是什么?这是一种颜色吗?这个颜色属于哪个物体?这里是这样用的
(vla-put-colorindex objcolor 2)
(vla-put-textcolor newldrstyle objcolor)
(vla-put-colorindex objcolor 0)
(vla-put-leaderlinecolor newldrstyle objcolor)
为什么我不能这么做
(vlax-put-property (vlax-get-property newldrstyle 'Textcolor) 'ColorIndex 5) 使用vlax dump对象并查看结果。它可能有助于了解发生了什么,样式可以依赖于不同级别的更改,而不是沿着树结构往下走。我确实发现了一些东西,指出了你可以直接做的地方,我将不得不再做一次。
页:
[1]