如何调整对象大小 - Autodesk Forge Viewer

2024-01-11

我怎样才能改变对象的大小?

我需要改变物体的高度

例如,我们需要更改门或窗帘的高度

在此代码中我的对象消失了

let change = function () {

    const viewer = oViewer;
    const model = viewer.model;

    const frags = [
        123,
        361,
    ];

    for(let i in frags){

        let fragId = frags[i];

        // Get mesh with frag id
        let mesh = viewer.impl.getRenderProxy(model, fragId);

        // Selection ID
        let dbId = 1280; // viewer.getSelection()[0]

        model.getData().instanceTree.enumNodeFragments(dbId, fragId => {
            mesh.scale.x += 0.5;
            // mesh.scale.y = 5;
            // mesh.scale.z = 5;

            model.getFragmentList().setMesh(fragId, mesh, true);
            viewer.impl.invalidate(true);
        });
    }
};

以下代码调整了对象大小,但变得太大并且无法缩放

const viewer = oViewer;
const model = viewer.model;

viewer.addEventListener(Autodesk.Viewing.SELECTION_CHANGED_EVENT, onSelectedCallback);

function onSelectedCallback(event) {

    const fragId = event.fragIdsArray[0];

    if (typeof fragId == 'undefined') {return;}

    const fragIdsArray = (Array.isArray(fragId) ? fragId : [fragId]);

    fragIdsArray.forEach(function (subFragId) {

        let mesh = viewer.impl.getRenderProxy(model, subFragId).clone();

        mesh.scale.y += 0.2;
        mesh.scale.x += 0.2;
        mesh.scale.z += 0.2;

        model.getFragmentList().setMesh(subFragId, mesh, true);
        viewer.impl.invalidate(true);
    });
}

我找到了解决方案并为其编写了脚本

let transform = new function () {

    let _self = this;

    this.fragId = null;
    this.proxy = null;
    this.viewer = oViewer;
    this.model = this.viewer.model;

    this.setFragId = function (fragId) {
        this.fragId = fragId;
        this.proxy = this.viewer.impl.getFragmentProxy(this.model, this.fragId);
        this.proxy.getAnimTransform();
    };

    this.update = function(){
        this.proxy.updateAnimTransform();
        this.viewer.impl.sceneUpdated(true);
    };

    this.scaleX = function (num) {
        this.proxy.scale.x = num + 1;
        this.update();
    };

    this.scaleY = function (num) {
        this.proxy.scale.y = num + 1;
        this.update();
    };

    this.scaleZ = function (num) {
        this.proxy.scale.z = num + 1;
        this.update();
    };

    this.positionX = function (num) {
        this.proxy.position.x = num;
        this.update();
    };

    this.positionY = function (num) {
        this.proxy.position.y = num;
        this.update();
    };

    this.positionZ = function (num) {
        this.proxy.position.z = num;
        this.update();
    };

};

对于查找碎片 ID,您可以使用以下代码

let selection = new function () {

    this.viewer = oViewer;

    let _self = this;

    this.ids = function () {
        return this.viewer.getSelection();
    };

    this.count = function () {
        return this.viewer.getSelectionCount();
    };

    // Mesh Object
    this.mesh = new function () {
        this.all = function () {
            if (_self.count() === 0) return {};

            let meshes = _self.viewer.impl.selectionMeshes;
            let output = [];

            for (let index in meshes) {
                output.push(meshes[index]);
            }

            return output;
        };

        this.fragIds = function(){
            let meshes = this.all();
            let ids = [];
            meshes.forEach(function(mesh){
                ids.push(mesh.fragId);
            });
            return ids;
        };

        this.first = function () {
            return this.all()[0];
        };

        this.last = function () {
            return this.all().reverse()[0];
        }
    };

};

