测量包括测量两个坐标点距离、坐标与平面的距离、两个几何实体的距离、两个节点的距离、两条直线的距离、两个固体的距离、三个坐标的角度、曲线的长度、面的面积、固体质量、网格量、面板截面属性、网格截面。
feMeasureDistance( p1, p2, dist )
其中p1和p2为Variant类型的长度为3的数组,为输入参数;dist为double类型的变量。
Sub Main
Dim App As femap.model
Set App = feFemap()
Dim p1(3) As Variant
Dim p2(3) As Variant
Dim dist As Double
p1(0)=0
p1(1)=0
p1(2)=0
p2(0)=2
p2(1)=0
p2(2)=0
rc=App.feMeasureDistance (p1,p2,dist)
MsgBox(Str$(dist))
End Sub
feMeasureDistanceToPlane( p1, planePt, planeNorm, dist )
其中p1为坐标,planePt为平面上的任意一点,planeNorm为面的法向 ,dist为输出变量,点与平面的距离值 。
Sub Main
Dim App As femap.model
Set App = feFemap()
Dim p1(3) As Variant
Dim p2(3) As Variant
Dim planeNorm(3) As Variant
Dim dist As Double
p1(0)=0
p1(1)=0
p1(2)=0
p2(0)=2
p2(1)=0
p2(2)=0
planeNorm(0)=-1
planeNorm(1)=0
planeNorm(2)=0
App.feMeasureDistanceToPlane( p1, p2, planeNorm, dist )
MsgBox(Str$(dist))
End Sub
feMeasureDistanceBetweenGeometry( enFromType, nFromSet, enToType, nToSet, bMinimum, nFromID, nToID, vFrom, vTo, dDistance )
其中前五个参数为输入参数,其他为输出参数。第一、二个参数分别为起点(第一个集合)的几何类型和ID,第三、四个参数为终点(第二个集合)的实体类型和ID,第五个参数指定测量的是最小值还是最大值。
这个方法涉及集合(Set)的概念,等后续分享Set概念以及集合的属性及方法后再回来看这个方法就很好理解了。
feMeasureDistanceBetweenNodes2( nFrom, nTo, nOutSetID, nOutVecID, nCSysID, vecBase, vecTip, vecDist, magDist )
其中前五个参数为输入,其他为输出参数。第一、二个参数为起点和终点的节点ID。第三、四个参数是用来控制测量时是否考虑变形后的节点之间的距离,具体的可见下图,第三个参数nOutSetID为包含节点变形结果的输出集合(Output Set)的ID,如果为0则会使用节点没有变形的位置,第四个参数nOutVecID为在nOutSetID中的输出向量 (Output Vector)的ID,同样,如果为0测量时不考虑变形。第五个参数指的是返回结果坐标系的ID,即你希望测量的距离是基于哪个坐标系。
下面以一个小例子说明:
建立一个简单的有限模型并求解除结果,具体信息如图所示。
Sub Main
Dim App As femap.model
Set App = feFemap()
Dim vecBase As Variant
Dim vecTip As Variant
Dim vecDist As Variant
Dim magDist As Double
rc=App.feMeasureDistanceBetweenNodes2(7,12,0,0,0,vecBase,vecTip,vecDist,magDist)
MsgBox(Str$(magDist))
rc=App.feMeasureDistanceBetweenNodes2(7,12,1,1,0,vecBase,vecTip,vecDist,magDist)
MsgBox(Str$(magDist))
End Sub
显然,第一次输出为1,是模型中节点7和节点12的真实距离,而第二次输出为1.713,显然是在受力变形 后两个节点的距离。
feMeasureDistanceBetweenLines( pA1, pA2, pB1, pB2, dist )
前四个参数为输入,最后一个参数为输出。pA1, pA2是第一条直线的首尾端点的坐标,pB1, pB2为第二条直线的坐标,最后参数dist为两条直线的最小距离。
坐标位置必须在相同的直角坐标 系统中,这个函数才能正常工作—最好在全局矩形中。如果最近的接近点在各区段的长度内,则最小距离将是垂直距离。如果不是,那么距离就是其中一个端点到另一条直线的距离。
feMeasureDistanceBetweenSolids( solidID1, solidID2, dist )
前两个参数分别为两个固体的id,dist为两个固体的最小距离值。
feMeasureAngle( center, p1, p2, angle )
该函数的功能是测量空间中三个坐标形成夹角角度的测量。
feMeasureAngleBetweenNodes( nVertex, nFrom, nTo, nOutSetID, nOutVecID, nCSysID, vecBase, vecNormal, magAngle )
参数的含义和作用和节点距离的测量函数 基本一致,不再赘述。
feMeasureCurve( curveSET, totalLength )
这个函数很简单,输入曲线的集合的ID,输出所有曲线的总长度。当然如果你只需要测量一条曲线的长度,那么输入的参数curveSET就不是集合的ID了,而是针对的曲线的ID的相反数(即-ID)。Femap API中有很多这样的做法,如果有多个对象则用集合的ID,如果只有一个对象,则输入对象ID的负值。
需要注意的是,这些曲线的总长度就是各个曲线的长度之和,它不考虑曲线中的任何重叠部分。
feMeasureSurfaceArea( surfaceSET, totalArea )
用法和曲线长度测量函数基本一致。
feMeasureSolidMassProp( solidID, area, volume, cg, inertia )
只需要输入固体的ID,通过该函数就可得到固体的表面积 、体积、重心坐标和3X3的惯性矩阵 。
feMeasureMeshMassProp( elemSET, csysID, printResults, printDetails, len, area, volume, structMass, nonstructMass, totalMass, structCG, nonstructCG, totalCG, inertia, inertiaCG )
第一个参数为单元的选择集合的ID,同样,若只有一个单元,则用单元ID的负值。第二个参数为计算基于的坐标系 的ID。第三、四个参数是控制是否需要将结果和细节打印出来。其他为输出参数,可查Help文档。
feMeasureSurfSectionProp( surfID, vecBase, vecDir, sectProp )
需要输入面的ID、方向向量(orientation vector)的原点坐标 和截面y轴的方向向量,计算出截面的属性sectProp。
feMeasureMeshSectionProp( elemSET, vecBase, vecDir, sectProp )
用法参考函数13。
需要注意的是所选择的单元都应该是平面单元 (planar elements)。