So far, we have a number of properties of graphical elements that we can read out which are always accessed directly depending on the type of element characteristics in the DGN Object Browser. Here, I will show an alternate way to access this data and in some cases even more features that are generated by applications. This is a well-known and often used MicroStation function element from the primary toolbox displayed with the icon below:
If you execute this function and elect a shape for example, you will recieve a similar line-up with member information:
The information on the elements are divided into categories. In the general catagory, you will find generic element attributes such as levels, colors, etc.Each of these pieces of information is marked with a description. I would like to point out here that this is key, because we now want to access this information.We need to use the so-called PropertyHander. Here is an example of how to read for example, the layer name:
Sub elementinfo() Dim ele As Element Dim ee As ElementEnumerator Dim header, line As String Dim oPh As PropertyHandler Dim file As String On Error Resume Next If ActiveWorkspace.IsConfigurationVariableDefined("MyOutputFile") Then file = ActiveWorkspace.ConfigurationVariableValue("MyOutputFile") Else MsgBox "The variable MyOutputFile is not defined. Stopped Processing", vbCritical Exit Sub End If Open file For Append As #1 Set ee = ActiveModelReference.GraphicalElementCache.Scan() Do While ee.MoveNext Set oPh = CreatePropertyHandler(ee.Current) If oPh.SelectByAccessString("Level") Then Print #1, "Levelname: " & oPh.GetDisplayString End If Loop Close #1 End Sub
We generate scenarios from the respective element and object with all the properties and target a keyboard to the speicific information. For the example, we used the keyboard "Level" in the layer name.The output is still in the .csv file so that we are able to find the correct information.
This information of the layer name can also be read directly from the respective element (preoperty ee.Current.Level.Name). However, there is a range o information that cannot be read directly as a property, particularly if these properties through applications are written to the elements.
To find out what information might be available, there is the .GetAccessStrings method to read all existing access keys.Here, I left this one out in a list l () with strings numbered in the .CSV:
Sub elementinfo() Dim ele As Element Dim ee As ElementEnumerator Dim header, line As String Dim oPh As PropertyHandler Dim l() As String Dim file As String If ActiveWorkspace.IsConfigurationVariableDefined("MyOutputFile") Then file = ActiveWorkspace.ConfigurationVariableValue("MyOutputFile") Else MsgBox "The variable MyOutputFile is not defined. Stopped Processing", vbCritical Exit Sub End If Open file For Append As #1 Set ee = ActiveModelReference.GraphicalElementCache.Scan() Do While ee.MoveNext Set oPh = CreatePropertyHandler(ee.Current) l = oPh.GetAccessStrings Print #1, "There is possible information " & UBound(l) - LBound(l) + 1 & " at this element" For i = LBound(l) To UBound(l) Print #1, i & ";" & l(i) Next Loop Close #1 End Sub
The excel list starts with the following lines, in the 2nd column listing the exact keywords, which can be accessed via the following information:
There is possible information Element 57 at this element0 Description 1 Level 2 ElementID 3 Model 4 ModifiedTime 5 ElementSize
It should also be noted that not all information is availabe, in which is may cause run-time errors that are ignored with the following statement:
On error resume next
Again, we attempt here to read out all data. Note that on the ON ERROR line, we deal with the runtime error. The output is virtually extended to the previous example, but only to the 3rd column:
Sub elementinfo() Dim ele As Element Dim ee As ElementEnumerator Dim header, line As String Dim oPh As PropertyHandler Dim l() As String Dim file As String On Error Resume Next If ActiveWorkspace.IsConfigurationVariableDefined("MyOutputFile") Then file = ActiveWorkspace.ConfigurationVariableValue("MyOutputFile") Else MsgBox "The variable MyOutputFile is not defined. Stopped Processing", vbCritical Exit Sub End If Open file For Append As #1 Set ee = ActiveModelReference.GraphicalElementCache.Scan() Do While ee.MoveNext Set oPh = CreatePropertyHandler(ee.Current) l = oPh.GetAccessStrings Print #1, "There is possible information " & UBound(l) - LBound(l) + 1 & " at this element" For i = LBound(l) To UBound(l) If oPh.SelectByAccessString(l(i)) Then Print #1, i & ";" & l(i) & ";" & oPh.GetDisplayString End If Next Loop Close #1 End Sub
The first few lines of output could look something like this:
There is possible information Element 57 at this element0 Description Shape 1 Level NewLevel 2 ElementID 633 3 Model Default 4 ModifiedTime 07.07.2014 11:17 5 ElementSize 140 6 FilePos 4000001 7 Linkages 1
In the following section, we deal exclusively with the reading of attribute data.
<< RETURN TO PART 8 << >> CONTINUE ON TO PART 10 >>