add edges to artifact graph
This commit is contained in:
		@ -9,6 +9,7 @@ import { useModelingContext } from './useModelingContext'
 | 
			
		||||
import { getEventForSelectWithPoint } from 'lib/selections'
 | 
			
		||||
import {
 | 
			
		||||
  getCapCodeRef,
 | 
			
		||||
  getExtrudeEdgeCodeRef,
 | 
			
		||||
  getExtrusionFromSuspectedExtrudeSurface,
 | 
			
		||||
  getSolid2dCodeRef,
 | 
			
		||||
  getWallCodeRef,
 | 
			
		||||
@ -60,6 +61,13 @@ export function useEngineConnectionSubscriptions() {
 | 
			
		||||
                ? [codeRef.range]
 | 
			
		||||
                : [codeRef.range, extrusion.codeRef.range]
 | 
			
		||||
            )
 | 
			
		||||
          } else if (artifact?.type === 'extrudeEdge') {
 | 
			
		||||
            const codeRef = getExtrudeEdgeCodeRef(
 | 
			
		||||
              artifact,
 | 
			
		||||
              engineCommandManager.artifactGraph
 | 
			
		||||
            )
 | 
			
		||||
            if (err(codeRef)) return
 | 
			
		||||
            editorManager.setHighlightRange([codeRef.range])
 | 
			
		||||
          } else if (artifact?.type === 'segment') {
 | 
			
		||||
            editorManager.setHighlightRange([
 | 
			
		||||
              artifact?.codeRef?.range || [0, 0],
 | 
			
		||||
 | 
			
		||||
@ -58,7 +58,10 @@ Map {
 | 
			
		||||
        92,
 | 
			
		||||
      ],
 | 
			
		||||
    },
 | 
			
		||||
    "edgeIds": [],
 | 
			
		||||
    "edgeIds": [
 | 
			
		||||
      "UUID",
 | 
			
		||||
      "UUID",
 | 
			
		||||
    ],
 | 
			
		||||
    "pathId": "UUID",
 | 
			
		||||
    "surfaceId": "UUID",
 | 
			
		||||
    "type": "segment",
 | 
			
		||||
@ -77,7 +80,10 @@ Map {
 | 
			
		||||
      ],
 | 
			
		||||
    },
 | 
			
		||||
    "edgeCutId": "UUID",
 | 
			
		||||
    "edgeIds": [],
 | 
			
		||||
    "edgeIds": [
 | 
			
		||||
      "UUID",
 | 
			
		||||
      "UUID",
 | 
			
		||||
    ],
 | 
			
		||||
    "pathId": "UUID",
 | 
			
		||||
    "surfaceId": "UUID",
 | 
			
		||||
    "type": "segment",
 | 
			
		||||
@ -95,7 +101,10 @@ Map {
 | 
			
		||||
        156,
 | 
			
		||||
      ],
 | 
			
		||||
    },
 | 
			
		||||
    "edgeIds": [],
 | 
			
		||||
    "edgeIds": [
 | 
			
		||||
      "UUID",
 | 
			
		||||
      "UUID",
 | 
			
		||||
    ],
 | 
			
		||||
    "pathId": "UUID",
 | 
			
		||||
    "surfaceId": "UUID",
 | 
			
		||||
    "type": "segment",
 | 
			
		||||
@ -113,7 +122,10 @@ Map {
 | 
			
		||||
        209,
 | 
			
		||||
      ],
 | 
			
		||||
    },
 | 
			
		||||
    "edgeIds": [],
 | 
			
		||||
    "edgeIds": [
 | 
			
		||||
      "UUID",
 | 
			
		||||
      "UUID",
 | 
			
		||||
    ],
 | 
			
		||||
    "pathId": "UUID",
 | 
			
		||||
    "surfaceId": "UUID",
 | 
			
		||||
    "type": "segment",
 | 
			
		||||
