我一直以为vec0和vec90两个参数只是指定方向的,但是发现它们的大小还会影响半径,因为我半径已经赋值给radiu参数了,结果生成出来的圆柱体的半径大小不一,但是很明显跟圆柱体的高有相关性(因为我vec0和vec90的赋值涉及到圆柱体高)。
这里想问这两个参数跟半径有什么关系啊?
/// <summary> /// 已知两个端点和半径创建圆柱体。 /// </summary> /// <param name="bottomCenter">圆柱体底中心。</param> /// <param name="topCenter">圆柱体顶中心。</param> /// <param name="radius">半径。</param> /// <param name="m">当前模型空间。</param> /// <returns></returns> public static Element RunUor(DPoint3d bottomCenter, DPoint3d topCenter, double radius, DgnModel m) { DVector3d cylinderAxis = new DVector3d(bottomCenter, topCenter); DVector3d vec0 = DVector3d.CrossProduct(0, 0, 1, cylinderAxis.X, cylinderAxis.Y, cylinderAxis.Z); DVector3d vec90 = DVector3d.CrossProduct(vec0.X, vec0.Y, vec0.Z, cylinderAxis.X, cylinderAxis.Y, cylinderAxis.Z); Element cylinderElement = CreateCylinderElement(bottomCenter * TinyFunc.UorPerMeter(), topCenter * TinyFunc.UorPerMeter(), vec0, vec90, radius * TinyFunc.UorPerMeter(), m); return cylinderElement; } private static Element CreateCylinderElement(DPoint3d bottomCenter,DPoint3d topCenter,DVector3d vec0,DVector3d vec90,double radius,DgnModel m) { DgnConeDetail cone = new DgnConeDetail(bottomCenter, topCenter, vec0, vec90, radius, radius, true); SolidPrimitive solid = SolidPrimitive.CreateDgnCone(cone); Element solidElement = DraftingElementSchema.ToElement(m, solid, null); return solidElement; }
vector0确实会影响,如果不想受其影响的话,vector0,vector90都给一个单位向量即可。
MS学习资源:
MicroStation Wednesday视频分享
深入探讨MicroStation DGN基本概念系列
一步步学习MicroStation CE Addin开发
一步步学习MicroStation CE MDL开发
Answer Verified By: 巴燕 史