Update duplicate model instance logic to handle asset placement

This commit is contained in:
2026-04-05 04:29:32 +02:00
parent 70cd0369e7
commit d3199fae5c

View File

@@ -1,4 +1,4 @@
import { cloneModelInstance } from "../assets/model-instances"; import { cloneModelInstance, createModelInstancePlacementPosition } from "../assets/model-instances";
import { createOpaqueId } from "../core/ids"; import { createOpaqueId } from "../core/ids";
import { cloneEditorSelection } from "../core/selection"; import { cloneEditorSelection } from "../core/selection";
import { cloneBoxBrush } from "../document/brushes"; import { cloneBoxBrush } from "../document/brushes";
@@ -32,10 +32,14 @@ function duplicateEntity(entity) {
return duplicatedEntity; return duplicatedEntity;
} }
function duplicateModelInstance(modelInstance) { function duplicateModelInstance(modelInstance, currentDocument) {
const duplicatedModelInstance = cloneModelInstance(modelInstance); const duplicatedModelInstance = cloneModelInstance(modelInstance);
duplicatedModelInstance.id = createOpaqueId("model-instance"); duplicatedModelInstance.id = createOpaqueId("model-instance");
duplicatedModelInstance.position = applyDuplicateSelectionOffset(duplicatedModelInstance.position); const anchoredDuplicatePosition = applyDuplicateSelectionOffset(duplicatedModelInstance.position);
const referencedAsset = currentDocument.assets[duplicatedModelInstance.assetId];
duplicatedModelInstance.position = referencedAsset !== undefined && referencedAsset.kind === "model"
? createModelInstancePlacementPosition(referencedAsset, anchoredDuplicatePosition)
: anchoredDuplicatePosition;
return duplicatedModelInstance; return duplicatedModelInstance;
} }
@@ -123,7 +127,7 @@ function createDuplicateSelectionResult(currentDocument, selection) {
throw new Error(`Model instance ${modelInstanceId} does not exist.`); throw new Error(`Model instance ${modelInstanceId} does not exist.`);
} }
return duplicateModelInstance(sourceModelInstance); return duplicateModelInstance(sourceModelInstance, currentDocument);
}); });
return { return {