你好,我有一些麻烦旋转一个身体围绕部分轴。我的rootComp中有两个主体,我想旋转第二个主体。我已经尝试了几个小时,现在我无法让这个工作。有人知道我错过了什么吗:下面是代码:
//为move创建一个实体集合Ptr BRepBodies = rootComp-> BRepBodies ();if (!brepBodies)返回false;Ptr BRepBody = brepBodies->item(1);if (!brepBody)返回false;Ptr entities1 = adsk::core::ObjectCollection::create();If (!entities1)返回false;entities1 - >添加(brepBody);//创建一个transform来做移动Ptr transform = adsk::core::Matrix3D:: Create ();//转换角度->弧度双角度1 = (90 * M_PI / 180.0);transform->setToRotation(angle1, rootComp->xConstructionAxis()->geometry(), rootComp->originConstructionPoint()->geometry()); // Create a move feature Ptr moveFeats = features->moveFeatures(); if (!moveFeats) return false; Ptr moveFeatureInput = moveFeats->createInput(entities1, transform); if (!moveFeatureInput) return false; Ptr moveFeature = moveFeats->add(moveFeatureInput); if (!moveFeature) return false;
解决了!转到解决方案。
看来问题出在
transform->setToRotation(angle1, rootComp->xConstructionAxis()->geometry(), rootComp->originConstructionPoint()->geometry());
这里的第二个参数应该是Vector3D,但目前它是infiniteLine3D,这是它不能工作的原因
我对代码做了一点改动
Ptr vec = adsk::core::Vector3D::create(1,0,0);transform->setToRotation(angle1, vec, rootComp->originConstructionPoint()->geometry());
这应该能解决问题
运行你的c++代码@boopathi.sivakumar的建议如下:
//为move创建一个实体集合Ptr BRepBodies = rootComp-> BRepBodies ();if (!brepBodies)返回false;Ptr BRepBody = brepBodies->item(0);if (!brepBody)返回false;Ptr entities1 = adsk::core::ObjectCollection::create();If (!entities1)返回false;entities1 - >添加(brepBody);//创建一个transform来做移动Ptr transform = adsk::core::Matrix3D:: Create ();//转换角度->弧度双角度1 = (90 * M_PI / 180.0);transform->setToRotation(angle1, adsk::core::Vector3D::create(1,0,0), rootComp->originConstructionPoint()->geometry()); // Create a move feature Ptr moveFeats = features->moveFeatures(); if (!moveFeats) return false; Ptr moveFeatureInput = moveFeats->createInput(entities1, transform); if (!moveFeatureInput) return false; Ptr moveFeature = moveFeats->add(moveFeatureInput); if (!moveFeature) return false;
现在圆筒旋转了,结果很成功
也许双重检查bRepBody索引,以确保它是正确的一个和双重检查M_PI为你是正确的,我用这个为我的测试运行
#定义M_PI
用c++检查的另一件事是确保你的代码是构建的/最新的,也许会添加一个
用户界面- >弹出窗口(“测试”);
查看是否使用了新的更改
否则,如果以上都是正确的,你是否可以上传你的f3d文件?也许幕后发生了一些奇怪的事情
对不起,是的@boopathi.sivakumar费克斯正在工作。我上面有一些代码,我正在测试,我忘记更改。谢谢
尽管我现在在Move功能之后制作简单的草图时遇到了另一个问题。由于某些原因,它没有显示在UI中。我刚刚使用消息框测试行来帮助调试它,消息框“测试”显示在MoveFeature()之前,但“Test1”没有显示。
用户界面- >弹出窗口(“测试”);//创建移动特征Ptr Features = rootComp-> Features ();If (!features)返回false;Ptr movefeat = features-> MoveFeatures ();if (! movefeat)返回false;Ptr MoveFeatureInput = movefeat ->createInput(coll1, transform);if (!moveFeatureInput)返回false;Ptr MoveFeature = movefeat ->add(moveFeatureInput);if (!moveFeature)返回false;用户界面- >弹出窗口(“Test1”);
我没有看到任何拼写错误,它确实在代码的末尾正确地移动了主体。
我已经在这里测试了移动功能代码融合360帮助|移动功能API样本并添加了相同的MessageBox在结束,它不显示在那里。这很奇怪。