介紹
該演示介紹了使用HOOPS Communicator的獨(dú)特工作流程,該工作流程從零件列表中加載零件,并使用自定義配合操作符(例如共線、同心和共面)構(gòu)建裝配模型。該工作流程可用于各種行業(yè),例如維護(hù)手冊、工作指令或電子商務(wù)(自定義訂單)等。
創(chuàng)建的裝配結(jié)構(gòu)可以用JSON字符串表示并復(fù)制。
HOOPS中文網(wǎng)http://techsoft3d.evget.com/
示例項目
從以下Git存儲庫下載示例項目:
git clone https://github.com/techsoft3d/assembly_creator.git
通過在GitHub上創(chuàng)建帳戶來為techsoft3d/ assembly_creator開發(fā)做出貢獻(xiàn)。
設(shè)置和使用
請README.MD在Git存儲庫中參考。
自定義運(yùn)算符
該演示實現(xiàn)了幾個自定義運(yùn)算符。
每個自定義運(yùn)算符都可以獨(dú)立用于其他項目。
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.創(chuàng)建零件列表
每個零件圖像都屬于該類partList_thumbnail,并且具有SC模型名稱作為數(shù)據(jù)集屬性:data-model
3.將鼠標(biāo)按下事件處理程序注冊到零件縮略圖。
當(dāng)拖動零件縮略圖時,其SC型號名稱將設(shè)置給使用該setPart功能的操作員。
??? $('.partsList_thumbnail').on('mousedown', (e) => {
??????? const partName = e.currentTarget.dataset.model;
??????? this._partDropOp.setPart(partName);
??????? e.preventDefault();
??? });
尖端(1)
LoadSubtreeConfig.attachInvisible
當(dāng)該setPart函數(shù)加載拖動的部分SC模型時,設(shè)置LoadSubtreeConfig.attachInvisibly = true避免在鼠標(biāo)光標(biāo)放置在Web查看器中之前顯示加載的模型。
- 拖動零件定位
盡管鼠標(biāo)光標(biāo)在2D屏幕上滑動,但零件的位置應(yīng)根據(jù)其在3D中的2D位置來確定。
在此運(yùn)算符中,零件位置確定如下:
1.創(chuàng)建一個錨平面,該平面位于現(xiàn)有模型的邊界框(錨)的中心并垂直于向量(當(dāng)前相機(jī)位置-錨)
2.使用以下命令計算當(dāng)前鼠標(biāo)位置(2D)的射線View.raycastFromPoint
3.使用以下命令計算錨平面和射線之間的交點(3D)Plane.intersectsRay
CollinearMateOperator (collinear_mate_operator.js)
該類CollinearMateOperator是一個自定義運(yùn)算符,用于通過選擇要匹配的兩個襯里邊緣來對齊零件。
使用翻轉(zhuǎn)按鈕可以反轉(zhuǎn)移動部件的方向。
尖端(2)
- 預(yù)選擇
在配合操作符中,在onMouseMove事件期間使用方法SelectionItem返回來計算用于配合的目標(biāo)線/面實體View.pickFromPoint。提供了、、、等
SelectionItem多種方法來檢索實體參數(shù)。?預(yù)選實體使用、和(common_utilities.js)表示。isLineSelectionisFaceSelectiongetLineEntitygetFaceEntity
Model.setNodeLineHighlightedModel.setNodeFaceHighlightedArrowMarkup
- 零件對齊
在配合運(yùn)算符中,通過以下步驟將零件位置應(yīng)用于選定的實體向量:
1.使用函數(shù)?(common_utilities.js)中的?API計算旋轉(zhuǎn)軸Point3.cross和角度Point3.dotvectorsAngleDeg
2.使用API創(chuàng)建軸和角度的旋轉(zhuǎn)矩陣Matrix.createFromOffAxisRotation,并使用以下命令將其應(yīng)用到移動部件節(jié)點Model.setNodeMatrix
3.計算平移距離
4.使用創(chuàng)建距離的平移矩陣Matrix.setTranslationComponent并將其應(yīng)用于移動部件節(jié)點實際的旋轉(zhuǎn)和平移過程在名為(node_translation.js)
的單獨(dú)自定義類中執(zhí)行nodeTranslation
ConcentricMateOperator (concentric_mate_operator.js)
該類ConcentricMateOperator是一個自定義運(yùn)算符,用于通過選擇同心的兩個圓形邊/面來對齊零件。
移動部件的角度和位置可以使用按鈕進(jìn)行調(diào)整。
CoplanarMateOperator (coplanar_mate_operator.js)
該類CoplanarMateOperator?是一個自定義運(yùn)算符,用于通過選擇兩個要匹配的平面來對齊零件。
可以使用按鈕調(diào)整移動部件的位置。
HandleOperatorOperator (handle_oprator_oprator.js)
除了三個配合操作符之外,還可以通過拖放手柄操作符來移動零件。
默認(rèn)情況下(沒有命令運(yùn)行),HandleOperatorOperator被激活。自HandleOperatorOperator定義內(nèi)置的行為,HandleOperator以便它可以使用傾斜軸平移零件。
尖端(3)
盡管可以使用 激活手柄操作器HandleOperator.addHandles,但可以使用 更新手柄的位置和旋轉(zhuǎn)HandleOperator.updatePosition。根據(jù)所選實體更新手柄旋轉(zhuǎn):?HandleOperatorOperator
- 選擇圓柱面時,它將Z軸與面的中心軸對齊
- 當(dāng)選擇平面時,它將Z軸與該面的法線向量對齊
- 選擇襯墊邊緣時,它將Z軸與邊緣方向?qū)R
模型樹
該演示使用jquery插件:jsTree來表示模型結(jié)構(gòu)并控制部件的可見性。
類ModelTree(model_tree.js)是一個包裝類,提供用于創(chuàng)建模型結(jié)構(gòu)(例如createRoot、addNode和)的函數(shù)deleteNode。
撤消/重做支持
盡管Web查看器API不提供撤消/重做功能,但該演示支持使用原始對象和方法進(jìn)行撤消/重做操作。
const history = {
??? type: "transform",
??? nodeId: this._mobileNode,
??? initialMatrix: initialMatrix,
??? newMatrix: newMatrix,
}
this._owner.createHistory(history);
使用JSON保存裝配結(jié)構(gòu)
在此演示中,裝配結(jié)構(gòu)的結(jié)果(成員零件以及每個可見性和位置)使用JSON字符串表示。
通過保留JSON字符串,該演示即使在重新加載頁面后也可以重現(xiàn)組裝結(jié)構(gòu)的結(jié)果。
文章來源:http://www.zghlxwxcb.cn/news/detail-855424.html
申請HOOPS試用http://x7pfmmn259623uby.mikecrm.com/d7EBgIv?如果您的企業(yè)目前也有3D數(shù)據(jù)格式轉(zhuǎn)換、3D Web輕量化渲染的需求,歡迎聯(lián)系我們哦~文章來源地址http://www.zghlxwxcb.cn/news/detail-855424.html
到了這里,關(guān)于3D Web輕量引擎HOOPS Communicator裝配制造流程演示的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!