3D Web轻量引擎HOOPS Communicator装配制造流程演示

news2024/12/26 21:45:07
介绍

该演示介绍了使用HOOPS Communicator的独特工作流程,该工作流程从零件列表中加载零件,并使用自定义配合操作符(例如共线、同心和共面)构建装配模型。该工作流程可用于各种行业,例如维护手册、工作指令或电子商务(自定义订单)等。
创建的装配结构可以用JSON字符串表示并复制。

HOOPS中文网icon-default.png?t=N7T8http://techsoft3d.evget.com/

示例项目

从以下Git存储库下载示例项目:

git clone https://github.com/techsoft3d/assembly_creator.git

通过在GitHub上创建帐户来为techsoft3d/ assembly_creator开发做出贡献。

设置和使用

请README.MD在Git存储库中参考。

自定义运算符

该演示实现了几个自定义运算符。
每个自定义运算符都可以独立用于其他项目。

PartDragDropOperator (part_drag_drop_operator.js)

该类PartDragDropOperator是一个自定义操作符,用于通过在零件列表中开始拖动并将其放入Web查看器来插入零件。

用法

1.注册自定义算子并激活

this.partDropOp = new PartDragDropOperator(this.viewer, this);

this.partDropOpHandle = this.viewer.operatorManager.registerCustomOperator(this.partDropOp);

this.viewer.operatorManager.push(this.partDropOpHandle);

2.创建零件列表
每个零件图像都属于该类partList_thumbnail,并且具有SC模型名称作为数据集属性:data-model

3.将鼠标按下事件处理程序注册到零件缩略图。
当拖动零件缩略图时,其SC型号名称将设置给使用该setPart功能的操作员。

    $('.partsList_thumbnail').on('mousedown', (e) => {

        const partName = e.currentTarget.dataset.model;

        this._partDropOp.setPart(partName);

        e.preventDefault();

    });

尖端(1)

LoadSubtreeConfig.attachInvisible

当该setPart函数加载拖动的部分SC模型时,设置LoadSubtreeConfig.attachInvisibly = true避免在鼠标光标放置在Web查看器中之前显示加载的模型。

  • 拖动零件定位

尽管鼠标光标在2D屏幕上滑动,但零件的位置应根据其在3D中的2D位置来确定。

tupian

在此运算符中,零件位置确定如下:

1.创建一个锚平面,该平面位于现有模型的边界框(锚)的中心并垂直于向量(当前相机位置-锚)

2.使用以下命令计算当前鼠标位置(2D)的射线View.raycastFromPoint

3.使用以下命令计算锚平面和射线之间的交点(3D)Plane.intersectsRay

CollinearMateOperator (collinear_mate_operator.js)

该类CollinearMateOperator是一个自定义运算符,用于通过选择要匹配的两个衬里边缘来对齐零件。

tupian

使用翻转按钮可以反转移动部件的方向。

tupian

尖端(2)
  • 预选择

在配合操作符中,在onMouseMove事件期间使用方法SelectionItem返回来计算用于配合的目标线/面实体View.pickFromPoint。提供了、、、等
SelectionItem多种方法来检索实体参数。 预选实体使用、和(common_utilities.js)表示。isLineSelectionisFaceSelectiongetLineEntitygetFaceEntity
Model.setNodeLineHighlightedModel.setNodeFaceHighlightedArrowMarkup

tupian

  • 零件对齐

在配合运算符中,通过以下步骤将零件位置应用于选定的实体向量:

1.使用函数 (common_utilities.js)中的 API计算旋转轴Point3.cross和角度Point3.dotvectorsAngleDeg

tupian

2.使用API创建轴和角度的旋转矩阵Matrix.createFromOffAxisRotation,并使用以下命令将其应用到移动部件节点Model.setNodeMatrix

3.计算平移距离

tupian

4.使用创建距离的平移矩阵Matrix.setTranslationComponent并将其应用于移动部件节点实际的旋转和平移过程在名为(node_translation.js)
的单独自定义类中执行nodeTranslation

ConcentricMateOperator (concentric_mate_operator.js)

该类ConcentricMateOperator是一个自定义运算符,用于通过选择同心的两个圆形边/面来对齐零件。

tupian

移动部件的角度和位置可以使用按钮进行调整。

tupian

CoplanarMateOperator (coplanar_mate_operator.js)

该类CoplanarMateOperator 是一个自定义运算符,用于通过选择两个要匹配的平面来对齐零件。

tupian

可以使用按钮调整移动部件的位置。

tupian

HandleOperatorOperator (handle_oprator_oprator.js)

除了三个配合操作符之外,还可以通过拖放手柄操作符来移动零件。
默认情况下(没有命令运行),HandleOperatorOperator被激活。自HandleOperatorOperator定义内置的行为,HandleOperator以便它可以使用倾斜轴平移零件。

