起始轮廓是水平的,但是拉伸实体后变倾斜了没有设置自旋,为什么轮廓会出现旋转的现象呢?
4628.测试.dgn
看了一下您这个文件,拉伸的path这条线是不平的,您可以左右键同时按下去验证一下这条线上的点,Z值是不同的,所以拉伸出来的体也是不平。
是这样的,这个本身就是一个三维曲线,我是想问,设置了法线对齐,为什么最后还是会有一个旋转呢?这样不符合需求,我希望箱涵的截面是永远对齐这根三维直线的
廊道就是我说的这个逻辑,虽然是三维路线,但是永远保证截面垂直于路线。但是廊道没法实现这里的转角,所以我才用这个沿曲线拉伸实体功能。但是很奇怪这里MS处理的逻辑是怎样的,会什么会产生这个旋转?
Yongan.Fu 符老师,麻烦您也看看呢
你轮廓的法向是否与路径起点的切向方向完全一致?
是的,起点处是完全一致的,您可以验证一下
起点处轮廓底面两侧的点的高程都是130.3,末端轮廓底面两侧的高程分别为131.242和131.358,确实发生了微小的扭转。
能否仅提供一个含有轮廓GroupHole和路径LineString的简单DGN文件?我编程测试一下轮廓的法向是否和LineString起点处的切向完全相同。有可能存在小数点后很多位的不同而导致了末端很微小的误差。
测试 - 副本.dgn
主要想知道这个功能程序怎么去考虑的,很偶然发现的这个问题,目前还不好解决,只能靠编程嘛?
主要这种非常细微的差别不靠编程去提取这两个矢量很难通过肉眼去看到不同。我写了如下提取代码,能看到提取出的轮廓的法向确实和路径起点的切向量不相同。
void checkProfileandPathDirection() { ElementHandle profileElem(9108L, ACTIVEMODEL); CurveVectorPtr pCurve1 = ICurvePathQuery::ElementToCurveVector(profileElem); DPoint3d centroid; DVec3d normal; double area; pCurve1->CentroidNormalArea(centroid, normal, area); PointFormatterPtr ptFormat = PointFormatter::Create(); mdlDialog_dmsgsPrint(ptFormat->ToString(normal).GetWCharCP()); ElementHandle pathElem(9045L, ACTIVEMODEL); CurveVectorPtr pCurve2 = ICurvePathQuery::ElementToCurveVector(pathElem); DPoint3d pointA, pointB; DVec3d tangentA, tangentB; pCurve2->GetStartEnd(pointA, pointB, tangentA, tangentB); mdlDialog_dmsgsPrint(ptFormat->ToString(tangentA).GetWCharCP()); }
输出结果如下,很明显能看到z坐标分量是不同的。