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 2 - Reading 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 2 - Reading 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
       

     

    As a first task, we will want to retrieve the properties of some lines and to draw a few individual lines in the currently active model of your open DGN file. 
    Enter the following lines into the entry field for the VBA module:

    Sub  elementinfo ()
    Dim  ele As  Line Element
    Dim  Ee As  ElementEnumerator
    Dim  startpoint, endpoint As Point3D
    Set Ee = ActiveModelReference.GetSelectedElements
    Do While Ee.MoveNext
        If  Ee.Current.Type = msdElementTypeLine Then
            Set ele = Ee.Current.AsLineElement
            startpoint = ele.startPoint
            Endpoint = ele.EndPoint
            Debug.Print "Start point is (xyz): " & startpoint.X, startpoint.Y, startpoint.Z
            Debug.Print "Endpoint is (xyz):"  & endpoint.X, endpoint.Y, endpoint.Z
        End  If
    Loop
    End Sub

    There are only a few lines of code required to read the end points of all selected (method .GetSelectedElements) lines (type msdElementTypeLine) from the active model (Active Model Reference). 
    One essential component is the Ee enumerator object. You can imagine an enumerator as a pot containing an indefinite amount of elements that can be accessed by various methods. 
    By repeatedly applying the method .MoveNext, we can access each element of this set sequentially.
    This will continue until no more elements are left. To do this, we will use a "Do While", or a loop in which we access each item on the .Current method to pick out and examine each. Each lines has a beginning point, an end point, and x, y, and z coordinates. We will read them and print them in direct range.
    Changing window sizes in the editor might be something you would like to do to customize your VBA coding environment, like so:



    In the example above, I have chosen 2 lines before I started my subroutine. The coordinates of the start and end points have been printed in the "Immediate" window.
    Because doing this with a larger amount of elements can be tedious, it would be helpful to instead define a fence and only evaluate the content inside of the fence. This can be done with a small change as shown below:

    Sub  elementinfo ()
    Dim  ele As  Line Element
    Dim  Ee As ElementEnumerator
    Dim  startpoint, endpoint As  Point3D
    No  FNC As Fence
    Set fnc = ActiveDesignFile.Fence
    If Not fnc.IsDefined Then
     MsgBox "There was no fence defined" , vbCritical
     Exit Sub
    End If
    Set Ee = fnc.GetContents
    'Set Ee = ActiveModelReference.GetSelectedElements
    Do While Ee.MoveNext
        If  Ee.Current.Type = msdElementTypeLine Then
            Set ele = Ee.Current.AsLineElement
            startpoint = ele.startPoint
            Endpoint = ele.EndPoint
            Debug.Print "Startpoint is (xyz): " & startpoint.X, startpoint.Y, startpoint.Z
            Debug.Print "endpoint is (xyz):"  & endpoint.X, endpoint.Y, endpoint.Z
        End  If
    Loop
    End Sub

    An element type fence is used to evaluate the contents inside of a fence. Therefore, it is checked in advance to determine if a fence was ever created. If not, you will get a message (MsgBox) on the screen and the process will be terminated (Exit Sub).

    In the next section, we will generalize member selection by defining filter criteria and redirecting the output of the analysis to a file.

    << RETURN TO PART 1 <<              >> CONTINUE ON TO PART 3 >>

    • VBAWindows 7 32 bit
    • MicroStation
    • 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 12:47 PM
    • Tristan Anderson Last revision by Bentley Colleague Tristan Anderson
    • When: Mon, Jun 22 2015 12:55 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