tupian

尖端(3)

尽管可以使用 激活手柄操作器HandleOperator.addHandles,但可以使用 更新手柄的位置和旋转HandleOperator.updatePosition。根据所选实体更新手柄旋转: HandleOperatorOperator

  • 选择圆柱面时,它将Z轴与面的中心轴对齐
  • 当选择平面时,它将Z轴与该面的法线向量对齐
  • 选择衬垫边缘时,它将Z轴与边缘方向对齐
模型树

该演示使用jquery插件:jsTree来表示模型结构并控制部件的可见性。
类ModelTree(model_tree.js)是一个包装类,提供用于创建模型结构(例如createRoot、addNode和)的函数deleteNode。

tupian

撤消/重做支持

尽管Web查看器API不提供撤消/重做功能,但该演示支持使用原始对象和方法进行撤消/重做操作。

const history = {

    type: "transform",

    nodeId: this._mobileNode,

    initialMatrix: initialMatrix,

    newMatrix: newMatrix,

}

this._owner.createHistory(history);

tupian

使用JSON保存装配结构

在此演示中,装配结构的结果(成员零件以及每个可见性和位置)使用JSON字符串表示。

tupian

通过保留JSON字符串,该演示即使在重新加载页面后也可以重现组装结构的结果。

tupian

申请HOOPS试用icon-default.png?t=N7T8http://x7pfmmn259623uby.mikecrm.com/d7EBgIv 如果您的企业目前也有3D数据格式转换、3D Web轻量化渲染的需求,欢迎联系我们哦~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1579357.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

不使用 Docker 构建 Triton 服务器并在 Google Colab 平台上部署 HuggingFace 模型

Build Triton server without docker and deploy HuggingFace models on Google Colab platform EnvironmentBuilding Triton serverDeploying HuggingFace models客户端推荐阅读参考 Environment 根据Triton 环境对应表 ,Colab 环境缺少 tensorrt-8.6.1&#xff0…

2024/4/5—力扣—搜索旋转排序数组

代码实现&#xff1a; 思路&#xff1a;二分法 int search(int *nums, int numsSize, int target) {int l 0, r numsSize - 1;while (l < r) { // 左闭右闭int mid (l r) >> 1;if (nums[mid] target) {return mid;}if (nums[l] < nums[mid]) { // 说明l - mid…

ClickHouse 介绍

前言 一个通用系统意味着更广泛的适用性&#xff0c;但通用的另一种解释是平庸&#xff0c;因为它无法在所有场景内都做到极致。 ClickHouse 在没有像三驾马车这样的指导性论文的背景下&#xff0c;通过针对特定场景的极致优化&#xff0c;获得闪电般的查询性能。 ClickHous…

为说阿拉伯语的国家进行游戏本地化

阿拉伯语是由超过4亿人使用的语言&#xff0c;并且是二十多个国家的官方语言。进入这些国家的市场并非易事——虽然他们共享一种通用语言&#xff0c;但每个国家都有自己独特的文化&#xff0c;有自己的禁忌和对审查的处理方式。这就是为什么视频游戏公司长期以来都远离阿拉伯语…

C语言学习初级阶段(数据)——scanf读取标准输入

文章目录 一、scanf函数的原理1.1、自己理解1.2、王道解释1.3、注意 一、scanf函数的原理 输入和输出是通过标准函数库实现的&#xff0c;C语言通过scanf函数读取键盘输入&#xff0c;键盘输入又称标准输入。当scanf函数读取标准输入时&#xff0c;如果还没有输入任何内容&…

如何提升产品用户体验?4个工具+6张案例,让你快速吃透!

在数字时代的浪潮中&#xff0c;产品用户体验早已不再是简单的“好用”或“不好用”的评判标准&#xff0c;它不仅仅是功能的堆砌&#xff0c;更是情感的连接、智慧的体现。在这个竞争激烈的市场中&#xff0c;只有那些能够深入理解用户需求、精准把握用户心理的产品&#xff0…

ES6中 Promise的详细讲解

文章目录 一、介绍状态特点流程 二、用法实例方法then()catchfinally() 构造函数方法all()race()allSettled()resolve()reject() 三、使用场景# 参考文献 一、介绍 Promise&#xff0c;译为承诺&#xff0c;是异步编程的一种解决方案&#xff0c;比传统的解决方案&#xff08;…

(学习日记)2024.04.09:UCOSIII第三十七节:事件函数接口

写在前面&#xff1a; 由于时间的不足与学习的碎片化&#xff0c;写博客变得有些奢侈。 但是对于记录学习&#xff08;忘了以后能快速复习&#xff09;的渴望一天天变得强烈。 既然如此 不如以天为单位&#xff0c;以时间为顺序&#xff0c;仅仅将博客当做一个知识学习的目录&a…

