diff --git a/Sources/arm/io/ImportMesh.hx b/Sources/arm/io/ImportMesh.hx index fc8f2c86..9f1aca0e 100644 --- a/Sources/arm/io/ImportMesh.hx +++ b/Sources/arm/io/ImportMesh.hx @@ -155,6 +155,15 @@ class ImportMesh { object.name = mesh.name; object.skip_context = "paint"; + // Ensure unique names + for (p in Project.paintObjects) { + if (p.name == object.name) { + p.name += ".001"; + p.data.handle += ".001"; + Data.cachedMeshes.set(p.data.handle, p.data); + } + } + Project.paintObjects.push(object); md.handle = raw.name; diff --git a/Sources/arm/ui/TabMeshes.hx b/Sources/arm/ui/TabMeshes.hx index eecbe530..bebb017f 100644 --- a/Sources/arm/ui/TabMeshes.hx +++ b/Sources/arm/ui/TabMeshes.hx @@ -65,7 +65,8 @@ class TabMeshes { ui.endSticky(); - for (o in Project.paintObjects) { + for (i in 0...Project.paintObjects.length) { + var o = Project.paintObjects[i]; var h = Id.handle(); h.selected = o.visible; o.visible = ui.check(h, o.name); @@ -75,7 +76,26 @@ class TabMeshes { if (ui.button(tr("Export"), Left)) { BoxExport.showMesh(); } - }, 2); + if (Project.paintObjects.length > 1 && ui.button(tr("Delete"), Left)) { + Project.paintObjects.remove(o); + while (o.children.length > 0) { + var child = o.children[0]; + o.removeChild(child); + if (Project.paintObjects[0] != child) { + Project.paintObjects[0].addChild(child); + } + if (o.children.length == 0) { + Project.paintObjects[0].transform.scale.setFrom(o.transform.scale); + Project.paintObjects[0].transform.buildMatrix(); + } + } + iron.data.Data.deleteMesh(o.data.handle); + o.remove(); + Context.paintObject = Context.mainObject(); + MeshUtil.mergeMesh(); + Context.ddirty = 2; + } + }, Project.paintObjects.length > 1 ? 3 : 2); } if (h.changed) { var visibles: Array = [];