我们可以从 Forge Viewer API 访问 Revit Material Takeoff 使用的数据吗?
例如,我有一堵墙(1 个元素),它有 2 层:
现在我想获取每一层的体积,就像我在 Revit Material 起飞中获取体积一样。
提前谢谢您,如有任何建议或建议的工作流程,我们将不胜感激!
我们可以从 Forge Viewer API 访问 Revit Material Takeoff 使用的数据吗?
例如,我有一堵墙(1 个元素),它有 2 层:
现在我想获取每一层的体积,就像我在 Revit Material 起飞中获取体积一样。
提前谢谢您,如有任何建议或建议的工作流程,我们将不胜感激!
我在 Autodesk Platform Services(以前称为 Forge)中运行一个应用程序。某些文件需要超过 60 分钟才能获取结果,因此上传 URL 在上传之前就已经过期,最终导致上传失败。我将 S3UploadURL 的分钟数过期时间 (minutesExpiration) 更改为 60,但我需要更多时间。我需要将输出 URL 提供给工作项 (workItem),因此我认为以后无法获取它以避免过期。
找到下面的代码片段,我获取了临时 URL,并将 expirationMinutes 选项设置为 60,然后创建了 workItem 并将其提供给 outputURL。希望有好心人能帮忙延长这个 60 分钟的限制,或者知道解决方法。
//POST Get temporary Upload URL
var objectsApiInstance3 = new ObjectsApi();
Dictionary<string, object> opts = new Dictionary<string, object>();
opts.Add("minutesExpiration", 60);
var uploadCsvResponse = objectsApiInstance3.getS3UploadURLAsync(urnOutputBucket, urnOutputObjectKey, opts);
dynamic uploadCsv = JsonConvert.DeserializeObject<Dictionary<string, object>>(uploadCsvResponse.Result.ToString());
string uploadUrl = "";
string outputUploadKey = "";
foreach (var e in uploadCsv)
{
if (e.Key == "urls")
{
uploadUrl = e.Value[0];
}
if (e.Key == "uploadKey")
{
outputUploadKey = e.Value;
}
}
//POST Create workItem
var service = new ForgeService(new HttpClient(new ForgeHandler(Microsoft.Extensions.Options.Options.Create(new ForgeConfiguration()
{ ClientId = clientID, ClientSecret = clientSecret }))
{ InnerHandler = new HttpClientHandler() }));
var workItemsApiInstance = new WorkItemsApi(service);
var workItem = new WorkItem()
{
ActivityId = clientID + "." + activity + "+" + alias,
Arguments = new Dictionary<string, IArgument>()
{
{
"rvtFile",
new XrefTreeArgument()
{
PathInZip = fileNames[n],
Url = downloadUrl
}
}, {
"exportChangesSettings",
new XrefTreeArgument()
{
Url = urlDownloadExportChangesSettings
}
}, {
"Result",
new XrefTreeArgument()
{
LocalName = outputFileName,
Verb = Verb.Put,
Url = uploadUrl
}
}
}
};
var workItemResult = await workItemsApiInstance.CreateWorkItemAsync(workItem);
var workItemStatus = await api.GetWorkitemStatusAsync(workItemResult.Content.Id);
我按照本文的方法计算令牌使用量,然后计算成本。我在工作项 oncomplete 回调上运行以下计算并将其存储在数据库中。
function getJobMetrics(jobDetails) {
const { stats } = jobDetails.jobStatus;
const timeQueued = Date.parse(stats.timeQueued);
const timeDownloadStarted = Date.parse(stats.timeDownloadStarted);
const timeUploadEnded = Date.parse(stats.timeUploadEnded);
const timeInstructionsStarted = Date.parse(stats.timeInstructionsStarted);
const timeInstructionsEnded = Date.parse(stats.timeInstructionsEnded);
const queueDelay = timeDownloadStarted - timeQueued;
const downloadDelay = timeInstructionsStarted - timeDownloadStarted;
const instructionsRunDuration = timeInstructionsEnded - timeInstructionsStarted;
const totalDuration = timeInstructionsEnded - timeQueued;
// https://aps.autodesk.com/blog/estimate-design-automation-costs
// in case of failure, timeUploadEnded is null
const adskCalculatedTimeTaken = (timeUploadEnded || timeInstructionsEnded) - timeDownloadStarted;
const adskTokenUsageInCloudCredits = (adskCalculatedTimeTaken / 1000 / 60 / 60) * 6;
return {
adskDasQueueDelay: queueDelay,
adskDasDownloadDelay: downloadDelay,
adskDasInstructionsRunDuration: instructionsRunDuration,
adskDasTotalDuration: totalDuration,
adskDasTotalBytesDownloaded: stats.bytesDownloaded,
adskCalculatedTimeTaken,
adskTokenUsageInCloudCredits,
};
}
当我汇总adskTokenUsageInCloudCredits
一个月内的所有工作项时,它与我在 APS 分析仪表板上看到的数字不匹配。我的数字似乎高出一个数量级。我没有找到任何可以查询消耗令牌的单个事件的 API。我做错了什么?
我在 next js 中创建了一个串联查看器,并使用获取了双模型中的所有视图
const data = await fetch(`https://developer.api.autodesk.com/tandem/v1/twins/${twinId}/views`, {
headers: {
Authorization: await this.getAuthHeader(),
},
}).then((response: any) => response.json());
但无法从列表中更新视图,有人可以帮忙吗?
我正在尝试通过从列表中选择一个视图来更新视图
我们有一组具有多个“模型状态”的 Inventor 模型。现在在 Web 查看器中,我们需要根据模型状态切换模型,即根据模型状态切换配置器。
我想知道在使用模型衍生 API 将 Inventor 装配转换为 SVF 时,模型状态是保留还是丢弃。您对在 APS 查看器中实现此目的有什么建议吗?
谢谢。
我目前正在使用 BIM360 的模型,并注意到 BIM360 查看器和我的 APS 查看器之间的加载时间存在显着差异。
经过调查,我发现 BIM360 使用的是SVF2,而我的 APS 查看器正在使用SVF(NOP_VIEWER.model.isSVF2()
在两个查看器上均已确认)。
查看清单中的导数可以得出:
...
"extractorVersion": "2026.6.6.1636",
"outputType": "svf",
"overrideOutputType": "svf2",
...
一些较旧的博客提到我们应该使用不同的查看器选项:
var options = {
env:"MD20ProdUS",
api: "D3S",
...
}
但它不起作用(查看器在初始化时崩溃),并且从 v7.48 开始就没有必要了。
有没有办法使用自动转换的SVF2版本的BIM360/ACC文件而不做任何其他翻译?
我正在尝试使用Object API将文件(.png 作为测试)直接上传到 ACC 云。使用以下代码我得到 200 响应。但我在ACC文件夹中看不到上传的文件。我究竟做错了什么?
const { bucketKey, objectKey } = req.body;
const fileContent = await fs.readFile("file.png");
const response = await new APS.ObjectsApi().uploadResources(
bucketKey,
[
{
objectKey: objectKey,
data: fileContent,
},
],
{},
internalAuthClient,
req.internalOAuthToken
);
另外,API 文档似乎有点含糊。根据对象API,有一个名为 的方法uploadObject
,但查看源代码,该方法已被弃用。另一方面,Object APIuploadResources
文档中并未提及该方法。所以我不确定我是否正确使用了该方法。