LinearElement 是Linear Geometry SDK中所有线性几何类的基类,提供了线性几何的常用操作函数,集体内容如下:
1.修剪和延长类函数:ExtendXXX 和 ExtendOrTrimXXX
ExtendBeginByLineOrTrim :通过直线修补方式延长或修剪曲线的起始端;
代码如下:
LinearElement ExtendBeginByLineOrTrim_Demo(LinearElement sourceLinear)
{
LinearElement resultLinear = null;
double extTrimLength = 100;
resultLinear = sourceLinear.ExtendBeginByLineOrTrim(extTrimLength);
return resultLinear;
}
参数含义:变量extTrimLength 如果为正,对路线起始位置进行延长,变量extTrimLength 为负值,则对路线起始位置进行剪切。
ExtendOrTrimBegin:按长度延长或修剪曲线的起始端;
代码如下:
LinearElement ExtendOrTrimBegin_Demo(LinearElement sourceLinear)
{
LinearElement resultLinear = null;
double extTrimLength = -100;
resultLinear = sourceLinear.ExtendOrTrimBegin(extTrimLength);
return resultLinear;
}
参数含义:extTrimLength 如果为正,对路线起始位置进行延长,变量extTrimLength 为负值,则对路线起始位置进行剪切。
ExtendOrTrimBeginByParameter :通过沿路线参数(系数)延长或修剪曲线的起始端;
代码如下:
LinearElement ExtendOrTrimBeginByParameter_Demo(LinearElement sourceLinear)
{
LinearElement resultLinear = null;
double parameter = 100;
resultLinear = sourceLinear.ExtendOrTrimBeginByParameter(parameter);
return resultLinear;
}
参数含义:extTrimLength 如果为正,对路线起始位置进行延长,变量extTrimLength 为负值,则对路线起始位置进行剪切。
ExtendOrTrimBeginByPoint:将曲线起始端延长或修剪到指定的点;
代码如下:
LinearElement ExtendOrTrimBeginByPoint_Demo(LinearElement sourceLinear)
{
LinearElement resultLinear = null;
//DPoint3d extPoint = new DPoint3d(11094.0, 4358.0);
DPoint3d extPoint = new DPoint3d(8649.0, 1545.0);
resultLinear = sourceLinear.ExtendOrTrimBeginByPoint(extPoint);
return resultLinear;
}
参数含义:extPoint为剪切点,如果点与路线的垂足在路线范围内,则对路线起始位置进行剪切,如果点与路线的垂足在路线范围外,则对路线起始位置进行延长。
ExtendEndByLineOrTrim:通过直线修补方式延长或修剪曲线的终止端;
代码如下:
LinearElement ExtendEndByLineOrTrim_Demo(LinearElement sourceLinear)
{
LinearElement resultLinear = null;
double extTrimLength = 100;
resultLinear = sourceLinear.ExtendEndByLineOrTrim(extTrimLength);
return resultLinear;
}
参数含义:extTrimLength 如果为正,对直线终止位置进行延长,变量extTrimLength 为负值,则对直线起始位置进行剪切。
ExtendOrTrimEnd:按长度延长或修剪曲线的终止端;
代码如下:
LinearElement ExtendOrTrimEnd_Demo(LinearElement sourceLinear)
{
LinearElement resultLinear = null;
double extTrimLength = -100;
resultLinear = sourceLinear.ExtendOrTrimEnd(extTrimLength);
return resultLinear;
}
参数含义:extTrimLength 如果为正,对路线终止位置进行延长,变量extTrimLength 为负值,则对路线终止始位置进行剪切。
ExtendOrTrimEndByParameter:通过沿路线参数(系数)延长或修剪曲线的终止端;
代码如下:
LinearElement ExtendOrTrimEnd_Demo(LinearElement sourceLinear)
{
LinearElement resultLinear = null;
double extTrimLength = -100;
resultLinear = sourceLinear.ExtendOrTrimEnd(extTrimLength);
return resultLinear;
}
参数含义:变量extTrimLength 如果为正,对路线终止位置进行延长,变量extTrimLength 为负值,则对路线终止始位置进行剪切。
ExtendOrTrimEndByPoint:将曲线终止端延长或修剪到指定的点;
代码如下:
LinearElement ExtendOrTrimEndByPoint_Demo(LinearElement sourceLinear)
{
LinearElement resultLinear = null;
//DPoint3d extPoint = new DPoint3d(11094.0, 4358.0);
DPoint3d extPoint = new DPoint3d(13419.0, 6691.0);
resultLinear = sourceLinear.ExtendOrTrimEndByPoint(extPoint);
return resultLinear;
}
参数含义:extPoint为剪切点,如果点与路线的垂足在路线范围内,则对路线终止位置进行剪切,如果点与路线的垂足在路线范围外,则对路线终止位置进行延长。
注:红色路线为原始线形,白色为红色路线水平方向平移100主单位(米)并且延长/截取后的线形。具体代码如下:
DTransform3d tra3d = new DTransform3d(1, 0, 0, 100, 0, 1, 0, 0, 0, 0, 1, 0);
resultLinear = resultLinear.Transform(tra3d);
2.距离计算和转换函数:GetChordXXX , GetDistanceAlongXXX ,
GetChordDistanceFromDistanceAlong:将曲线距离值转换为弦距离值;
代码如下:
public static double GetChordDistanceFromDistanceAlong_Demo(LinearElement sourceLinear)
{
double distance = 100;
double chordDistance = 0;
chordDistance = sourceLinear.GetChordDistanceFromDistanceAlong(distance);
return chordDistance;
}
参数含义:distance变量代表需要转换的距离值。
GetChordDistanceFromParameter:将参数值转换为弦距离值;
代码如下:
public static double GetChordDistanceFromParameter_Demo(LinearElement sourceLinear)
{
double parameter = 0.1;
double chordDistance = 0;
chordDistance = sourceLinear.GetChordDistanceFromParameter(parameter);
return chordDistance;
}
参数含义:parameter,[0-1]之间的值,代码所要获取点距起始点的距离与整条线形长度的比值。
GetDistanceAlongFromChordDistance:将曲线弦距离距离值转换为距离值;
代码如下:
public static double GetDistanceAlongFromChordDistance_Demo(LinearElement sourceLinear)
{
double chordDistance = 100;
double distanceAlong = 0;
distanceAlong = sourceLinear.GetDistanceAlongFromChordDistance(chordDistance);
return distanceAlong;
}
参数含义:chordDistance变量代表需要转换的弦距离值。
GetLength:获取曲线长度。
代码如下:
public static double GetLength_Demo(LinearElement sourceLinear)
{
double ptToPtTolerance = 0.001;
double length = 0;
length = sourceLinear.GetLength(ptToPtTolerance);
return length;
}
参数含义: ptToPtTolerance为最小精度的设置值。
3.点的计算函数:GetPointXXX ,StrokeXXX, ProjectPointXXX
GetPointAtDistanceOffset:根据距离值和偏移值获取点;
代码如下:
LinearPoint GetPointAtDistanceOffset_Demo(LinearElement sourceLinear)
{
LinearPoint resultPoint = null;
double distance = 100;
double offset = 100;
resultPoint = sourceLinear.GetPointAtDistanceOffset(distance, offset);
CreateElement.BuildPoint(resultPoint.Coordinates);
return resultPoint;
}
参数含义:distance,所要计算的点与线形的起始点的距离,offset 的值为正值时向右偏移,为负值时向左偏移。
GetPointAtParameterOffset:根据参数值和偏移值获取点;
代码如下:
LinearPoint GetPointAtParameterOffset_Demo(LinearElement sourceLinear)
{
LinearPoint resultPoint = null;
double parameter = 0.1;
double offset = 100;
resultPoint = sourceLinear.GetPointAtParameterOffset(parameter, offset);
CreateElement.BuildPoint(resultPoint.Coordinates);
return resultPoint;
}
参数含义:parameter,[0-1]之间的值,代码所要获取点距起始点的距离与整条线形长度的比值,offset 的值为正值时向右偏移,为负值时向左偏移。
ProjectPointOnPerpendicular:根据已知点计算到路线的铅直投影点;
代码如下:
LinearPoint ProjectPointOnPerpendicular_Demo(LinearElement sourceLinear)
{
LinearPoint resultPoint = null;
DPoint3d point = new DPoint3d(0, 0, 0);
resultPoint = sourceLinear.ProjectPointOnPerpendicular(point);
CreateElement.BuildPoint(resultPoint.Coordinates);
return resultPoint;
}
参数含义:point为已知点。
ProjectPointOnSkew:根据已知点,倾角及偏移值计算投影点
代码如下:
LinearPoint ProjectPointOnSkew_Demo(LinearElement sourceLinear)
{
LinearPoint resultPoint = null;
DPoint3d point = new DPoint3d(0, 0, 0);
double skewAngle = 3.14 / 2;
double offset = 100;
resultPoint = sourceLinear.ProjectPointOnSkew(point, skewAngle, offset);
CreateElement.BuildPoint(resultPoint.Coordinates);
return resultPoint;
}
参数含义:point为已知点,skewAngle 为斜交角度,offset为偏移距离当为正值时向右偏移,为负值时向左偏移。
ProjectPointOnTangent:根据已知点计算切点;
代码如下:
LinearPoint ProjectPointOnTangent_Demo(LinearElement sourceLinear)
{
LinearPoint resultPoint = null;
DPoint3d point = new DPoint3d(0, 0, 0);
resultPoint = sourceLinear.ProjectPointOnTangent(point);
CreateElement.BuildPoint(resultPoint.Coordinates);
return resultPoint;
}
参数含义:point为已知点,
StrokeByChord:根据弦距离获取点集;
代码如下:
LinearPointCollection StrokeByChord_Demo(LinearElement sourceLinear)
{
LinearPointCollection resultPoints = null;
double chordTolerance = 100;
resultPoints = sourceLinear.StrokeByChord(chordTolerance);
foreach(LinearPoint resultPoint in resultPoints)
{
CreateElement.BuildPoint(resultPoint.Coordinates);
}
return resultPoints;
}
参数含义:chordTolerance为弦距离,resultPoints为返回点集。
StrokeByConnectionPoints:根据连接点类型获取点集;
代码如下:
LinearPointCollection StrokeByConnectionPoints_Demo(LinearElement sourceLinear)
{
LinearPointCollection resultPoints = null;
ConnectionPointTypes types = ConnectionPointTypes.Spiral_Line;
resultPoints = sourceLinear.StrokeByConnectionPoints(types);
foreach (LinearPoint resultPoint in resultPoints)
{
CreateElement.BuildPoint(resultPoint.Coordinates);
}
return resultPoints;
}
参数含义:types为弦连接点类型,resultPoints为返回点集。
StrokeByDistances:根据距离获取点集;
代码如下:
LinearPointCollection StrokeByDistances_Demo(LinearElement sourceLinear)
{
LinearPointCollection resultPoints = null;
double[] distances = { 0.0, 100.0, 1000.0 };
resultPoints = sourceLinear.StrokeByDistances(distances);
foreach (LinearPoint resultPoint in resultPoints)
{
CreateElement.BuildPoint(resultPoint.Coordinates);
}
return resultPoints;
}
参数含义:distances为点与线形的起始点之间的距离,resultPoints为返回点集。
StrokeByEndPoints:获取路线的起终点集合;
代码如下:
LinearPointCollection StrokeByEndPoints_Demo(LinearElement sourceLinear)
{
LinearPointCollection resultPoints = null;
resultPoints = sourceLinear.StrokeByEndPoints();
foreach (LinearPoint resultPoint in resultPoints)
{
CreateElement.BuildPoint(resultPoint.Coordinates);
}
return resultPoints;
}
参数含义:resultPoints为返回点集。
StrokeByStep:根据增加值或者等距离值获取点集;
代码如下:
LinearPointCollection StrokeByStep_Demo(LinearElement sourceLinear)
{
LinearPointCollection resultPoints = null;
DPoint3d extPoint = new DPoint3d(0, 0);
double stepValue = 0;
StrokingByStepMethod stepMetho = StrokingByStepMethod.EqualDistance;
resultPoints = sourceLinear.StrokeByStep(stepValue, stepMetho);
foreach (LinearPoint resultPoint in resultPoints)
{
CreateElement.BuildPoint(resultPoint.Coordinates);
}
return resultPoints;
}
参数含义:resultPoints为返回点集。
4.求交和偏移函数:Intersect ,XXXOffsetElement,
Intersect:获取当前曲线与其它线的交点集;
代码如下:
LinearIntersectionCollection Intersect_Demo(LinearElement sourceLinear)
{
LinearIntersectionCollection resultPoints = null;
DPoint3d origin = new DPoint3d(12419.0, 0, 0);
DVector3d vect = new DVector3d(0, 100000, 0);
resultPoints = sourceLinear.Intersect(origin, vect);
foreach (LinearPoint resultPoint in resultPoints)
{
CreateElement.BuildPoint(resultPoint.Coordinates);
}
return resultPoints;
}
参数含义:origin为与当前曲线相交直线的起始点,vect为向量。
GetOffsetElement:获取当前曲线的偏移线;
代码如下:
LinearElement GetOffsetElement_Demo(LinearElement sourceLinear)
{
LinearElement resultLinear = null;
double offset = 100;
resultLinear = sourceLinear.GetOffsetElement(offset);
return resultLinear;
}
参数含义:offset为偏移值,返回值为LinearElement 。
GetPartialByDistances:从曲线上截取指定参数区间内的子曲线段;
代码如下:
LinearElement GetPartialByDistances_Demo(LinearElement sourceLinear)
{
LinearElement resultLinear = null;
double startDistance = 500;
double endDistance = 3000;
resultLinear = sourceLinear.GetPartialByDistances(startDistance, endDistance);
return resultLinear;
}
参数含义:startDistance为起始距离,endDistance为终止距离。
5.其他
CreateFromCurveVector:通过MS的曲线类创建;
代码如下:
protected LinearElement CreateFromCurveVector_Demo(LinearElement sourceLinear)
{
LinearElement resultLinear = null;
CurveVector curveVector;
curveVector = sourceLinear.GetCurveVector();
bool is3d = false;
resultLinear = LinearElement.CreateFromCurveVector(curveVector, is3d);
return resultLinear;
}
参数含义:curveVector为MS的曲线描述,is3d是否为三维曲线。
GetCurveVector:转换为MS的曲线类;
代码如下:
protected CurveVector GetCurveVector_Demo(LinearElement sourceLinear)
{
CurveVector cV;
cV = sourceLinear.GetCurveVector();
return cV;
}
参数含义:返回值cV为MS的曲线描述,
GetNativeElement:获得C++/CLI的对象;
GetCentroid:计算曲线所围成的区域的质心坐标;
代码如下:
protected DPoint3d GetCentroid_Demo(LinearElement sourceLinear)
{
DPoint3d resultPt;
double strokingTo = 0.01;
resultPt = sourceLinear.GetCentroid(strokingTo);
return resultPt;
}
参数含义:strokingTo为允许偏差,返回值resultPt 为质心坐标。
IsClosed:是否是封闭曲线;
代码如下:
protected bool IsClosed_Demo(LinearElement sourceLinear)
{
bool iIsClosed = false;
iIsClosed = sourceLinear.IsClosed();
return iIsClosed;
}
参数含义:返回值iIsClosed为bool变量。
ShallowCopy:浅拷贝;
代码如下:
protected LinearElement ShallowCopy_Demo(LinearElement sourceLinear)
{
LinearElement resultLinear = null;
resultLinear = sourceLinear.ShallowCopy();
return resultLinear;
}
参数含义:返回值为LinearElement 对象。
Transform:坐标变换;
代码如下:
protected LinearElement Transform_Demo(LinearElement sourceLinear)
{
LinearElement resultLinear = null;
//沿X轴正方向和Y轴负方向平移1000
DTransform3d tra3d = new DTransform3d(1, 0, 0, 1000, 0, 1, 0, -1000, 0, 0, 1, 0);
resultLinear = sourceLinear.Transform(tra3d);
CreateElement.DrawElementFromLinearElement(resultLinear);
return resultLinear;
}
参数含义:tra3d 为MS的DTransform3d 对象,
示例代码: