微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

自动从切割平面生成2d视图

如何解决自动从切割平面生成2d视图

我是Autodesk Viewer和其他api的新手,我可以使用一些帮助来确定哪种工具最适合我想要的工作。

我正在使用Autodesk查看器让用户生成切割平面的2D视图,为此,我只是使用查看器中的getScreenshot函数并将其另存为我的应用程序中的蓝图。

我现在想做的是,当用户更新他的3d模型时,用新的3d模型自动更新我的2d视图。

目前,我想出的唯一解决方案是在拍摄屏幕快照时存储相机的位置,然后在更新3D模型时,在后台将另一台计算机放入查看器中,并再次在同一位置拍摄屏幕截图位置。

这似乎不是一个非常优雅的解决方案,所以我想知道是否还有其他选择,例如从api调用生成2d视图的方法,或者与查看器一起使用Design Automation API来截取屏幕截图?

我正努力解决的另一件事是获取正在生成的2ds视图的精确度量,我目前的解决方案是计算相机与切割平面之间的距离,然后使用fov获得近似度量,公式看起来像这样:

#include <stdio.h> #include <string.h> #include <omnetpp.h> using namespace omnetpp; /** * First attempt for gossip protocol */ class Sg1 : public cSimpleModule { protected: virtual void initialize() override; virtual void handleMessage(cmessage *msg) override; }; Define_Module(Sg1); void Sg1::initialize() { if (getIndex() == 0) { cmessage *askupdated = new cmessage("Ask Update"); int m = gateSize("out"); int l = intuniform(0,m-1); send(askupdated,"out",l); } } void Sg1::handleMessage(cmessage *msg) { //gate randomizer int n = gateSize("out"); int k = intuniform(0,n-1); int sid = msg->getArrivalGateId(); bool updatestatus = par("updated"); EV << "Received message `" << msg->getName() << "',sending it out again\n"; if (strncmp (msg->getName(),"Ask Update",2) == 0) { if (updatestatus == true){ delete msg; cmessage *updated = new cmessage("Updated"); send(updated,sid); } else { delete msg; cmessage *unupdated = new cmessage("Unupdated"); send(unupdated,sid); } } else if (strncmp (msg->getName(),"Unupdated",2) == 0) { delete msg; cmessage *update = new cmessage("Here is the update"); send(update,sid); } else { delete msg; cmessage *askupdated = new cmessage("Ask Update"); send(askupdated,sid); } }

但这非常取决于用户面对以90°角切割的平面,我认为应该使用测量工具做些更好的事情。

非常感谢您的时间!

解决方法

  1. 您应该能够使用木偶(没有客户端组件)在服务器上运行 Viewer ,以生成屏幕截图https://forge.autodesk.com/blog/running-forge-viewer-headless-chrome-puppeteer
    注意:您也可以使用 Design Automation API 来执行类似的操作,但随后只能使用给定产品的文件格式(例如 AutoCAD )支持作为输入

  2. 您还可以简单地保存 Viewer 状态,并在下次加载相同模型时将其重置,以进行屏幕截图使用getState()/ restoreState()完全相同的区域:https://adndevblog.typepad.com/cloud_and_mobile/2015/02/managing-viewer-states-from-the-api.html

  3. 为什么要尝试测量切割平面和相机位置之间的距离?是为了还原查看器状态/相机吗?如果是这样,那么2.中提到的解决方案应该有所帮助

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。