以编程方式识别唯一模型
Identify unique model programmatically
如何以编程方式在查看器中识别模型?即模型的哪些参数可以帮助区分不同的模型?
我尝试了什么:
viewer.model.id
总是 returns 1.
viewer.model.myData.basePath
或 viewer.model.myData.urn
只是一串路径,一个模型以后可能会采用与另一个模型相同的路径。
在 viewer.model.myData
中对 packFileTotalSize
和 primitiveCount
等更多唯一值进行散列处理可以得到更接近 1 对 1 的 ID,但这更像是一种 hack。
是否有哈希、名称或模型 ID 更可能是一个模型唯一的?
如果您的文件存储在OSS上,您可以请求file details,并获取其SHA1码。不幸的是,这是今天(post 的时间)你得到 API.
返回的 SHA1 哈希码的唯一地方
一个非常简单的处理方法是在加载模型后自己标记模型,这是我在我的应用程序中的做法:
const onModelLoaded = (model) => {
model.guid = guid()
}
viewer.loadModel(path, loadOption, onModelLoaded)
这是我对 guid() 函数的实现:
guid (format = 'xxxxxxxxxxxx') {
var d = new Date().getTime()
const guid = format.replace(
/[xy]/g,
function (c) {
var r = (d + Math.random() * 16) % 16 | 0
d = Math.floor(d / 16)
return (c == 'x' ? r : (r & 0x7 | 0x8)).toString(16)
})
return guid
}
这只是一个示例,您可以将 guid 替换为来自数据库记录或其他来源的某个值。我假设您知道加载时模型的来源。
如何以编程方式在查看器中识别模型?即模型的哪些参数可以帮助区分不同的模型?
我尝试了什么:
viewer.model.id
总是 returns 1.
viewer.model.myData.basePath
或 viewer.model.myData.urn
只是一串路径,一个模型以后可能会采用与另一个模型相同的路径。
在 viewer.model.myData
中对 packFileTotalSize
和 primitiveCount
等更多唯一值进行散列处理可以得到更接近 1 对 1 的 ID,但这更像是一种 hack。
是否有哈希、名称或模型 ID 更可能是一个模型唯一的?
如果您的文件存储在OSS上,您可以请求file details,并获取其SHA1码。不幸的是,这是今天(post 的时间)你得到 API.
返回的 SHA1 哈希码的唯一地方一个非常简单的处理方法是在加载模型后自己标记模型,这是我在我的应用程序中的做法:
const onModelLoaded = (model) => {
model.guid = guid()
}
viewer.loadModel(path, loadOption, onModelLoaded)
这是我对 guid() 函数的实现:
guid (format = 'xxxxxxxxxxxx') {
var d = new Date().getTime()
const guid = format.replace(
/[xy]/g,
function (c) {
var r = (d + Math.random() * 16) % 16 | 0
d = Math.floor(d / 16)
return (c == 'x' ? r : (r & 0x7 | 0x8)).toString(16)
})
return guid
}
这只是一个示例,您可以将 guid 替换为来自数据库记录或其他来源的某个值。我假设您知道加载时模型的来源。