updated with github #5
File diff suppressed because one or more lines are too long
|
After Width: | Height: | Size: 262 KiB |
@@ -0,0 +1,99 @@
|
|||||||
|
# =============================================
|
||||||
|
# mxPIC Cell/Project Definition File
|
||||||
|
# =============================================
|
||||||
|
schema_version: "2.0.0"
|
||||||
|
kind: cell
|
||||||
|
coordinate_system: gds_y_up
|
||||||
|
canvas_size:
|
||||||
|
width: 5000
|
||||||
|
height: 5000
|
||||||
|
project: mxpic_project_1
|
||||||
|
name: mxpic_project_1
|
||||||
|
type: project
|
||||||
|
version: "1.0.0"
|
||||||
|
|
||||||
|
# 1. External Ports (How this cell connects to the outside world)
|
||||||
|
ports: []
|
||||||
|
|
||||||
|
# 2. Instances (The sub-components dropped onto this canvas)
|
||||||
|
instances:
|
||||||
|
MMI_1:
|
||||||
|
component: Silterra/EMO1_2ML_CU_Al_RDL/primitives/multimode_interferometers/1x2MMI_1310nm_TE_Silterra_202603_ZKY_v2
|
||||||
|
x: 476.0
|
||||||
|
y: -2453.2
|
||||||
|
rotation: 0.0
|
||||||
|
flip: 0
|
||||||
|
flop: 0
|
||||||
|
mirror: false
|
||||||
|
settings:
|
||||||
|
length:
|
||||||
|
|
||||||
|
MMI_2:
|
||||||
|
component: Silterra/EMO1_2ML_CU_Al_RDL/primitives/multimode_interferometers/1x2MMI_1310nm_TE_Silterra_202603_ZKY_v2
|
||||||
|
x: 723.1
|
||||||
|
y: -2241.8
|
||||||
|
rotation: 0.0
|
||||||
|
flip: 0
|
||||||
|
flop: 0
|
||||||
|
mirror: false
|
||||||
|
settings:
|
||||||
|
length:
|
||||||
|
|
||||||
|
MMI_3:
|
||||||
|
component: Silterra/EMO1_2ML_CU_Al_RDL/primitives/multimode_interferometers/1x2MMI_1310nm_TE_Silterra_202603_ZKY_v2
|
||||||
|
x: 438.9
|
||||||
|
y: -2230.2
|
||||||
|
rotation: 0.0
|
||||||
|
flip: 0
|
||||||
|
flop: 0
|
||||||
|
mirror: false
|
||||||
|
settings:
|
||||||
|
length:
|
||||||
|
|
||||||
|
MMI_4:
|
||||||
|
component: Silterra/EMO1_2ML_CU_Al_RDL/primitives/multimode_interferometers/1x2MMI_1310nm_TE_Silterra_202603_ZKY_v2
|
||||||
|
x: 750.9
|
||||||
|
y: -2468.7
|
||||||
|
rotation: 0.0
|
||||||
|
flip: 0
|
||||||
|
flop: 0
|
||||||
|
mirror: false
|
||||||
|
settings:
|
||||||
|
length:
|
||||||
|
|
||||||
|
elements:
|
||||||
|
anchor_1:
|
||||||
|
type: anchor
|
||||||
|
x: 421.9
|
||||||
|
y: -2624.7
|
||||||
|
angle: 0.0
|
||||||
|
layer: WG_CORE
|
||||||
|
width: 0.5
|
||||||
|
description: ""
|
||||||
|
|
||||||
|
# 3. Bundles (Grouped links for multi-bus/parallel routing)
|
||||||
|
bundles:
|
||||||
|
output_bus:
|
||||||
|
routing_type: euler_bend
|
||||||
|
links:
|
||||||
|
- from: MMI_2:a1
|
||||||
|
to: MMI_1:b1
|
||||||
|
xsection: strip
|
||||||
|
family: optical
|
||||||
|
width: 0.45
|
||||||
|
radius: 10
|
||||||
|
routing_type: euler_bend
|
||||||
|
- from: anchor_1:right
|
||||||
|
to: MMI_4:a1
|
||||||
|
xsection: strip
|
||||||
|
family: optical
|
||||||
|
width: 0.45
|
||||||
|
radius: 10
|
||||||
|
routing_type: euler_bend
|
||||||
|
- from: anchor_1:left
|
||||||
|
to: MMI_3:a1
|
||||||
|
xsection: strip
|
||||||
|
family: optical
|
||||||
|
width: 0.45
|
||||||
|
radius: 10
|
||||||
|
routing_type: euler_bend
|
||||||
Binary file not shown.
@@ -5181,13 +5181,21 @@
|
|||||||
style: view.style,
|
style: view.style,
|
||||||
data: { route }
|
data: { route }
|
||||||
};
|
};
|
||||||
|
const nodeMap = Object.fromEntries(activePage.nodes.map(node => [node.id, node]));
|
||||||
|
const conflict = findSameTypeRouteCrossing(candidate, activePage.edges, nodeMap, technologyManifest);
|
||||||
|
if (conflict) {
|
||||||
|
const source = nodeMap[conflict.conflictEdge.source]?.data?.componentDisplayName || conflict.conflictEdge.source;
|
||||||
|
const target = nodeMap[conflict.conflictEdge.target]?.data?.componentDisplayName || conflict.conflictEdge.target;
|
||||||
|
addLog(`Connection rejected: ${route.xsection} route crosses ${source} to ${target}.`);
|
||||||
|
return;
|
||||||
|
}
|
||||||
setPages(prev => prev.map(p => (
|
setPages(prev => prev.map(p => (
|
||||||
p.id === activePageId
|
p.id === activePageId
|
||||||
? { ...p, edges: addEdge(candidate, p.edges) }
|
? { ...p, edges: addEdge(candidate, p.edges) }
|
||||||
: p
|
: p
|
||||||
)));
|
)));
|
||||||
addLog(`Connected ${connection.sourceHandle} to ${connection.targetHandle}.`);
|
addLog(`Connected ${connection.sourceHandle} to ${connection.targetHandle}.`);
|
||||||
}, [activePageId, activePage, rulerMode, currentLinkRoute, addLog]);
|
}, [activePageId, activePage, rulerMode, currentLinkRoute, technologyManifest, addLog]);
|
||||||
|
|
||||||
const handleRouteEdgeMouseDown = useCallback((event) => {
|
const handleRouteEdgeMouseDown = useCallback((event) => {
|
||||||
if (rulerMode) return false;
|
if (rulerMode) return false;
|
||||||
|
|||||||
@@ -92,9 +92,11 @@ assert(
|
|||||||
canvasHtml.includes('onConnect={handleBasicConnection}') &&
|
canvasHtml.includes('onConnect={handleBasicConnection}') &&
|
||||||
canvasHtml.includes('nodesConnectable={true}') &&
|
canvasHtml.includes('nodesConnectable={true}') &&
|
||||||
canvasHtml.includes('connectionMode="loose"') &&
|
canvasHtml.includes('connectionMode="loose"') &&
|
||||||
|
canvasHtml.includes('const conflict = findSameTypeRouteCrossing(candidate, activePage.edges, nodeMap, technologyManifest);') &&
|
||||||
|
canvasHtml.includes('Connection rejected:') &&
|
||||||
canvasHtml.includes('data: { route }') &&
|
canvasHtml.includes('data: { route }') &&
|
||||||
canvasHtml.includes('addEdge(candidate, p.edges)'),
|
canvasHtml.includes('addEdge(candidate, p.edges)'),
|
||||||
'canvas should use React Flow native pin-to-pin connections for new links'
|
'canvas should use React Flow native pin-to-pin connections and reject same-xsection crossings for new links'
|
||||||
);
|
);
|
||||||
assert(
|
assert(
|
||||||
!canvasHtml.includes('linkDraft') &&
|
!canvasHtml.includes('linkDraft') &&
|
||||||
|
|||||||
Reference in New Issue
Block a user