Bentley Communities
Bentley Communities
  • Site
  • User
  • Site
  • Search
  • User
  • Welcome
  • Products
  • Support
  • About
  • More
  • Cancel
MicroStation
  • Product Communities
  • More
MicroStation
MicroStation Wiki Searching and Evaluating Data in a drawing with VBA: Part 5 - Reading More General Properties of Elements
    • Sign in

    • -MicroStation Wiki
      • +Learning Tips
      • -MicroStation
        • +3D Printing - MicroStation
        • +Animation - MicroStation
        • +Archive / Backup - MicroStation
        • +Base Geometry - MicroStation
        • +Batch Processing - MicroStation
        • +CONNECT Advisor - MicroStation
        • CONNECT Integration - MicroStation
        • +CONNECTION Client
        • +Cells - MicroStation
        • +Change Tracking - MicroStation
        • +Configuration - MicroStation
        • +Coordinate Systems - MicroStation
        • +Curves - MicroStation
        • +Custom Linestyles - MicroStation
        • +DGN - MicroStation
        • +DWG - MicroStation
        • +Database - MicroStation
        • +Detailing Symbols - MicroStation
        • +Dimensions - MicroStation
        • +Documentation & Help - MicroStation
        • +Drawing Aids - MicroStation
        • +Exception - MicroStation
        • +FAQ - MicroStation
        • +Feature Based Solids Modeling - MicroStation
        • +File Access - MicroStation
        • +GUI - MicroStation
        • +General - MicroStation
        • +Graphics Display - MicroStation
        • +Groups - MicroStation
        • +Hardware / Input Devices - MicroStation
        • +Import/Export - MicroStation
        • +Installation - MicroStation
        • +Interchange - MicroStation
        • +Interference - MicroStation
        • +Internationalization - MicroStation
        • +Levels - MicroStation
        • +Licensing - MicroStation
        • +Manipulation - MicroStation
        • +Markup / Redline - MicroStation
        • +Measure - MicroStation
        • +Mesh - MicroStation
        • +Models - MicroStation
        • +Multi-Lines - MicroStation
        • +OLE - MicroStation
        • +Other - MicroStation
        • +Parametrics - MicroStation
        • +Patterning - MicroStation
        • +Point Cloud - MicroStation
        • +Printing - MicroStation
        • -Programming - MicroStation
          • +General - Programming - MicroStation
          • +Macro Recorder - Programming - MicroStation
          • +MDL - Programming - MicroStation
          • -VBA - Programming - MicroStation
            • Automatic execution when opening or closing drawings
            • Automatic Subroutine Loading
            • Automatically generate plots with VBA
            • Avoiding Inaccuracies in VBA Methods - .FacetSolidAsShapes for SmartSolids
            • Bring All Text to a New Level with VBA
            • Browsing References for Specific Items
            • Calculating the range of Rotated Cells
            • Changing Colors of Levels in VBA
            • Changing display priority for references
            • Changing Element Colors from RGB to Indexed Color
            • Changing Layer Colors from RGB to an Indexed Color
            • Changing the Alignment of All Texts with VBA
            • Changing the display order of elements
            • Changing the presentation order of Layers
            • Changing the Transparency Settings of Levels with VBA
            • Cleaning Property Data with VBA
            • COM Server error
            • Create Engineering (HTML) Links in VBA
            • Creating Coordinates as Latitude and Longitude using VBA Lines
            • Creating VBA Levels - 'Level name is duplicate'
            • Deleting Lines of Length 0 Using VBA
            • Errors Attempting to Load VBA Projects
            • Errors while attempting to load VBA
            • Exporting the RGB Values of the Color Table to a Text File in VBA
            • Forms in an .mvba do not open some pc's
            • How to read the RGB values of the Attached Color Table
            • Keyin to load the VBA Project Manager in MicroStation Connect
            • Leaving a VBA Tools Dialog Box Open
            • Linking to VBA Elements with User Attributes
            • New Text Font Cannot be Assigned
            • Placing annotation cells with VBA
            • Print Organizer Control with VBA
            • Printing all Sheet Models to PDF Using VBA
            • Reading the Length of All Arcs
            • Removing All Object Data from Selected Cells in VBA
            • Replacing Points with Circles Using VBA
            • Replacing Text with VBA - Part 1: Introduction
            • Replacing Text with VBA - Part 2: Complex Structures
            • Running a VBA Routine by Keyin
            • -Searching and Evaluating Data in a drawing with VBA
              • Searching and Evaluating Data in a drawing with VBA: Part 1 - Preparation.
              • Searching and Evaluating Data in a drawing with VBA: Part 10 - Reading Attribute Data
              • Searching and Evaluating Data in a drawing with VBA: Part 2 - Reading properties of Elements
              • Searching and Evaluating Data in a drawing with VBA: Part 3 - Reading Properties of Elements and Exporting to a Text File
              • Searching and Evaluating Data in a drawing with VBA: Part 4 - Saving data to a formatted CSV file
              • Searching and Evaluating Data in a drawing with VBA: Part 5 - Reading More General Properties of Elements
              • Searching and Evaluating Data in a drawing with VBA: Part 6 - Evaluating Simple Complex Elements
              • Searching and Evaluating Data in a drawing with VBA: Part 7 - Evaluating General Complex Elements
              • Searching and Evaluating Data in a drawing with VBA: Part 8 - Evaluating Nested Complex Elements
              • Searching and Evaluating Data in a drawing with VBA: Part 9 - PropertyHandler for Element Analysis
            • Searching and Selecting Text Fields with VBA
            • Updating sequence control with VBA
            • Using a VBA Macro
            • Using the VBA object PropertyHandler to change the Element Information
            • VBA - Interface Error: 0x80040502
            • VBA Error in Execution: Project or Library Not Found
            • What are these "Default.mvba" files?
        • +Project Navigation - MicroStation
        • +Properties - MicroStation
        • +RSS Feeds - MicroStation
        • +Reference - MicroStation
        • +Security - MicroStation
        • +Selection - MicroStation
        • +Settings - MicroStation
        • +Sheet Composition - MicroStation
        • +Solids - MicroStation
        • +Standards - MicroStation
        • +Surfaces - MicroStation
        • +Tables - MicroStation
        • +Text - MicroStation
        • +UI Customization - MicroStation
        • +Units - MicroStation
        • +View - MicroStation
        • +Visualization - MicroStation
        • Welcome Page - MicroStation
        • +Accreditation - MicroStation
        • +i.Models - MicroStation
        • +ProjectWise Integration
        • +Raster - MicroStation
    • +Administration Wiki
    • +Annotations Wiki
    • +Bentley View Wiki
    • +MicroStation PowerDraft
    • +Programming Wiki
    • +Visualization Wiki

     
     Questions about this article, topic, or product? Click here. 

    Searching and Evaluating Data in a drawing with VBA: Part 5 - Reading More General Properties of Elements

       
      Applies To 
       
      Product(s): MicroStation
      Version(s): 08.11.09.578
      Environment:  Windows 7 32 bit,Windows 7 64 bit
      Area:  Programming
      Subarea:  VBA
      Original Author: Tristan Anderson, Bentley Technical Support Group
       

    In the previous sections, we have always read out the same data: the endpoints of lines. 
    We will now move in different directions, because in addition to lines, more complex data structures have diverse properties.
    Outputting to a .csv file on the other hand we will leave as simple as it is now, because we already have the skeleton built for us.

    First, we will no longer restrict the choice of selected elements because the selection is made by all grapic elements of the current model without speicifying scan criteria.

    Set Ee = ActiveModelReference.GraphicalElementCache.Scan()

    Now it is important to check what type of element we are looking at in each case, because we can no longer assume that we are looking at a line as the only variable.

    Dim ele As Element

    This change also has consequences for the subsequent evaluation of the element "ele". Because we were previously only looking at line elements, we were only able to read the .startpoint property. There is now a common element and we need to check the type and the type line reading endpoints done by using .AsLineElement.
    Here is an example trying out the evaluation of the lines:

    Sub elementinfo()
    Dim ele As Element
    Dim Ee As ElementEnumerator
    Dim startpoint, endpoint As Point3d
    Dim topofLine, Line 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 ele = Ee.Current
     If ele.Type = msdElementTypeLine Then
       Line = ele.Type & ";From (xy) = " & ele.AsLineElement.startPoint.X & "," & ele.AsLineElement.startPoint.Y & ";"
       Line = Line & "After (xy) = " & ele.AsLineElement.EndPoint.X & "," & ele.AsLineElement.EndPoint.Y
       Print #1, Line
     End If
    Loop
    Close #1
    End Sub

    The result in excel might look something like this:

    Because LineStrings, text, circles, and other more complex elements are not yet considered, we will now add functionality for them.

    Because circles have no points on them, we will be reading the center and radius. We see here an ellipse here instead of a circle. In mathematics, a circle is just a special case of an ellipse, so therefore it can be treated as an ellipse. The VBA editor helps again here with the selection with a dropdown menu containing possible types of elements:

    The verification of the circuits might look like this:

     If ele.Type = msdElementTypeEllipse Then
     Line = ele.Type & ";Center (xy) = " & ele.AsEllipticalElement.CenterPoint.X & "," & ele.AsEllipticalElement.CenterPoint.Y & ";"
     Line = line & "; Radius ="  & ele.AsEllipticalElement.PrimaryRadius
     Print # 1, Line
     End If

    Here is the output I got when I added a circle to the drawing:

    Text elements would have additional data, such as the text height and the text itself. Here is a possible approach for retrieving data from text elements:

    If ele.Type = msdElementTypeText Then
     Line = ele.Type & ";Origin (xy) = " & ele.AsTextElement.Origin.X & "," & ele.AsTextElement.Origin.Y & ";"
     Line = line & "Height:"  & ele.AsTextElement.TextStyle.Height & ";"
     Line = line & "Text"  & ele.AsTextElement.Text
     Print # 1, Line
    End If

    Here is the output I got when I added a text file to the drawing:

    Before we turn to the next section with more complex data, here is a summary of the current approach:

    Sub elementinfo()
    Dim ele As Element
    Dim Ee As ElementEnumerator
    Dim startpoint, endpoint As Point3d
    Dim header, Line 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 ele = Ee.Current
     If ele.Type = msdElementTypeLine Then
     line = ele.Type & ";From (xy) = " & ele.AsLineElement.startPoint.X & "," & ele.AsLineElement.startPoint.Y & ";"
     line = line & "After (xy) = " & ele.AsLineElement.EndPoint.X & "," & ele.AsLineElement.EndPoint.Y
     Print #1, line
     End If
     If ele.Type = msdElementTypeEllipse Then
     line = ele.Type & ";Center (xy) = " & ele.AsEllipticalElement.CenterPoint.X & "," & ele.AsEllipticalElement.CenterPoint.Y & ";"
    line = line & "; Radius = " & ele.AsEllipticalElement.PrimaryRadius
     Print #1, line
     End If
     If ele.Type = msdElementTypeText Then
     line = ele.Type & ";Origin (xy) = " & ele.AsTextElement.Origin.X & "," & ele.AsTextElement.Origin.Y & ";"
     line = line & "Hoehe: " & ele.AsTextElement.TextStyle.Height & ";"
     line = line & "Text: " & ele.AsTextElement.Text
     Print #1, line
     End If
    Loop
    Close #1
    End Sub

    << RETURN TO PART 4 <<             >> CONTINUE TO PART 6 >>

    • Windows 7 32 bit
    • MicroStation
    • VBA
    • Windows 7 64 bit
    • Programming
    • en
    • 08.11.09.578
    • SELECTsupport
    • Share
    • History
    • More
    • Cancel
    • Tristan Anderson Created by Bentley Colleague Tristan Anderson
    • When: Mon, Jun 22 2015 1:13 PM
    • Tristan Anderson Last revision by Bentley Colleague Tristan Anderson
    • When: Mon, Jun 22 2015 1:21 PM
    • Revisions: 3
    • Comments: 0
    Recommended
    Related
    Communities
    • Home
    • Getting Started
    • Community Central
    • Products
    • Support
    • Secure File Upload
    • Feedback
    Support and Services
    • Home
    • Product Support
    • Downloads
    • Subscription Services Portal
    Training and Learning
    • Home
    • About Bentley Institute
    • My Learning History
    • Reference Books
    Social Media
    •    LinkedIn
    •    Facebook
    •    Twitter
    •    YouTube
    •    RSS Feed
    •    Email

    © 2021 Bentley Systems, Incorporated  |  Contact Us  |  Privacy |  Terms of Use  |  Cookies