Option Explicit
Function ChangeToSolid(shapePoints() As Point3d, forwardLen As Double, backwardLen As Double) As SmartSolidElement Dim base As ShapeElement
Set base = Application.CreateShapeElement1(Nothing, shapePoints) Dim ConeSurface1 As SmartSolidElement Dim ConeSurface2 As SmartSolidElement Dim tempE As ElementEnumerator Set ConeSurface1 = SmartSolid.ExtrudeClosedPlanarCurve(base, forwardLen, 0, True) Set ConeSurface2 = SmartSolid.ExtrudeClosedPlanarCurve(base, 0, -backwardLen, True) Set ChangeToSolid = SmartSolid.SolidUnion(ConeSurface1, ConeSurface2) End FunctionFunction FinallSolid(CenterPoint As Point3d, ByVal BottomLen As Double, ByVal BottomWid As Double, ByVal HeightLen As Double, ByVal TopLen As Double, ByVal TopWidth As Double) As SmartSolidElement Dim PointList(4) As Point3d Dim upNum As SmartSolidElement Dim rightNum As SmartSolidElement
PointList(0) = Point3dFromXYZ(CenterPoint.x + BottomLen / 2, CenterPoint.Y, CenterPoint.Z) PointList(1) = Point3dFromXYZ(CenterPoint.x - BottomLen / 2, CenterPoint.Y, CenterPoint.Z) PointList(2) = Point3dFromXYZ(CenterPoint.x - TopLen / 2, CenterPoint.Y, CenterPoint.Z + HeightLen) PointList(3) = Point3dFromXYZ(CenterPoint.x + TopLen / 2, CenterPoint.Y, CenterPoint.Z + HeightLen) PointList(4) = Point3dFromXYZ(CenterPoint.x + BottomLen / 2, CenterPoint.Y, CenterPoint.Z) If TopWidth > BottomWid Then Set upNum = ChangeToSolid(PointList, TopWidth / 2 + 1, (TopWidth / 2)) Else Set upNum = ChangeToSolid(PointList, BottomWid / 2 + 1, (BottomWid / 2)) End If PointList(0) = Point3dFromXYZ(CenterPoint.x, CenterPoint.Y + BottomWid / 2, CenterPoint.Z) PointList(1) = Point3dFromXYZ(CenterPoint.x, CenterPoint.Y - BottomWid / 2, CenterPoint.Z) PointList(2) = Point3dFromXYZ(CenterPoint.x, CenterPoint.Y - TopWidth / 2, CenterPoint.Z + HeightLen) PointList(3) = Point3dFromXYZ(CenterPoint.x, CenterPoint.Y + TopWidth / 2, CenterPoint.Z + HeightLen) PointList(4) = Point3dFromXYZ(CenterPoint.x, CenterPoint.Y + BottomWid / 2, CenterPoint.Z) If TopLen > BottomLen Then Set rightNum = ChangeToSolid(PointList, (TopLen / 2 + 1), (TopLen / 2)) Else Set rightNum = ChangeToSolid(PointList, (BottomLen / 2 + 1), (BottomLen / 2)) End If Set FinallSolid = SmartSolid.SolidIntersect(upNum, rightNum) Application.ActiveModelReference.AddElement FinallSolidEnd Function
不应该呀,是否您的Default模型是三维(3D)的,而其他的模型不小心创建为二维(2D)的了?这些SmartSolid对象必须在三维模型下才能工作。
我看了一下,模型都是3D的,种子文件是代码获取的
tempSeedName = ActiveWorkspace.ExpandConfigurationVariable("$(MS_SEEDFILES)3dMetricGeneral.dgn")
这是安装目录下SmartSolidAPIExamples找到的方法和属性!会不会和SmartSolidAPIExamples有关
请问您的Mstn软件版本是什么?V8i的还是CE的?可否先将所有变量和函数名改成英文再试一下?如果还是不行,请将您测试用的DGN发上来我们帮您测试一下。
我用的是CE的版本,V8i上面也试了一下!V8i上试也有问题但没细究!按您的指示换成英文后依旧会卡死弹出log反馈的窗口!我现在把我的DGN发您邮箱上吧!
请同时把调用这两个Function的代码也发过来。