预警!本篇纯理论介绍,较为枯燥无聊晦涩!

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里面的造型基本构成为各种点线面,而并没有真正意义上的实体。

您需要登录 或注册 后才可以发表评论。