2020/07/29
3D符号开发常用概念和造型方法总结
注意注意!预警,本篇纯理论介绍,较为枯燥无聊晦涩!!!
Position,坐标,这个应该都知道,比较简单
Vector,向量,稍微抽象点了,
- 法向量,XXX.Normal
- 求A点到B点的向量,Point(Pos)B.Substract(Point(Pos)A)
- 求向量的长度,Vector.Length
- 求向量A在某个面上的投影向量:VectorA.ProjectVectorToPlane(planeNormal as Vector)
- 求两个向量的正交向量:Vector1.Cross(Vector2),得出的结果是里面向量(食指)的右手法则的大拇指向量
Matrix4x4,坐标系矩阵,这个就更抽象了,不过我们可以简单把它理解成一个带有若干属性的坐标系,可以使用Get或Set获取或设置它的这些属性。
- 设置坐标系的XY轴方向,oMatrix.SetOrientation(vectorX, vectorY)
- 设置坐标系原点,以及XY轴方向,oMatrix.Set(Pos, VectorX, VectorY)
- 沿某个垂直轴旋转坐标系,oMatrix.Rotate(dAngle, normVector)
- 沿某个垂直轴,某个原点坐标旋转坐标系,oMatrix.Rotate(dAngle, normVector, posCenter)
- 沿某个向量移动坐标系,oMatrix.Translate(Vector)
- 转换坐标系,oMatrix.Transform(Position)/(Vector)
Geometry3D下面有几大类构造外形的基类:
Point3d:构造点 接口:IPoint;
Curve3d:构造线 接口:ICurve;
Surface3d:构造面 接口:ISurface;GeometryPart:暂时没接触过
Point3d,点,比较简单,有现成的示例代码,这里举几个经常会用到的方法
- 某点延某向量便宜得到另一点,向量需要赋值长度,Point2 = Point1.Offset(Vector1)
- 求两点直线距离,Pos1.DistanceToPoint(Pos2)
- 点到面的垂直投影,
Curve3d和Surface3d下面的子类比较多,常用的介绍一下。
Curve3d下面有:
- New Line3D(Pos1, Pos2)
- New Arc3d(Pos1, Pos2, Pos3) New Arc3d(posCenter, vecNorm, posStart, posEnd)
- New Circle3d(Pos1, Pos2, Pos3) New Circle3d(posCenter, vecNorm, Radius)
- New Ellipse3d(psCenter, vecNorm, vecMajorAxis, dMinorMajorRatio),这个构造椭圆的方法里并没有指定任何一个半径,难道长半径直接取用长向量的长度?
- New EllipticalArc3d(psCenter, vecNorm, vecMajorAxis, dMinorMajorRatio, StartAngle, SweepAngle)
- New LineString3d(oCollPos)给多个点,直线相连,即多段线
- New ComplexString3d(OccurrenceConn, oCurves)复杂线集合
Surface3d下面有:
- New Plane3d(Pos1, Pos2, Pos3) 三点确定一面, New Plane3d(posPt, vecNorm)垂直向量加面上的一个点, New Plane3d(ComplexString3d)一个平面上的复杂线集合(非简单直线)
- New Cone3d(posBaseCenter, posTopCenter, posBaseStart, posTopStart, bSolid)圆锥体绘制,确定中轴,四个点定一个面绕中轴旋转
- New Sphere3d(posCenter, dRadius, bSolid)画球,圆心,半径,很简单的造型
- New Projection3d(GenCurve, vecProjDir, dLength, bCapped) 拉伸
- New Revolution3d(oArc3d_1, oVecAxis, oPosCenter, dSweepAngle, bCapped) 旋转
- New Ruled3d(GenCurveBase, GenCurveTop, bCapped)两个线集合之间放样,这个方法对两个线集合有一定要求,使用时候需要注意,不是任意两个线集合都能放样成功
- Surface3d.GetSweepSurfacesFromCurve,扫略,不做过多讲解,参见自带帮助文档
- Surface3d.GetSweepSurfacesFromPlane,扫略,不做过多讲解,参见自带帮助文档
以上概念均属于CommonMiddle这个API,还有我们在创建符号的时候引用的一个必须的API叫CommonSymbolFunctions,这里面有一个Graphics3d类,里面几乎包含了上面我们所介绍到的所有造型方法,各位也可以通过Graphics.CreateXXX来实现造型。
我上面讲解的有些东西其实自己也不能确保百分百熟练使用,当你对某个造型方法或概念不是很确定的时候,记住一个万能的定律:试一下!
后序:大家通过上面的类和方法能看出,3D里基本上涉及到点,线,面,三种概念,而并没有涉及到实体,而且我们经常看到某些方法里会带有一个Capped的开关设置(即是否封闭),由此可见,3D里面的造型基本构成为各种点线面,而并没有真正意义上的实体。
太麻烦了 不能用solidedge吗 我们用户哪懂这些 开玩笑的吗
这篇不是给普通用户看的,是给对符号开发有兴趣有一定开发基础的人看的。开篇已经说了比较晦涩。
你想自定义符号,也可以通过SolidEdge,还可以通过一款收费的软件叫Caxperts的,他们都属于可视化的符号创建,但也都需要一些设置和步骤,造型,参数,表格,导入都是少不了的。
你这就说的不对了 我们公司也有懂编程的 但是懂编程的不懂化工 懂化工的不懂编程 会电脑的做出来的东西不好用 我们知道怎么好用的人又不会做 所以只有软件足够简单才能解决这个问题 似乎鹰图公司只是活在自己世界里 完全不知道我们什么情况呢 难道老美个个都是 电脑化工双学位的
你对鹰图的观点基本上是正确的,所以管理员的含金量会更高。普通使用人员和管理员之间的差距才会这么大。而管理员的水平高低也会参差不齐,高级管理员掌握二次开发是最起码的。至于这个管理员是从专业出身,还是IT出身,都不重要了,对需求的理解才是最重要的。
就算sp3d我玩转了 还有spf这个东西百分之百是it在控制 但是那些不懂化工的人根本没办法对于各个项目实际需要对种子文件进行立刻有效修改 都是事先花大量时间去做种子文件 做出来的还都带点毛病 然后就再也不让动了