如何使用 ?

  • 用鼠标选择您的元素
  • 打开浏览器控制台
  • Type selection.mesh.fragIds() // [11]
  • Type transform.setFragId(11)
  • 现在您可以更改比例和位置:)

    transform.scaleX(number);
    
    transform.scaleY(number);
    
    transform.scaleZ(number);
    
    
    transform.positionX(number);
    
    transform.positionY(number);
    
    transform.positionZ(number);
    
    本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

    如何调整对象大小 - Autodesk Forge Viewer 的相关文章

    随机推荐

    • 如何在.NET中调用DrawThemeTextEx

      我需要在 Vista 7 玻璃窗中编写带有发光效果的文本 并且我正在尝试调用 API 来在那里编写一些文本 我已经检查了一个很棒的sample http www codeproject com KB vista textonglass as
    • 到底如何将 ckeditor 与 Paperclip 集成,以便它可以上传图像文件?

      你怎么获得http github com galetahub rails ckeditor http github com galetahub rails ckeditor工作 以便您可以上传图像文件 我认为我不会使用 s3 存储 任何帮助
    • Swift 初始化规则混乱

      Rule 1 如果您的子类没有定义任何指定初始值设定项 它将自动继承其超类的所有指定初始值设定项 困惑 我在子类中提供了一个指定的初始值设定项 这意味着超类指定的初始化器不会归结为子类 但我还是需要写override关键字提供子类中任何超类
    • 使用 PowerShell 移动 xlsx 文件中的列

      PowerShell 和 Excel 问题在这里 我有几个电子表格 每个电子表格约有 9000 行数据 我想将 A 列与 B 列交换 并将数据保留在两列中 并使用 PowerShell 来执行此操作 我在谷歌上做了很多查找 看看是否可以做到
    • 如何在同一解决方案中引用来自单独项目的资源 (png)

      我的解决方案的结构如下 Class Library Name Chess Images Pawn png WPF Core 3 1 Project Name ChessApp 主窗口 xaml 我想在我的内部显示 Pawn png 图像主窗
    • C++ 运算符重载将指针类型作为参数?

      我是 C 新手 试图找出指针和引用之间的区别 我刚刚读过 作者在文章中提到day operator day d 不会编译 注意 day是枚举类型 并认为此重载运算符函数的参数必须是 T T 或 T const 类型 其中 T 是类或枚举类型
    • 为什么javascript中bool(true) && string的结果是string?

      测试代码是 console log true abc abc 谁能告诉我为什么结果是abc From 如果可以转换为 false 则返回 expr1 否则 返回 表达式2 因此 当与布尔值一起使用时 返回 true 如果两者都 操作数为真
    • 获取 facebook api 的访问令牌

      要获取访问令牌 GET https graph facebook com oauth access token client id YOUR APP ID client secret YOUR APP SECRET redirect uri
    • Python Pandas TypeError:第一个参数必须是字符串或编译模式

      我很抱歉这个超级简单的问题 但我无法让它发挥作用 我正在清理数据 并且想要添加一个标志 如果名称 分为名字和姓氏两列 错误 我建立了多种模式 但现在我正在处理单独的语句 我可以将所有这些语句合并为一个吗 pattern match incr
    • Rails:使用回形针上传文件

      我想使用回形针上传文件 通过基本的开箱即用设置 我能够将文件上传到默认目录 公共 系统中的某个目录 但是 当我尝试更改 url 或路径 或两者 时 class Cvit lt ActiveRecord Base has attached f
    • 时间:2019-03-17 标签:c#richtextboxoutofmemory

      我编写了一个应用程序 可以读取传入的聊天内容 有点像即时通讯工具 对其进行格式化并将其插入到 Richtextbox 中 如果您让程序运行足够长的时间 您将收到内存不足错误 查看我的代码后 我认为这是因为我从不修剪 Richtextbox
    • 如何布局图像及其左侧和下方的文本?

      我需要制作一个特定于网页的布局 它需要看起来像一篇网络文章 其中包含图像和文本 看图片 由于这在网络世界中很容易做到 所以我不确定如何在 XML 布局中做到这一点 显然 TextView当图像存在时必须位于左侧 并且在到达图像底部后 它必须
    • 如何在springboot中跳过失败的bean以避免reportFailure:771 >>应用程序启动失败

      有没有办法跳过失败 bean 以避免应用程序启动失败 让我解释一下这个场景 我在应用程序启动时创建 hazlecast bean 有时 hazecast 服务器可能不存在 那时 当我启动 springboot 应用程序时 hazecast
    • UI 测试中的呼叫按钮?

      我想知道是否可以从电话方案中点击呼叫按钮 例如 tel 555555555 因为如果我触摸通话按钮 我会收到一条提醒 提示我需要确认通话或取消通话 是否可以 我的代码中有这个 addUIInterruptionMonitor withDes
    • 使用 NSPredicate 删除对象

      我有以下词典 其中有很多子词典 如何删除其中的对象isChanged 1从父字典中使用NSPredicate 0 496447097042228 cellHeight 437 isChanged 1 100000019882803 1936
    • 如何为 PHP 全局设置 CURLOPT_CAINFO?

      我知道我可以在任何特定实例上设置该选项 但是我真正想要的是设置 php ini 或类似的地方 以便在所有项目和所有实例中处理此问题 有谁知道我可以实现这个目标的方法吗 编辑 我对允许证书位于不同服务器上的不同位置的解决方案特别感兴趣 我正在
    • 使用 JavaScript 代替 AppleScript 实现邮件规则自动化

      我正在尝试使用 Javascript 自动化而不是 AppleScript 构建 Mail app 规则 在 OS X Yosemite 上 但我停留在基础知识上 我在 AppleScript 中看到这段代码 using terms fro
    • 如何将参数传递给 Rails 控制器方法,然后使用 JQuery/AJAX 返回值?

      我使用单击函数首先获取数组 位置 然后通过 AJAX 调用将其发布到控制器方法 然后我希望该方法返回一个布尔值以启用 jquery 函数中的 addClass 控制台始终抛出 500 服务器错误 这是 js 文件 document read
    • 安装 GDL 以在 Python 中使用

      我需要使用一些GDL http gnudatalanguage sourceforge net credits php我的 Python 代码中的例程 In the GitHub 仓库 https github com cenit GDL
    • 如何调整对象大小 - Autodesk Forge Viewer

      我怎样才能改变对象的大小 我需要改变物体的高度 例如 我们需要更改门或窗帘的高度 在此代码中我的对象消失了 let change function const viewer oViewer const model viewer model