欢迎来到MicroStation Python的世界!我们之前的文章探索了如何创建线(Line)和线串(Line String)元素。本文将深入研究使用Python在MicroStation中创建其它基本几何元素。
让我们深入探讨使用Python创建基本几何元素,如圆弧、圆、椭圆和形状。请参阅Python管理器文章以创建和加载Python项目。将项目命名为CreateBasicElements.py,并将其保存到任一目录中。在编辑器中打开项目以编写Python脚本。
该脚本首先导入几个模块,这些模块提供了与MicroStation交互和创建几何元素的函数和类。
from MSPyBentley import *
from MSPyBentleyGeom import *
from MSPyECObjects import *
from MSPyDgnPlatform import *
from MSPyDgnView import *
from MSPyMstnPlatform import *
createArcElement()函数为圆弧元素获取多个参数,包括基点、半径、旋转、起始角和扫掠角。它使用ArcHandler.CreateArcElement()方法创建具有这些参数的弧元素。该脚本包括错误检查,以确保弧元素成功创建并添加到模型中。
def createArcElement(basePoint, radius=100, rotation=math.pi/4,
startAngle=0, sweepAngle=math.pi/2):
global ACTIVEMODEL
arc_eeh = EditElementHandle()
axis1 = axis2 = radius
# Create Arc element
status = ArcHandler.CreateArcElement(arc_eeh, None, basePoint, axis1, axis2,
rotation, startAngle, sweepAngle,
ACTIVEMODEL.Is3d(), ACTIVEMODEL)
if BentleyStatus.eSUCCESS != status:
return False
# Add the Arc element to model
if BentleyStatus.eSUCCESS != arc_eeh.AddToModel():
return False
return True
createCircleElement()函数将基点和半径作为圆元素的参数。createEllipseElement()函数将基点、半径和旋转作为椭圆元素的参数。它们两个都使用EllipseHandler.CreateEllipseElement()方法来创建。脚本包括错误检查,以确保圆元素成功创建并添加到模型中。详细代码请见靠后的总代码部分。
createShapeElement()函数在给定的基点生成一个形元素。它定义并设置必要的坐标,然后使用ShapeHandler.CreateShapeElement()方法来创建形元素。该脚本包括错误检查,以确保成功创建形元素并将其添加到模型中。详细代码请见靠后的总代码部分。
main函数初始化当前模型并调用函数来创建几何元素。
下面是完整的脚本。
from MSPyBentley import *
from MSPyBentleyGeom import *
from MSPyECObjects import *
from MSPyDgnPlatform import *
from MSPyDgnView import *
from MSPyMstnPlatform import *
# Create Shape Element function
def createShapeElement(basePoint):
global ACTIVEMODEL
shape_eeh = EditElementHandle()
# Set Shape coordinates
offset = 150
points = DPoint3dArray()
points.append (DPoint3d (basePoint.x, basePoint.y, 0.0))
points.append (DPoint3d (basePoint.x + offset, basePoint.y, 0.0))
points.append (DPoint3d (basePoint.x + offset, basePoint.y + offset, 0.0))
points.append (DPoint3d (basePoint.x, basePoint.y + offset, 0.0))
points.append (DPoint3d (basePoint.x, basePoint.y, 0.0))
# Create Shape element
status = ShapeHandler.CreateShapeElement (shape_eeh, None, points,
ACTIVEMODEL.Is3d(), ACTIVEMODEL)
if BentleyStatus.eSUCCESS != status:
return False
# Add the Shape element to model
if BentleyStatus.eSUCCESS != shape_eeh.AddToModel():
return False
return True
# Create Ellipse Element function
def createEllipseElement(basePoint, radius=100, rotation=0):
global ACTIVEMODEL
ellipse_eeh = EditElementHandle()
axis2 = radius
axis1 = axis2 / 2
# Create Ellipse element
status = EllipseHandler.CreateEllipseElement(ellipse_eeh, None,
basePoint,
axis1, axis2,
rotation,
ACTIVEMODEL.Is3d(),
ACTIVEMODEL)
if BentleyStatus.eSUCCESS != status:
return False
# Add the Ellipse element to model
if BentleyStatus.eSUCCESS != ellipse_eeh.AddToModel():
return False
return True
# Create Circle Element function
def createCircleElement(basePoint, radius=50):
global ACTIVEMODEL
circle_eeh = EditElementHandle()
ell = DEllipse3d.FromCenterRadiusXY(basePoint, radius)
# Create Ellipse element
status = EllipseHandler.CreateEllipseElement(circle_eeh, None, ell,
ACTIVEMODEL.Is3d(),
ACTIVEMODEL)
if BentleyStatus.eSUCCESS != status:
return False
# Add the Ellipse element to model
if BentleyStatus.eSUCCESS != circle_eeh.AddToModel():
return False
return True
# Create Arc Element function
def createArcElement(basePoint, radius=100, rotation=math.pi/4,
startAngle=0, sweepAngle=math.pi/2):
global ACTIVEMODEL
arc_eeh = EditElementHandle()
axis1 = axis2 = radius
# Create Arc element
status = ArcHandler.CreateArcElement(arc_eeh, None, basePoint, axis1, axis2,
rotation, startAngle, sweepAngle,
ACTIVEMODEL.Is3d(), ACTIVEMODEL)
if BentleyStatus.eSUCCESS != status:
return False
# Add the Arc element to model
if BentleyStatus.eSUCCESS != arc_eeh.AddToModel():
return False
return True
# Main function
def main():
# Global variable declaration
global ACTIVEMODEL
# Get the active DGN model reference
ACTIVEMODEL = ISessionMgr.ActiveDgnModelRef
if ACTIVEMODEL is None:
return
if True != createArcElement(DPoint3d(0, 0, 0)):
print("Create Arc element failed...")
if True != createCircleElement(DPoint3d(200, 0, 0)):
print("Create Circle element failed...")
if True != createEllipseElement(DPoint3d(400, 0, 0)):
print("Create Ellipse element failed...")
if True != createShapeElement(DPoint3d(600, -75, 0)):
print("Create Shape element failed...")
PyCadInputQueue.SendKeyin("FIT VIEW EXTENDED")
if __name__ == "__main__":
main()
从Python管理器对话框中选择项目CreateBasicElements.py,并运行/执行Python脚本。
瞧!圆弧、圆、椭圆和形元素已成功创建并添加到MicroStation当前模型中了。
通过参考提供的示例和文档增强上述代码,为封闭元素添加填充属性。
祝您编码愉快!