Welcome to the world of MicroStation Python! This wiki will guide you through creating a Line element in MicroStation using Python.
Let us dive into creating a Line element program. Refer to the Python Manager wiki to create and load a python project. Name your project as "LineElement.py" and save it to your preferred directory. Open the project in the editor for writing your Python script.
The script begins by importing several modules offering functions and classes to interact with MicroStation and to create geometric elements.
from MSPyBentley import * from MSPyBentleyGeom import * from MSPyECObjects import * from MSPyDgnPlatform import * from MSPyDgnView import * from MSPyMstnPlatform import *
The main function of this script is createLine().
def createLine():
...
Let's break down its steps:
1. Active Model
A MicroStation session may access many models. The following script gets the Active Model Reference from a session.
ACTIVEMODEL = ISessionMgr.ActiveDgnModelRef if ACTIVEMODEL is None: return False
2. Get Units of Resolution per Storage
The following script, gets the UOR per Storage unit factor (Double value)
dgnModel = ACTIVEMODEL.GetDgnModel() modelInfo = dgnModel.GetModelInfo() mu = modelInfo.GetUorPerStorage()
3. Handle to Line element
Set a writeable "handle" to an MSElement.
line_eeh = EditElementHandle()
4. Line Coordinates
We define the start and end point coordinates for the Line element, using DPoint3d object. You can modify these values to create lines of different lengths and directions.
A DSegment3d object is created using the defined start and end points. This represents the actual line segment.
startPoint = DPoint3d(0, 0, 0) endPoint = DPoint3d(5 * mu, 5 * mu, 0) seg = DSegment3d(startPoint, endPoint)
5. Create Line Element
The Line element is created using the LineHandler.CreateLineElement() function. This function takes several parameters, that includes Line element handle, Line segments constituting Start and End point coordinates and the Model to which the Line element should be added.
The script includes error checking to ensure that the Line element is created successfully.
status = LineHandler.CreateLineElement(line_eeh, None, seg, ACTIVEMODEL.Is3d(), ACTIVEMODEL) if BentleyStatus.eSUCCESS != status: return False
6. Add Line Element to Model
The newly created Line element is added to the Model.
The script includes error checking to ensure that the Line element is successfully added to the model.
if BentleyStatus.eSUCCESS != line_eeh.AddToModel(): return False
The main() function simply calls the createLine() function and checks its return value. If the Line element creation fails, an error message is printed.
Here is the complete script.
from MSPyBentley import * from MSPyBentleyGeom import * from MSPyECObjects import * from MSPyDgnPlatform import * from MSPyDgnView import * from MSPyMstnPlatform import * # Create Line element function def createLine(): # Active Model Reference ACTIVEMODEL = ISessionMgr.ActiveDgnModelRef if ACTIVEMODEL is None: return False # Master Unit from DGN Model dgnModel = ACTIVEMODEL.GetDgnModel() modelInfo = dgnModel.GetModelInfo() mu = modelInfo.GetUorPerStorage() # Handle to line element line_eeh = EditElementHandle() # Set line coordinates startPoint = DPoint3d(0, 0, 0) endPoint = DPoint3d(5 * mu, 5 * mu, 0) # Line segements seg = DSegment3d(startPoint, endPoint) # Create line element status = LineHandler.CreateLineElement(line_eeh, None, seg, ACTIVEMODEL.Is3d(), ACTIVEMODEL) if BentleyStatus.eSUCCESS != status: return False # Add the line element to model if BentleyStatus.eSUCCESS != line_eeh.AddToModel(): return False return True # Main Function def main(): if True != createLine(): print("Could not create a Line element") PyCadInputQueue.SendKeyin("FIT VIEW EXTENDED") if __name__ == "__main__": main()
Select project "LineElement.py" from the Python Manager dialog and Run/Execute the python script.
Voila! A line element should be created in your active MicroStation model with the specified starting and ending points.
Extend the above code to set Line properties (Symbology) Level, Color, Weight and Style by exploring the delivered examples.
Happy coding!
Python: Documentation | API Presentations | FAQs | GitHub | Samples | Wikis | Blogs