[MS EC] C++ CurveVectorPtr是否可以修改法向量?

各位老师

       在不同面进行平移和等间距缩小的时候,发现本来curve2 应该向内缩小并向上平移,但是现在却向外扩大....

   请问老师是这个curve2 法向量影响的吗?是否可以修改其法向量?

    EditElementHandle eeh(id, pActiveModel);

    CurveVectorPtr curve1 = ICurvePathQuery::ElementToCurveVector(eeh);

    CurveVectorPtr curve2 = curve1->Clone();

    CurveOffsetOptions offsetOption( - offset * uorPer);
    curve2 = curve2 ->CloneOffsetCurvesXY(offsetOption);

    trans = Transform::From(0, 0, thick * uorPer);
    curve2 ->TransformInPlace(trans);

    

Parents
  • 你可以先调用 CurveVector::CentroidNormalArea获得CurveVector的Normal(法向量),然后根据Normal的方向来设置offset的正负。



  • 根据CentroidNormalArea确实得到了Normal,顶面法向量(0,0,1)地面法向量(0,0,-1)。。请问符工是设置offsetOption正负?

  • 不好意思符工 我怀疑我是不是理解错了Face palm 

      CurveOffsetOptions offsetOption( offset * uorPer); offset根据右手定则确定正负 ; 那请问该如何确定这个面是等间距扩大的 还是缩小的呢?

  • 抱歉,是我没有表述清楚。我的意思应该是,可否根据这个Normal来确定正负值的外扩或内缩。

    比如,对于Normal为(0,0,1) 表示法向冲上的,则正值为外扩,负值为内缩。对于Normal为(0,0,-1) 表示法向冲下的,则负值值为外扩,正值为内缩。

    总之,自行找到一个规律来应用即可。



    Answer Verified By: 超 上官 

  • 哈哈哈哈 谢谢符工 按照您说的已经做出来了...谢谢0

    还有个问题 希望您能解答....想拾取一个面对他进行缩小,但是发现 如果这个面经过空间坐标原地(0,0,z)这个轴线,生成的面是扩展的,不经过这个轴线生成的面是缩小的。 请问老师 为什么相同的面 经过(0,0,z)这个轴线后会有这样的变化?? 附上代码 供您检查

    	MSElementDescrP orgEdP, newEdP;
    	mdlAssoc_getElementDescr(&orgEdP, NULL, id, ACTIVEMODEL, FALSE);
    	DPoint3d pt = DPoint3d::From(1, 0, 0);
    
    	double uorPer = ACTIVEMODEL->GetModelInfoCP()->GetUorPerStorage();
    	
    	if (flag)
    	{
    		mdlElmdscr_copyParallel(&newEdP, orgEdP, &pt, -distance * uorPer, NULL);//NULL  , DPoint3d dp = DPoint3d::From(0, 0, -1);  &dp
    	}
    	else
    	{
    		mdlElmdscr_copyParallel(&newEdP, orgEdP, &pt, distance * uorPer, NULL);//NULL , DPoint3d dp = DPoint3d::From(0, 0, -1);  &dp
    	}
    	
    	mdlElmdscr_add(newEdP);ElementId newid = newEdP->el.GetID();
    	mdlElmdscr_freeAll(&newEdP);

  • 我们前面一直在讨论用CurveVector,但你的代码怎么又改用老的mdlElmdscr_copyParallel了呢?这个函数中决定外扩和内缩是由第三个参数pt决定的。另外,你的flag又是怎么决定的呢?

    由于你对两个位置不同的矩形使用了相同的pt,那对于第一个矩形,pt可能在矩形外部,就是外扩,对于第二个矩形,pt可能是在矩形内部,就是内缩了。

    我们编程要善于找规律,我推测应该是这样的一个规律。没有编程亲测,需要你自己验证总结一下。

    【另外】:Ribbon界面中的图标做得超级棒,是专业人员绘制的还是你自己绘制的?



  • 好的 符工您的意思 我大概懂了... 是这样的我们设计人员给我们要求两种情况 一种提取shape或者complexShape 构建二次灌浆层,第二种 首先拾取实体,然后拾取实体上的某个面返回的是个CurveVector 在构建二次灌浆层。可能是编程习惯的问题吧 用了不同的方法....

    ps:界面图标是孙明伟 我们的孙工做的,做的非常棒吧 哈哈哈

Reply
  • 好的 符工您的意思 我大概懂了... 是这样的我们设计人员给我们要求两种情况 一种提取shape或者complexShape 构建二次灌浆层,第二种 首先拾取实体,然后拾取实体上的某个面返回的是个CurveVector 在构建二次灌浆层。可能是编程习惯的问题吧 用了不同的方法....

    ps:界面图标是孙明伟 我们的孙工做的,做的非常棒吧 哈哈哈

Children
No Data