OV.InfoPanel = class { constructor (parentDiv) { this.mainDiv = $('
').addClass ('ov_info_panel_main').appendTo (parentDiv); this.treeView = new OV.TreeView (this.mainDiv); this.detailsItem = new OV.TreeViewGroupItem ('Details', 'assets/images/tree/details.svg'); this.detailsItem.ShowChildren (!OV.IsSmallHeight (), null); this.treeView.AddItem (this.detailsItem); let childrenDiv = this.detailsItem.CreateChildrenDiv (); childrenDiv.addClass ('ov_info_panel_content'); this.popup = null; } SetOpenCloseHandler (openCloseHandler) { this.detailsItem.SetAnimated (false); this.detailsItem.SetOpenCloseHandler (openCloseHandler); } FillWithMaterialInfo (info, getMeshInfo, callbacks) { function AddRow (container, name, fillValue) { let row = $('
').addClass ('ov_info_box_row').appendTo (container); $('
').addClass ('ov_info_box_row_name').html (name).appendTo (row); let value = $('
').addClass ('ov_info_box_row_value').appendTo (row); fillValue (value); } function AddTextRow (container, name, value) { AddRow (container, name, function (valueDiv) { valueDiv.html (value).attr ('title', value); }); } function AddTextureRow (container, textureName) { AddRow (container, textureName.type, function (valueDiv) { valueDiv.html (textureName.name).attr ('title', textureName.path); }); } this.Clear (); if (info === null) { return; } let contentDiv = this.detailsItem.GetChildrenDiv (); let infoContainer = $('
').addClass ('ov_info_box').appendTo (contentDiv); AddRow (infoContainer, 'Color', function (valueDiv) { let colorString = '#' + OV.ColorToHexString (info.diffuse); $('
').addClass ('ov_info_box_rgbbox').css ('background', colorString).attr ('title', colorString).appendTo (valueDiv); $('
').addClass ('ov_info_box_rgbtext').html (colorString).attr ('title', colorString).appendTo (valueDiv); }); let opacityString = parseInt (Math.round (info.opacity * 100.0), 10) + '%'; AddTextRow (infoContainer, 'Opacity', opacityString); if (info.textureNames.length > 0) { let texturesContainer = $('
').addClass ('ov_info_box').appendTo (contentDiv); $('
').addClass ('ov_info_box_title').html ('Textures').appendTo (texturesContainer); let texturesContent = $('
').addClass ('ov_info_box_details').appendTo (texturesContainer); for (let i = 0; i < info.textureNames.length; i++) { let textureName = info.textureNames[i]; AddTextureRow (texturesContent, textureName); } } let meshItems = []; for (let i = 0; i < info.usedByMeshes.length; i++) { let meshInfo = getMeshInfo (info.usedByMeshes[i]); meshItems.push ({ name : OV.GetMeshName (meshInfo.name) }); } let obj = this; let meshesText = 'Meshes (' + meshItems.length + ')'; this.CreateButton (contentDiv, meshesText, function (button) { if (meshItems.length === 0) { return; } obj.popup = OV.ShowListPopup (button, meshItems, { onHoverStart : function (index) { callbacks.onMeshHover (info.usedByMeshes[index]); }, onHoverStop : function (index) { callbacks.onMeshHover (null); }, onClick : function (index) { callbacks.onMeshSelect (info.usedByMeshes[index]); } }); }); } FillWithModelInfo (info, getMaterialInfo, callbacks) { function AddCounter (parent, name, value) { let infoBox = $('
').addClass ('ov_info_box_column').css ('width', '50%').appendTo (parent); $('
').addClass ('ov_info_box_title').html (name).appendTo (infoBox); $('
').addClass ('ov_info_box_content_big').html (value.toLocaleString ('en-US')).appendTo (infoBox); } this.Clear (); if (info === null) { return; } let contentDiv = this.detailsItem.GetChildrenDiv (); let counterContainer = $('
').addClass ('ov_info_box').appendTo (contentDiv); AddCounter (counterContainer, 'Vertices', info.vertexCount); AddCounter (counterContainer, 'Triangles', info.triangleCount); let sizeContainer = $('
').addClass ('ov_info_box').appendTo (contentDiv); $('
').addClass ('ov_info_box_title').html ('Size').appendTo (sizeContainer); let size = OV.SubCoord3D (info.boundingBox.max, info.boundingBox.min); let sizeString = size.x.toFixed (1) + ' x ' + size.y.toFixed (1) + ' x ' + size.z.toFixed (1); $('
').addClass ('ov_info_box_content').html (sizeString).attr ('title', sizeString).appendTo (sizeContainer); let materialItems = []; for (let i = 0; i < info.usedMaterials.length; i++) { let materialInfo = getMaterialInfo (info.usedMaterials[i]); materialItems.push ({ name : OV.GetMaterialName (materialInfo.name), color : OV.ColorToHexString (materialInfo.diffuse) }); } let obj = this; let materialsText = 'Materials (' + materialItems.length + ')'; this.CreateButton (contentDiv, materialsText, function (button) { obj.popup = OV.ShowListPopup (button, materialItems, { onClick : function (index) { callbacks.onMaterialSelect (info.usedMaterials[index]); } }); }); } CreateButton (parentDiv, buttonText, onClick) { let button = $('
').addClass ('ov_info_box_button').appendTo (parentDiv); $('
').addClass ('ov_info_box_button_text').html (buttonText).appendTo (button); $('').addClass ('ov_info_box_button_icon').attr ('src', 'assets/images/tree/arrow_right.svg').appendTo (button); button.click (function () { onClick (button); }); } Clear () { if (this.popup !== null) { this.popup.Hide (); this.popup = null; } let contentDiv = this.detailsItem.GetChildrenDiv (); contentDiv.empty (); } };