我是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, "out", sid);
}
else {
delete msg;
cMessage *unupdated = new cMessage("Unupdated");
send(unupdated, "out", sid);
}
}
else if (strncmp (msg->getName(),"Unupdated",2) == 0) {
delete msg;
cMessage *update = new cMessage("Here is the update");
send(update, "out", sid);
}
else {
delete msg;
cMessage *askupdated = new cMessage("Ask Update");
send(askupdated, "out", sid);
}
}
但这非常取决于用户面对以90°角切割的平面,我认为应该使用测量工具做些更好的事情。
非常感谢您的时间!
答案 0 :(得分:0)
您应该能够使用木偶(没有客户端组件)在服务器上运行 Viewer ,以生成屏幕截图 :https://forge.autodesk.com/blog/running-forge-viewer-headless-chrome-puppeteer
注意:您也可以使用 Design Automation API 来执行类似的操作,但随后只能使用给定产品的文件格式(例如 AutoCAD )支持作为输入
您还可以简单地保存 Viewer 的状态,并在下次加载相同模型时将其重置,以进行屏幕截图< / strong>使用getState()/ restoreState()完全相同的区域:https://adndevblog.typepad.com/cloud_and_mobile/2015/02/managing-viewer-states-from-the-api.html
为什么要尝试测量切割平面和相机位置之间的距离?是为了还原查看器状态/相机吗?如果是这样,那么2.中提到的解决方案应该有所帮助