Bentley Communities
Bentley Communities
  • Site
  • User
  • Site
  • Search
  • User
  • Welcome
  • Products
  • Support
  • About
  • More
  • Cancel
MicroStation
  • Product Communities
  • More
MicroStation
MicroStation Wiki Calculating the range of Rotated Cells
    • 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 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

    You are currently reviewing an older revision of this page.

    • History View current version

    Calculating the range of Rotated Cells

       
      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
       

     Background Information
    To calculate the size of a cell (also reffered to as range), you can use the VBA property .Range.
    The datatype Range includes two points, typically the lower left and top right corners of the smallest rectangle enclosing the

    cell.
    This range can also be calculated in 3D analog. Although the following examples can also work in 3D, I have shown everything in 2D

    for illustrative purposes.
    Be aware that the range box of a given element is always orthogonal to the identify view and a rotated view will always

    show/calculate a rotated range block that will differ from the identity.

    Steps
    To demonstrate the problem, this example will show a simple profedure for non-rotated cells. Consider the following example with

    two cells with the names CellA and CellB:

    To determine the size of these cells, you can use the .Range property in a cell, as shown in an example below:

    Sub range_simple()
        Dim rangeBox As Range3d
        Dim Ee As ElementEnumerator
        Set Ee = ActiveModelReference.GraphicalElementCache.Scan
        Do While Ee.MoveNext
            If Ee.Current.Type = msdElementTypeCellHeader Then
                Debug.Print "Name of Cell: " & Ee.Current.AsCellElement.Name
                rangeBox = Ee.Current.AsCellElement.range
                Debug.Print "Width and Height: ", rangeBox.High.X - rangeBox.Low.X, rangeBox.High.Y - rangeBox.Low.Y
            End If
        Loop
    End Sub

    The issue is not shown here, as the two cells currentlyhave identical dimensions:

    If, however, one cell is rotated as shown below:

    The results of the calculation will be changed:

    The rotated cell now shows a different size from the .Range property. The reason, however, in the range calculation is shown below

    by the Keying "set range;Update1":

    To compensate for this error, you can simply turn the rotated cell back to its original position to calculate the size correctly.
    For this, I used the following example:

    Sub range_untwisted()
        Dim rangeBox As Range3d
        Dim Rotate As Matrix3d
        Dim transForm As Transform3d
        Dim Ee As ElementEnumerator
        Set Ee = ActiveModelReference.GraphicalElementCache.Scan
        Do While Ee.MoveNext
            If Ee.Current.Type = msdElementTypeCellHeader Then
                Debug.Print "Name of Cell: " & Ee.Current.AsCellElement.Name
                 
                'Cell untwisted examine:
                Rotate = Ee.Current.AsCellElement.Rotation
                Rooted = Matrix3dInverse(Roooted)
                transForm = Transform3dFromMatrix3dAndFixedPoint3d(Rotat, Ee.Current.AsCellElement.Origin)
                Ee.Current.AsCellElement.transForm transForm
                 
                rangeBox = Ee.Current.AsCellElement.range
                Debug.Print "Width and Height: ", rangeBox.High.X - rangeBox.Low.X, rangeBox.High.Y - rangeBox.Low.Y
            End If
    Loop
    End Sub

    First, the current rotation of the cell is read (.rotation), and the inverse matrix (Matrix3dInverse) is calculated to reverse the rotation.
    From the inverse matrix, we create a transformation (Transform3dFromMatrix3dAndFixedPoint3d) to use on the cell (.transform).
    When executing again, we get the same results as the first time:

    Interestingly, this has not changed the drawing itself, because the rotation of the cells was only carried out in memory.


     

    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