uniapp请求后端接口

新建文件夹utils const request (config) > {// 拼接完整的接口路径config.url http://mm.test.cn config.url;//这里拼接的是访问后端接口的地址&#xff0c;http://mm.test.cn/prod-api/testconsole.log(config.url)//判断是都携带参数if(!config.data){config.data …

比派科技(BananaPI) 和 Qbee 达成战略合作伙伴关系,共同推动物联网技术发展

比派科技&#xff08;Banana PI&#xff09;&#xff08;https://banana-pi.org/&#xff09;和Qbee&#xff08;https://qbee.io/&#xff09;很高兴地宣布建立战略合作伙伴关系&#xff0c;旨在推动物联网&#xff08;IoT&#xff09;技术领域的创新和发展。 作为在物联网领…

[官方推荐]通义灵码做活动,送礼品,快来薅羊毛!!!

你的编辑器装上智能ai编辑了吗&#xff0c;的确挺好用的。 最近阿里云AI编码搞活动&#xff0c;可以免费体验并且还可以抽盲盒。有日历、马克杯、代金券、等等其他数码产品。 大多数都是日历。 点击链接参与「通义灵码 体验 AI 编码&#xff0c;开 AI 盲盒」 https://develope…

代码随想录阅读笔记-二叉树【总结】

二叉树的理论基础 代码随想录 (programmercarl.com)&#xff1a;二叉树的种类、存储方式、遍历方式、定义方式 二叉树的遍历方式 深度优先遍历 代码随想录阅读笔记-二叉树【递归遍历】-CSDN博客&#xff1a;递归三部曲初次亮相代码随想录阅读笔记-二叉树【迭代遍历】-CSDN博…

护眼灯值不值得买?入手不亏护眼灯十大品牌推荐

如今&#xff0c;我们不难发现越来越多的人早早地戴上了眼镜。这背后&#xff0c;或许是频繁接触电子产品&#xff0c;或许是长时间的学习&#xff0c;又或许是长时间处于不健康的光线环境。无论原因如何&#xff0c;我们都深知营造良好的光线环境对于保护视力至关重要。市面上…

Maven POM元素解析

这是对Maven中使用的Maven项目描述符的引用。 <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/…

SQL语法 之 数据库多表查询

对这篇文章的延申 Mysql-全外连接-Union和Union ALL的辨析及练习-CSDN博客 其他SQL系列文章&#xff1a; MySQL《一》-数据库基础_宋红康主要课程-CSDN博客 MySQL《二》-基本查询语句&#xff08;Select)-CSDN博客 Mysql - 定点型(DECIMAL)的使用详解及练习-CSDN博客 MySQ…

RuleEngine规则引擎底层改造AviatorScript 之公式规则

前情提要&#xff0c;看上一个文章&#xff0c;具体要实现的效果就是 当然上来的问题就是前端的问题&#xff0c;这个框首先他们用的是富文本&#xff0c;富文本传到后台的结果是前端脚本&#xff0c;带着h5的标签&#xff0c;后面改成了这个&#xff0c;当时这个东西其实和后…

【Linux】TCP编程{socket/listen/accept/telnet/connect/send}

文章目录 1.TCP接口1.1socket文档 1.2listen拓&#xff1a;端口号8080 1.3accept拓&#xff1a;今天全局函数 1.4读写接口1.5telnet1.一个客户端2.两个客户端 1.6ulimit -a1.7常识回顾1.8connect1.9拓&#xff1a;客户端的ip和地址什么时候被分配&#xff1f;1.10拓&#xff1a…

【接口自动化】参数化替换

在做接口测试时&#xff0c;除了测单个接口&#xff0c;还需要进行业务链路间的接口测试 比如[注册-登陆]需要token鉴权的业务流 当我们用使用postman/jmeter等工具时&#xff0c;将注册接口的一些响应信息提取出来&#xff0c;放到登陆接口的请求中&#xff0c;来完成某个业务…

【Redis】Redis群集的三种模式(主从、哨兵、群集)

redis群集有三种模式&#xff0c;分别是主从同步/复制、哨兵模式、Cluster&#xff0c;下面会讲解一下三种模式的工作方式&#xff0c;以及如何搭建cluster群集 ●主从复制&#xff1a;主从复制是高可用Redis的基础&#xff0c;哨兵和集群都是在主从复制基础上实现高可用的。主…

Qt案例 通过调用Setupapi.h库实现对设备管理器中设备默认驱动的备份

参考腾讯电脑管家-软件市场中的驱动备份专家写的一个驱动备份软件案例&#xff0c;学习Setupapi.h库中的函数使用.通过Setupapi.h库读取设备管理器中安装的设备获取安装的驱动列表&#xff0c;通过bit7z库备份驱动目录下的所有文件. 目录导读 实现效果相关内容示例获取SP_DRVIN…