@ -152,7 +164,16 @@ Map {
 | 
			
		||||
        266,
 | 
			
		||||
      ],
 | 
			
		||||
    },
 | 
			
		||||
    "edgeIds": [],
 | 
			
		||||
    "edgeIds": [
 | 
			
		||||
      "UUID",
 | 
			
		||||
      "UUID",
 | 
			
		||||
      "UUID",
 | 
			
		||||
      "UUID",
 | 
			
		||||
      "UUID",
 | 
			
		||||
      "UUID",
 | 
			
		||||
      "UUID",
 | 
			
		||||
      "UUID",
 | 
			
		||||
    ],
 | 
			
		||||
    "pathId": "UUID",
 | 
			
		||||
    "surfaceIds": [
 | 
			
		||||
      "UUID",
 | 
			
		||||
@ -209,6 +230,54 @@ Map {
 | 
			
		||||
    "type": "cap",
 | 
			
		||||
  },
 | 
			
		||||
  "UUID-15" => {
 | 
			
		||||
    "extrusionId": "UUID",
 | 
			
		||||
    "segId": "UUID",
 | 
			
		||||
    "subType": "adjacent",
 | 
			
		||||
    "type": "extrudeEdge",
 | 
			
		||||
  },
 | 
			
		||||
  "UUID-16" => {
 | 
			
		||||
    "extrusionId": "UUID",
 | 
			
		||||
    "segId": "UUID",
 | 
			
		||||
    "subType": "opposite",
 | 
			
		||||
    "type": "extrudeEdge",
 | 
			
		||||
  },
 | 
			
		||||
  "UUID-17" => {
 | 
			
		||||
    "extrusionId": "UUID",
 | 
			
		||||
    "segId": "UUID",
 | 
			
		||||
    "subType": "adjacent",
 | 
			
		||||
    "type": "extrudeEdge",
 | 
			
		||||
  },
 | 
			
		||||
  "UUID-18" => {
 | 
			
		||||
    "extrusionId": "UUID",
 | 
			
		||||
    "segId": "UUID",
 | 
			
		||||
    "subType": "opposite",
 | 
			
		||||
    "type": "extrudeEdge",
 | 
			
		||||
  },
 | 
			
		||||
  "UUID-19" => {
 | 
			
		||||
    "extrusionId": "UUID",
 | 
			
		||||
    "segId": "UUID",
 | 
			
		||||
    "subType": "adjacent",
 | 
			
		||||
    "type": "extrudeEdge",
 | 
			
		||||
  },
 | 
			
		||||
  "UUID-20" => {
 | 
			
		||||
    "extrusionId": "UUID",
 | 
			
		||||
    "segId": "UUID",
 | 
			
		||||
    "subType": "opposite",
 | 
			
		||||
    "type": "extrudeEdge",
 | 
			
		||||
  },
 | 
			
		||||
  "UUID-21" => {
 | 
			
		||||
    "extrusionId": "UUID",
 | 
			
		||||
    "segId": "UUID",
 | 
			
		||||
    "subType": "adjacent",
 | 
			
		||||
    "type": "extrudeEdge",
 | 
			
		||||
  },
 | 
			
		||||
  "UUID-22" => {
 | 
			
		||||
    "extrusionId": "UUID",
 | 
			
		||||
    "segId": "UUID",
 | 
			
		||||
    "subType": "opposite",
 | 
			
		||||
    "type": "extrudeEdge",
 | 
			
		||||
  },
 | 
			
		||||
  "UUID-23" => {
 | 
			
		||||
    "codeRef": {
 | 
			
		||||
      "pathToNode": [
 | 
			
		||||
        [
 | 
			
		||||
@ -226,7 +295,7 @@ Map {
 | 
			
		||||
    "subType": "fillet",
 | 
			
		||||
    "type": "edgeCut",
 | 
			
		||||
  },
 | 
			
		||||
  "UUID-16" => {
 | 
			
		||||
  "UUID-24" => {
 | 
			
		||||
    "codeRef": {
 | 
			
		||||
      "pathToNode": [
 | 
			
		||||
        [
 | 
			
		||||
@ -250,7 +319,7 @@ Map {
 | 
			
		||||
    "solid2dId": "UUID",
 | 
			
		||||
    "type": "path",
 | 
			
		||||
  },
 | 
			
		||||
  "UUID-17" => {
 | 
			
		||||
  "UUID-25" => {
 | 
			
		||||
    "codeRef": {
 | 
			
		||||
      "pathToNode": [
 | 
			
		||||
        [
 | 
			
		||||
@ -263,12 +332,15 @@ Map {
 | 
			
		||||
        416,
 | 
			
		||||
      ],
 | 
			
		||||
    },
 | 
			
		||||
    "edgeIds": [],
 | 
			
		||||
    "edgeIds": [
 | 
			
		||||
      "UUID",
 | 
			
		||||
      "UUID",
 | 
			
		||||
    ],
 | 
			
		||||
    "pathId": "UUID",
 | 
			
		||||
    "surfaceId": "UUID",
 | 
			
		||||
    "type": "segment",
 | 
			
		||||
  },
 | 
			
		||||
  "UUID-18" => {
 | 
			
		||||
  "UUID-26" => {
 | 
			
		||||
    "codeRef": {
 | 
			
		||||
      "pathToNode": [
 | 
			
		||||
        [
 | 
			
		||||
@ -281,12 +353,15 @@ Map {
 | 
			
		||||
        438,
 | 
			
		||||
      ],
 | 
			
		||||
    },
 | 
			
		||||
    "edgeIds": [],
 | 
			
		||||
    "edgeIds": [
 | 
			
		||||
      "UUID",
 | 
			
		||||
      "UUID",
 | 
			
		||||
    ],
 | 
			
		||||
    "pathId": "UUID",
 | 
			
		||||
    "surfaceId": "UUID",
 | 
			
		||||
    "type": "segment",
 | 
			
		||||
  },
 | 
			
		||||
  "UUID-19" => {
 | 
			
		||||
  "UUID-27" => {
 | 
			
		||||
    "codeRef": {
 | 
			
		||||
      "pathToNode": [
 | 
			
		||||
        [
 | 
			
		||||
@ -299,12 +374,15 @@ Map {
 | 
			
		||||
        491,
 | 
			
		||||
      ],
 | 
			
		||||
    },
 | 
			
		||||
    "edgeIds": [],
 | 
			
		||||
    "edgeIds": [
 | 
			
		||||
      "UUID",
 | 
			
		||||
      "UUID",
 | 
			
		||||
    ],
 | 
			
		||||
    "pathId": "UUID",
 | 
			
		||||
    "surfaceId": "UUID",
 | 
			
		||||
    "type": "segment",
 | 
			
		||||
  },
 | 
			
		||||
  "UUID-20" => {
 | 
			
		||||
  "UUID-28" => {
 | 
			
		||||
    "codeRef": {
 | 
			
		||||
      "pathToNode": [
 | 
			
		||||
        [
 | 
			
		||||
@ -321,11 +399,11 @@ Map {
 | 
			
		||||
    "pathId": "UUID",
 | 
			
		||||
    "type": "segment",
 | 
			
		||||
  },
 | 
			
		||||
  "UUID-21" => {
 | 
			
		||||
  "UUID-29" => {
 | 
			
		||||
    "pathId": "UUID",
 | 
			
		||||
    "type": "solid2D",
 | 
			
		||||
  },
 | 
			
		||||
  "UUID-22" => {
 | 
			
		||||
  "UUID-30" => {
 | 
			
		||||
    "codeRef": {
 | 
			
		||||
      "pathToNode": [
 | 
			
		||||
        [
 | 
			
		||||
@ -338,7 +416,14 @@ Map {
 | 
			
		||||
        546,
 | 
			
		||||
      ],
 | 
			
		||||
    },
 | 
			
		||||
    "edgeIds": [],
 | 
			
		||||
    "edgeIds": [
 | 
			
		||||
      "UUID",
 | 
			
		||||
      "UUID",
 | 
			
		||||
      "UUID",
 | 
			
		||||
      "UUID",
 | 
			
		||||
      "UUID",
 | 
			
		||||
      "UUID",
 | 
			
		||||
    ],
 | 
			
		||||
    "pathId": "UUID",
 | 
			
		||||
    "surfaceIds": [
 | 
			
		||||
      "UUID",
 | 
			
		||||
@ -349,40 +434,76 @@ Map {
 | 
			
		||||
    ],
 | 
			
		||||
    "type": "extrusion",
 | 
			
		||||
  },
 | 
			
		||||
  "UUID-23" => {
 | 
			
		||||
  "UUID-31" => {
 | 
			
		||||
    "edgeCutEdgeIds": [],
 | 
			
		||||
    "extrusionId": "UUID",
 | 
			
		||||
    "pathIds": [],
 | 
			
		||||
    "segId": "UUID",
 | 
			
		||||
    "type": "wall",
 | 
			
		||||
  },
 | 
			
		||||
  "UUID-24" => {
 | 
			
		||||
  "UUID-32" => {
 | 
			
		||||
    "edgeCutEdgeIds": [],
 | 
			
		||||
    "extrusionId": "UUID",
 | 
			
		||||
    "pathIds": [],
 | 
			
		||||
    "segId": "UUID",
 | 
			
		||||
    "type": "wall",
 | 
			
		||||
  },
 | 
			
		||||
  "UUID-25" => {
 | 
			
		||||
  "UUID-33" => {
 | 
			
		||||
    "edgeCutEdgeIds": [],
 | 
			
		||||
    "extrusionId": "UUID",
 | 
			
		||||
    "pathIds": [],
 | 
			
		||||
    "segId": "UUID",
 | 
			
		||||
    "type": "wall",
 | 
			
		||||
  },
 | 
			
		||||
  "UUID-26" => {
 | 
			
		||||
  "UUID-34" => {
 | 
			
		||||
    "edgeCutEdgeIds": [],
 | 
			
		||||
    "extrusionId": "UUID",
 | 
			
		||||
    "pathIds": [],
 | 
			
		||||
    "subType": "start",
 | 
			
		||||
    "type": "cap",
 | 
			
		||||
  },
 | 
			
		||||
  "UUID-27" => {
 | 
			
		||||
  "UUID-35" => {
 | 
			
		||||
    "edgeCutEdgeIds": [],
 | 
			
		||||
    "extrusionId": "UUID",
 | 
			
		||||
    "pathIds": [],
 | 
			
		||||
    "subType": "end",
 | 
			
		||||
    "type": "cap",
 | 
			
		||||
  },
 | 
			
		||||
  "UUID-36" => {
 | 
			
		||||
    "extrusionId": "UUID",
 | 
			
		||||
    "segId": "UUID",
 | 
			
		||||
    "subType": "adjacent",
 | 
			
		||||
    "type": "extrudeEdge",
 | 
			
		||||
  },
 | 
			
		||||
  "UUID-37" => {
 | 
			
		||||
    "extrusionId": "UUID",
 | 
			
		||||
    "segId": "UUID",
 | 
			
		||||
    "subType": "opposite",
 | 
			
		||||
    "type": "extrudeEdge",
 | 
			
		||||
  },
 | 
			
		||||
  "UUID-38" => {
 | 
			
		||||
    "extrusionId": "UUID",
 | 
			
		||||
    "segId": "UUID",
 | 
			
		||||
    "subType": "adjacent",
 | 
			
		||||
    "type": "extrudeEdge",
 | 
			
		||||
  },
 | 
			
		||||
  "UUID-39" => {
 | 
			
		||||
    "extrusionId": "UUID",
 | 
			
		||||
    "segId": "UUID",
 | 
			
		||||
    "subType": "opposite",
 | 
			
		||||
    "type": "extrudeEdge",
 | 
			
		||||
  },
 | 
			
		||||
  "UUID-40" => {
 | 
			
		||||
    "extrusionId": "UUID",
 | 
			
		||||
    "segId": "UUID",
 | 
			
		||||
    "subType": "adjacent",
 | 
			
		||||
    "type": "extrudeEdge",
 | 
			
		||||
  },
 | 
			
		||||
  "UUID-41" => {
 | 
			
		||||
    "extrusionId": "UUID",
 | 
			
		||||
    "segId": "UUID",
 | 
			
		||||
    "subType": "opposite",
 | 
			
		||||
    "type": "extrudeEdge",
 | 
			
		||||
  },
 | 
			
		||||
}
 | 
			
		||||
`;
 | 
			
		||||
 | 
			
		||||
@ -607,7 +607,7 @@ describe('testing getArtifactsToUpdate', () => {
 | 
			
		||||
        type: 'segment',
 | 
			
		||||
        pathId: expect.any(String),
 | 
			
		||||
        surfaceId: expect.any(String),
 | 
			
		||||
        edgeIds: [],
 | 
			
		||||
        edgeIds: expect.any(Array),
 | 
			
		||||
        codeRef: {
 | 
			
		||||
          range: [98, 125],
 | 
			
		||||
          pathToNode: [['body', '']],
 | 
			
		||||
@ -627,7 +627,7 @@ describe('testing getArtifactsToUpdate', () => {
 | 
			
		||||
        type: 'segment',
 | 
			
		||||
        pathId: expect.any(String),
 | 
			
		||||
        surfaceId: expect.any(String),
 | 
			
		||||
        edgeIds: [],
 | 
			
		||||
        edgeIds: expect.any(Array),
 | 
			
		||||
        codeRef: {
 | 
			
		||||
          range: [162, 209],
 | 
			
		||||
          pathToNode: [['body', '']],
 | 
			
		||||
@ -637,7 +637,7 @@ describe('testing getArtifactsToUpdate', () => {
 | 
			
		||||
        type: 'extrusion',
 | 
			
		||||
        pathId: expect.any(String),
 | 
			
		||||
        surfaceIds: expect.any(Array),
 | 
			
		||||
        edgeIds: [],
 | 
			
		||||
        edgeIds: expect.any(Array),
 | 
			
		||||
        codeRef: {
 | 
			
		||||
          range: [243, 266],
 | 
			
		||||
          pathToNode: [['body', '']],
 | 
			
		||||
@ -654,7 +654,7 @@ describe('testing getArtifactsToUpdate', () => {
 | 
			
		||||
        type: 'segment',
 | 
			
		||||
        pathId: expect.any(String),
 | 
			
		||||
        surfaceId: expect.any(String),
 | 
			
		||||
        edgeIds: [],
 | 
			
		||||
        edgeIds: expect.any(Array),
 | 
			
		||||
        codeRef: {
 | 
			
		||||
          range: [131, 156],
 | 
			
		||||
          pathToNode: [['body', '']],
 | 
			
		||||
@ -664,7 +664,7 @@ describe('testing getArtifactsToUpdate', () => {
 | 
			
		||||
        type: 'extrusion',
 | 
			
		||||
        pathId: expect.any(String),
 | 
			
		||||
        surfaceIds: expect.any(Array),
 | 
			
		||||
        edgeIds: [],
 | 
			
		||||
        edgeIds: expect.any(Array),
 | 
			
		||||
        codeRef: {
 | 
			
		||||
          range: [243, 266],
 | 
			
		||||
          pathToNode: [['body', '']],
 | 
			
		||||
@ -681,7 +681,7 @@ describe('testing getArtifactsToUpdate', () => {
 | 
			
		||||
        type: 'segment',
 | 
			
		||||
        pathId: expect.any(String),
 | 
			
		||||
        surfaceId: expect.any(String),
 | 
			
		||||
        edgeIds: [],
 | 
			
		||||
        edgeIds: expect.any(Array),
 | 
			
		||||
        codeRef: {
 | 
			
		||||
          range: [98, 125],
 | 
			
		||||
          pathToNode: [['body', '']],
 | 
			
		||||
@ -692,7 +692,7 @@ describe('testing getArtifactsToUpdate', () => {
 | 
			
		||||
        type: 'extrusion',
 | 
			
		||||
        pathId: expect.any(String),
 | 
			
		||||
        surfaceIds: expect.any(Array),
 | 
			
		||||
        edgeIds: [],
 | 
			
		||||
        edgeIds: expect.any(Array),
 | 
			
		||||
        codeRef: {
 | 
			
		||||
          range: [243, 266],
 | 
			
		||||
          pathToNode: [['body', '']],
 | 
			
		||||
@ -709,7 +709,7 @@ describe('testing getArtifactsToUpdate', () => {
 | 
			
		||||
        type: 'segment',
 | 
			
		||||
        pathId: expect.any(String),
 | 
			
		||||
        surfaceId: expect.any(String),
 | 
			
		||||
        edgeIds: [],
 | 
			
		||||
        edgeIds: expect.any(Array),
 | 
			
		||||
        codeRef: {
 | 
			
		||||
          range: [76, 92],
 | 
			
		||||
          pathToNode: [['body', '']],
 | 
			
		||||
@ -719,7 +719,7 @@ describe('testing getArtifactsToUpdate', () => {
 | 
			
		||||
        type: 'extrusion',
 | 
			
		||||
        pathId: expect.any(String),
 | 
			
		||||
        surfaceIds: expect.any(Array),
 | 
			
		||||
        edgeIds: [],
 | 
			
		||||
        edgeIds: expect.any(Array),
 | 
			
		||||
        codeRef: {
 | 
			
		||||
          range: [243, 266],
 | 
			
		||||
          pathToNode: [['body', '']],
 | 
			
		||||
@ -736,7 +736,7 @@ describe('testing getArtifactsToUpdate', () => {
 | 
			
		||||
        type: 'extrusion',
 | 
			
		||||
        pathId: expect.any(String),
 | 
			
		||||
        surfaceIds: expect.any(Array),
 | 
			
		||||
        edgeIds: [],
 | 
			
		||||
        edgeIds: expect.any(Array),
 | 
			
		||||
        codeRef: {
 | 
			
		||||
          range: [243, 266],
 | 
			
		||||
          pathToNode: [['body', '']],
 | 
			
		||||
@ -753,7 +753,7 @@ describe('testing getArtifactsToUpdate', () => {
 | 
			
		||||
        type: 'extrusion',
 | 
			
		||||
        pathId: expect.any(String),
 | 
			
		||||
        surfaceIds: expect.any(Array),
 | 
			
		||||
        edgeIds: [],
 | 
			
		||||
        edgeIds: expect.any(Array),
 | 
			
		||||
        codeRef: {
 | 
			
		||||
          range: [243, 266],
 | 
			
		||||
          pathToNode: [['body', '']],
 | 
			
		||||
 | 
			
		||||
@ -91,7 +91,7 @@ interface ExtrudeEdge {
 | 
			
		||||
  type: 'extrudeEdge'
 | 
			
		||||
  segId: string
 | 
			
		||||
  extrusionId: string
 | 
			
		||||
  edgeId: string
 | 
			
		||||
  subType: 'opposite' | 'adjacent'
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** A edgeCut is a more generic term for both fillet or chamfer */
 | 
			
		||||
@ -422,6 +422,54 @@ export function getArtifactsToUpdate({
 | 
			
		||||
      }
 | 
			
		||||
    })
 | 
			
		||||
    return returnArr
 | 
			
		||||
  } else if (
 | 
			
		||||
    (cmd.type === 'solid3d_get_opposite_edge' &&
 | 
			
		||||
      response.type === 'modeling' &&
 | 
			
		||||
      response.data.modeling_response.type === 'solid3d_get_opposite_edge' &&
 | 
			
		||||
      response.data.modeling_response.data.edge) ||
 | 
			
		||||
    (cmd.type === 'solid3d_get_prev_adjacent_edge' &&
 | 
			
		||||
      response.type === 'modeling' &&
 | 
			
		||||
      response.data.modeling_response.type ===
 | 
			
		||||
        'solid3d_get_prev_adjacent_edge' &&
 | 
			
		||||
      response.data.modeling_response.data.edge)
 | 
			
		||||
  ) {
 | 
			
		||||
    const wall = getArtifact(cmd.face_id)
 | 
			
		||||
    if (wall?.type !== 'wall') return returnArr
 | 
			
		||||
    const extrusion = getArtifact(wall.extrusionId)
 | 
			
		||||
    if (extrusion?.type !== 'extrusion') return returnArr
 | 
			
		||||
    const path = getArtifact(extrusion.pathId)
 | 
			
		||||
    if (path?.type !== 'path') return returnArr
 | 
			
		||||
    const segment = getArtifact(cmd.edge_id)
 | 
			
		||||
    if (segment?.type !== 'segment') return returnArr
 | 
			
		||||
 | 
			
		||||
    return [
 | 
			
		||||
      {
 | 
			
		||||
        id: response.data.modeling_response.data.edge,
 | 
			
		||||
        artifact: {
 | 
			
		||||
          type: 'extrudeEdge',
 | 
			
		||||
          subType:
 | 
			
		||||
            cmd.type === 'solid3d_get_prev_adjacent_edge'
 | 
			
		||||
              ? 'opposite'
 | 
			
		||||
              : 'adjacent',
 | 
			
		||||
          segId: cmd.edge_id,
 | 
			
		||||
          extrusionId: path.extrusionId,
 | 
			
		||||
        },
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        id: cmd.edge_id,
 | 
			
		||||
        artifact: {
 | 
			
		||||
          ...segment,
 | 
			
		||||
          edgeIds: [response.data.modeling_response.data.edge],
 | 
			
		||||
        },
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        id: path.extrusionId,
 | 
			
		||||
        artifact: {
 | 
			
		||||
          ...extrusion,
 | 
			
		||||
          edgeIds: [response.data.modeling_response.data.edge],
 | 
			
		||||
        },
 | 
			
		||||
      },
 | 
			
		||||
    ]
 | 
			
		||||
  } else if (cmd.type === 'solid3d_fillet_edge') {
 | 
			
		||||
    returnArr.push({
 | 
			
		||||
      id,
 | 
			
		||||
@ -655,6 +703,18 @@ export function getWallCodeRef(
 | 
			
		||||
  return seg.codeRef
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export function getExtrudeEdgeCodeRef(
 | 
			
		||||
  edge: ExtrudeEdge,
 | 
			
		||||
  artifactGraph: ArtifactGraph
 | 
			
		||||
): CommonCommandProperties | Error {
 | 
			
		||||
  const seg = getArtifactOfTypes(
 | 
			
		||||
    { key: edge.segId, types: ['segment'] },
 | 
			
		||||
    artifactGraph
 | 
			
		||||
  )
 | 
			
		||||
  if (err(seg)) return seg
 | 
			
		||||
  return seg.codeRef
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export function getExtrusionFromSuspectedExtrudeSurface(
 | 
			
		||||
  id: string,
 | 
			
		||||
  artifactGraph: ArtifactGraph
 | 
			
		||||
 | 
			
		||||
@ -33,6 +33,7 @@ import {
 | 
			
		||||
  getArtifactOfTypes,
 | 
			
		||||
  getArtifactsOfTypes,
 | 
			
		||||
  getCapCodeRef,
 | 
			
		||||
  getExtrudeEdgeCodeRef,
 | 
			
		||||
  getSolid2dCodeRef,
 | 
			
		||||
  getWallCodeRef,
 | 
			
		||||
} from 'lang/std/artifactGraph'
 | 
			
		||||
@ -85,6 +86,7 @@ export async function getEventForSelectWithPoint({
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  let _artifact = engineCommandManager.artifactGraph.get(data.entity_id)
 | 
			
		||||
  console.log('entity id', data.entity_id)
 | 
			
		||||
  if (!_artifact)
 | 
			
		||||
    return {
 | 
			
		||||
      type: 'Set selection',
 | 
			
		||||
@ -141,6 +143,21 @@ export async function getEventForSelectWithPoint({
 | 
			
		||||
      },
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  if (_artifact.type === 'extrudeEdge') {
 | 
			
		||||
    const codeRef = getExtrudeEdgeCodeRef(
 | 
			
		||||
      _artifact,
 | 
			
		||||
      engineCommandManager.artifactGraph
 | 
			
		||||
    )
 | 
			
		||||
    console.log('codeRef', codeRef)
 | 
			
		||||
    if (err(codeRef)) return null
 | 
			
		||||
    return {
 | 
			
		||||
      type: 'Set selection',
 | 
			
		||||
      data: {
 | 
			
		||||
        selectionType: 'singleCodeCursor',
 | 
			
		||||
        selection: { range: codeRef.range, type: 'edge' },
 | 
			
		||||
      },
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  return null
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -51,4 +51,39 @@ if (typeof window !== 'undefined') {
 | 
			
		||||
        padding: 0.2, // padding around the objects
 | 
			
		||||
      },
 | 
			
		||||
    })
 | 
			
		||||
  ;(window as any).getEdgesForAndAskEngineForType = async (faceId: string) => {
 | 
			
		||||
    // Kurt - Debugging tool used help to show edges aren't stable after further 3d operations
 | 
			
		||||
    // if this was added more than a few months ago, it probably can be removed.
 | 
			
		||||
    const face = engineCommandManager.artifactGraph.get(faceId)
 | 
			
		||||
    if (face?.type !== 'wall') {
 | 
			
		||||
      console.log('was expecting a wall, you gave me a ', face?.type)
 | 
			
		||||
      return
 | 
			
		||||
    }
 | 
			
		||||
    const extrusion = engineCommandManager.artifactGraph.get(face.extrusionId)
 | 
			
		||||
    if (extrusion?.type !== 'extrusion') {
 | 
			
		||||
      console.log('was expecting an extrusion, but got ', extrusion?.type)
 | 
			
		||||
      return
 | 
			
		||||
    }
 | 
			
		||||
    extrusion.edgeIds.forEach(async (edgeId) => {
 | 
			
		||||
      const result = await engineCommandManager
 | 
			
		||||
        .sendSceneCommand({
 | 
			
		||||
          type: 'modeling_cmd_req',
 | 
			
		||||
          cmd_id: uuidv4(),
 | 
			
		||||
          cmd: {
 | 
			
		||||
            type: 'get_entity_type',
 | 
			
		||||
            entity_id: edgeId,
 | 
			
		||||
          },
 | 
			
		||||
        })
 | 
			
		||||
        .catch((a) => console.log('error:', a))
 | 
			
		||||
      if (!result?.success) return
 | 
			
		||||
      if (result.resp.type !== 'modeling') return
 | 
			
		||||
      if (result.resp.data.modeling_response.type !== 'get_entity_type') return
 | 
			
		||||
      console.log(
 | 
			
		||||
        'result edge is: ',
 | 
			
		||||
        result.resp.data.modeling_response.data.entity_type,
 | 
			
		||||
        ' id: ',
 | 
			
		||||
        edgeId
 | 
			
		||||
      )
 | 
			
		||||
    })
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -181,6 +181,48 @@ pub(crate) async fn do_post_extrude(
 | 
			
		||||
        vec![]
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    for face_info in face_infos.iter() {
 | 
			
		||||
        if face_info.cap == kittycad::types::ExtrusionFaceCapType::None
 | 
			
		||||
            && face_info.face_id.is_some()
 | 
			
		||||
            && face_info.curve_id.is_some()
 | 
			
		||||
        {
 | 
			
		||||
            match args
 | 
			
		||||
                .batch_modeling_cmd(
 | 
			
		||||
                    uuid::Uuid::new_v4(),
 | 
			
		||||
                    kittycad::types::ModelingCmd::Solid3DGetOppositeEdge {
 | 
			
		||||
                        edge_id: face_info.curve_id.unwrap(),
 | 
			
		||||
                        object_id: sketch_group.id,
 | 
			
		||||
                        face_id: face_info.face_id.unwrap_or_default(),
 | 
			
		||||
                    },
 | 
			
		||||
                )
 | 
			
		||||
                .await
 | 
			
		||||
            {
 | 
			
		||||
                Ok(info) => info,
 | 
			
		||||
                Err(e) => {
 | 
			
		||||
                    eprintln!("Error fetching opposite edge: {:?}", e);
 | 
			
		||||
                    continue;
 | 
			
		||||
                }
 | 
			
		||||
            };
 | 
			
		||||
            match args
 | 
			
		||||
                .batch_modeling_cmd(
 | 
			
		||||
                    uuid::Uuid::new_v4(),
 | 
			
		||||
                    kittycad::types::ModelingCmd::Solid3DGetPrevAdjacentEdge {
 | 
			
		||||
                        edge_id: face_info.curve_id.unwrap(),
 | 
			
		||||
                        object_id: sketch_group.id,
 | 
			
		||||
                        face_id: face_info.face_id.unwrap(),
 | 
			
		||||
                    },
 | 
			
		||||
                )
 | 
			
		||||
                .await
 | 
			
		||||
            {
 | 
			
		||||
                Ok(info) => info,
 | 
			
		||||
                Err(e) => {
 | 
			
		||||
                    eprintln!("Error fetching adjacent edge: {:?}", e);
 | 
			
		||||
                    continue;
 | 
			
		||||
                }
 | 
			
		||||
            };
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Create a hashmap for quick id lookup
 | 
			
		||||
    let mut face_id_map = std::collections::HashMap::new();
 | 
			
		||||
    // creating fake ids for start and end caps is to make extrudes mock-execute safe
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user