guitarguy1685 发表于 2022-7-5 16:16:00

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)

BIGAL 发表于 2022-7-5 16:38:47

查看“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   

guitarguy1685 发表于 2022-7-5 17:09:09

是的,我明白了
 
所以这条线本质上是这样计算的。
 
(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)

BIGAL 发表于 2022-7-5 17:16:21

使用vlax dump对象并查看结果。它可能有助于了解发生了什么,样式可以依赖于不同级别的更改,而不是沿着树结构往下走。我确实发现了一些东西,指出了你可以直接做的地方,我将不得不再做一次。
页: [1]
查看完整版本: Vla GetInterfaceObject什么是