社区
融合360 API和脚本
有新的插件要分享吗?需要编写一些专门的脚本?向社区提出问题或分享你的发现。
取消
显示结果
而是搜索
你的意思是:

在c++中绕轴旋转物体

9回复9
解决了
回复
消息110
rusty.bird
查看149次,回复9次

在c++中绕轴旋转物体

你好,我有一些麻烦旋转一个身体围绕部分轴。我的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;

9回复9
消息210

@rusty.bird

看来问题出在

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());

这应该能解决问题


Boopathi Sivakumar
技术顾问-后期处理

消息3.10

我已经尝试了你的修复,但它没有显示身体在屏幕上旋转。

消息410

@rusty.bird

我只是举了一个例子,如果你能给我一个提示,告诉我你的旋转点应该在哪里,那么它应该也能工作


Boopathi Sivakumar
技术顾问-后期处理

消息510

我有一个圆柱体上有一个扁平。原点是圆柱体的中心。我想让它绕X轴旋转一定的角度,比如90度。

消息610

运行你的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;

现在圆筒旋转了,结果很成功

rotate_screenshot.PNG

也许双重检查bRepBody索引,以确保它是正确的一个和双重检查M_PI为你是正确的,我用这个为我的测试运行

#定义M_PI

用c++检查的另一件事是确保你的代码是构建的/最新的,也许会添加一个

用户界面- >弹出窗口(“测试”);

查看是否使用了新的更改

否则,如果以上都是正确的,你是否可以上传你的f3d文件?也许幕后发生了一些奇怪的事情

消息710

对不起,是的@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”);

消息810

moveFeatureMost likely是无效的,所以它在第14行返回。再次检查coll1和transform,可能在某个地方有拼写错误/大写不匹配。也许coll1是空的

也许值得一看c++特定问题浏览或再次访问它,以了解一些有用的故障排除技巧+使用调试器

消息910

我没有看到任何拼写错误,它确实在代码的末尾正确地移动了主体。

我已经在这里测试了移动功能代码融合360帮助|移动功能API样本并添加了相同的MessageBox在结束,它不显示在那里。这很奇怪。

消息1010

删除这些线在接缝端解决这个问题

if(!moveFeature)返回false;

找不到你想要的东西?询问社区或分享你的知识。

发布到论坛

“社区

“原子能委员会

Baidu
map