feat: persist stable sketch external geometry
This commit is contained in:
@@ -336,6 +336,28 @@ test('sketcher operations are facade transactions and survive the project fallba
|
||||
assert.equal(loaded?.objects.find((object) => object.id === 'sketch')?.sketch?.constraints[0].id, 'horizontal-1')
|
||||
})
|
||||
|
||||
test('external sketch geometry persists stable topology references and dependency edges', async () => {
|
||||
const facade = createMockFacade()
|
||||
const reference = createPersistedTopoRef('pad', { shapeId: 'pad', kind: 'edge', persistentId: 'edge:profile:1', topologyVersion: 2, status: 'stable', signature: 'line:10' }, 4)
|
||||
facade.app.sketcher.addExternalGeometry('sketch', {
|
||||
id: 'external-1',
|
||||
source: reference,
|
||||
projection: { id: 'projected-line', type: 'line', start: { x: 0, y: 0 }, end: { x: 10, y: 0 } },
|
||||
construction: true,
|
||||
})
|
||||
const sketch = facade.app.sketcher.get('sketch')
|
||||
assert.equal(sketch?.externalGeometry.length, 1)
|
||||
assert.deepEqual(facade.app.document.getDependencies().find((edge) => edge.propertyName === 'ExternalGeometry:external-1'), {
|
||||
sourceId: 'sketch', targetId: 'pad', relation: 'topo-ref', propertyName: 'ExternalGeometry:external-1', reference: 'edge:profile:1',
|
||||
})
|
||||
const persistence = createSqliteProjectPersistence()
|
||||
await persistence.save(facade.app.document.getActive())
|
||||
const loaded = await persistence.load('doc-pump-housing')
|
||||
assert.deepEqual(loaded?.objects.find((object) => object.id === 'sketch')?.sketch?.externalGeometry, sketch?.externalGeometry)
|
||||
assert.throws(() => facade.app.sketcher.addExternalGeometry('sketch', { id: 'self', source: { ...reference, objectId: 'sketch' }, projection: { id: 'self-line', type: 'line', start: { x: 0, y: 0 }, end: { x: 1, y: 0 } }, construction: true }), /cannot import external geometry from itself/)
|
||||
await persistence.dispose()
|
||||
})
|
||||
|
||||
test('Sketcher solve command is selection-aware and emits the standard command lifecycle', () => {
|
||||
const facade = createMockFacade()
|
||||
facade.gui.workbench.setActive('Sketcher')
|
||||
|
||||
Reference in New Issue
Block a user