Visual LISP is great tool considering portability and debugging.
It uses active x to get objects.
There are properties exposed by active x that are exposed as Read Only while in NET they are exposed as Read Write !
For example in Civil 3D, section views, elevation min/max, offset left/right are ReadOnly when getting through active x. So i had to turn to NET to change their values.
So a good practice before starting developing using VBA or Visual Lisp is to check whether properties are exposed by active x and if so if they are writeable.
A on the fly method to get the available properties and their RW availability is through command line entering the following command.
(vlax-dump-object (vlax-ename->vla-object (car (entsel))) T)
The T at the end asks for the available methods and can be omitted.
The (RO) next to property indicates that are Read Only.
Following is a copy-paste from the results in command window (F2)...
; IAeccSectionView: interface IAeccSectionView
; Property values:
; Application (RO) = #<VLA-OBJECT IAeccApplication 000000007499ce10>
; BandSet (RO) = #<VLA-OBJECT IAeccSectionViewBandSet 000000007499e5b8>
; Description = ""
; DisplayName (RO) = "0+880 (45)"
; Document (RO) = #<VLA-OBJECT IAeccDocument 0000000074996570>
; ElevationMax (RO) = 35.0
; ElevationMin (RO) = 28.0
; EntityTransparency = "ByLayer"
; Handle (RO) = "8C4D"
; HasExtensionDictionary (RO) = 0
; Hyperlinks (RO) = #<VLA-OBJECT IAcadHyperlinks 0000000075afed68>
; Layer = "Sections & Section Views Dev"
; LengthLeft (RO) = -11.2552
; LengthRight (RO) = 31.6704
; Linetype = "ByLayer"
; LinetypeScale = 1.0
; Lineweight = -1
; Material = "ByLayer"
; Name = "0+880 (45)"
; ObjectID (RO) = 42
; ObjectName (RO) = "AeccDbGraphCrossSection"
; OffsetLeft (RO) = -11.2552
; OffsetRight (RO) = 31.6704
; Overrides (RO) = #<VLA-OBJECT IAeccSectionOverrides 000000007499aec8>
; OwnerID (RO) = 43
; Parent (RO) = #<VLA-OBJECT IAeccSampleLine 000000004bd402b0>
; PlotStyleName = "ByLayer"
; ShowToolTip = -1
; Style = #<VLA-OBJECT IAeccSectionViewStyle 000000004fc38ed0>
; StyleName (RO) = "TKV - CS name and station"
; TrueColor = #<VLA-OBJECT IAcadAcCmColor 0000000075afea00>
; Type (RO) = 4
; VerticalScale = 1.0
; Visible = -1
; Methods supported:
; ArrayPolar (3)
; ArrayRectangular (6)
; Copy ()
; Delete ()
; FindStationOffsetAndElevationAtXY (6)
; FindXYAtStationOffsetAndElevation (6)
; GetBoundingBox (2)
; GetExtensionDictionary ()
; GetXData (3)
; Highlight (1)
; IntersectWith (2)
; IsReferenceObject ()
; IsReferenceStale ()
; IsReferenceSubObject ()
; IsReferenceValid ()
; IsValid ()
; Layout ()
; Mirror (2)
; Mirror3D (3)
; Move (2)
; Rotate (2)
; Rotate3D (3)
; ScaleEntity (2)
; SetXData (2)
; TransformBy (1)
; Update ()
T
It uses active x to get objects.
There are properties exposed by active x that are exposed as Read Only while in NET they are exposed as Read Write !
For example in Civil 3D, section views, elevation min/max, offset left/right are ReadOnly when getting through active x. So i had to turn to NET to change their values.
So a good practice before starting developing using VBA or Visual Lisp is to check whether properties are exposed by active x and if so if they are writeable.
A on the fly method to get the available properties and their RW availability is through command line entering the following command.
(vlax-dump-object (vlax-ename->vla-object (car (entsel))) T)
The T at the end asks for the available methods and can be omitted.
The (RO) next to property indicates that are Read Only.
Following is a copy-paste from the results in command window (F2)...
; IAeccSectionView: interface IAeccSectionView
; Property values:
; Application (RO) = #<VLA-OBJECT IAeccApplication 000000007499ce10>
; BandSet (RO) = #<VLA-OBJECT IAeccSectionViewBandSet 000000007499e5b8>
; Description = ""
; DisplayName (RO) = "0+880 (45)"
; Document (RO) = #<VLA-OBJECT IAeccDocument 0000000074996570>
; ElevationMax (RO) = 35.0
; ElevationMin (RO) = 28.0
; EntityTransparency = "ByLayer"
; Handle (RO) = "8C4D"
; HasExtensionDictionary (RO) = 0
; Hyperlinks (RO) = #<VLA-OBJECT IAcadHyperlinks 0000000075afed68>
; Layer = "Sections & Section Views Dev"
; LengthLeft (RO) = -11.2552
; LengthRight (RO) = 31.6704
; Linetype = "ByLayer"
; LinetypeScale = 1.0
; Lineweight = -1
; Material = "ByLayer"
; Name = "0+880 (45)"
; ObjectID (RO) = 42
; ObjectName (RO) = "AeccDbGraphCrossSection"
; OffsetLeft (RO) = -11.2552
; OffsetRight (RO) = 31.6704
; Overrides (RO) = #<VLA-OBJECT IAeccSectionOverrides 000000007499aec8>
; OwnerID (RO) = 43
; Parent (RO) = #<VLA-OBJECT IAeccSampleLine 000000004bd402b0>
; PlotStyleName = "ByLayer"
; ShowToolTip = -1
; Style = #<VLA-OBJECT IAeccSectionViewStyle 000000004fc38ed0>
; StyleName (RO) = "TKV - CS name and station"
; TrueColor = #<VLA-OBJECT IAcadAcCmColor 0000000075afea00>
; Type (RO) = 4
; VerticalScale = 1.0
; Visible = -1
; Methods supported:
; ArrayPolar (3)
; ArrayRectangular (6)
; Copy ()
; Delete ()
; FindStationOffsetAndElevationAtXY (6)
; FindXYAtStationOffsetAndElevation (6)
; GetBoundingBox (2)
; GetExtensionDictionary ()
; GetXData (3)
; Highlight (1)
; IntersectWith (2)
; IsReferenceObject ()
; IsReferenceStale ()
; IsReferenceSubObject ()
; IsReferenceValid ()
; IsValid ()
; Layout ()
; Mirror (2)
; Mirror3D (3)
; Move (2)
; Rotate (2)
; Rotate3D (3)
; ScaleEntity (2)
; SetXData (2)
; TransformBy (1)
; Update ()
T
No comments:
Post a Comment