@willcgage/module-schematic 0.46.0 → 0.48.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +81 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +29 -1
- package/dist/index.d.ts +29 -1
- package/dist/index.js +81 -2
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.cts
CHANGED
|
@@ -412,6 +412,9 @@ interface ModuleFootprintInput {
|
|
|
412
412
|
* When present it wins over the geometry-derived centre-line — the owner drew
|
|
413
413
|
* the real shape (#2d-track, physical view only). */
|
|
414
414
|
mainPath?: BenchworkPoint[] | null;
|
|
415
|
+
/** A balloon / return loop — the centre-line turns back on itself, so its far
|
|
416
|
+
* end is the THROAT, not an endplate; only endplate A's face is emitted (#loop). */
|
|
417
|
+
loop?: boolean;
|
|
415
418
|
}
|
|
416
419
|
interface OutlineFace {
|
|
417
420
|
/** The endplate face's two corners + midpoint (the track point). */
|
|
@@ -1039,6 +1042,31 @@ interface EndplatePose {
|
|
|
1039
1042
|
/** True when the pose was hand-entered, not derived (wye/loop/other). */
|
|
1040
1043
|
manual?: boolean;
|
|
1041
1044
|
}
|
|
1045
|
+
type ReturnLoopShape = "circle" | "teardrop" | "offset-teardrop" | "square";
|
|
1046
|
+
/** A computed return-loop: a mainline LEAD to the throat, a WYE that splits into
|
|
1047
|
+
* two legs, and the LOOP track those legs form, closing back at the throat. Pure
|
|
1048
|
+
* geometry, module-local inches, endplate A at the origin, lead heading +x. All
|
|
1049
|
+
* shapes are built so the loop CLOSES exactly at the throat and the two wye legs
|
|
1050
|
+
* diverge symmetrically about the lead — the piece the earlier eyeballed versions
|
|
1051
|
+
* kept getting wrong (#loop). */
|
|
1052
|
+
interface ReturnLoopGeometry {
|
|
1053
|
+
throat: BenchworkPoint;
|
|
1054
|
+
/** The loop track, throat → around → throat (starts and ends at the throat). */
|
|
1055
|
+
loop: BenchworkPoint[];
|
|
1056
|
+
/** The two diverging wye legs at the throat (each throat → its tangent point). */
|
|
1057
|
+
wyeLegs: [BenchworkPoint[], BenchworkPoint[]];
|
|
1058
|
+
/** Half the angle between the two wye legs, degrees (0 = tangent/no wye). */
|
|
1059
|
+
wyeHalfAngleDeg: number;
|
|
1060
|
+
/** Benchwork fascia: outer boundary, and an inner boundary for a donut (empty
|
|
1061
|
+
* when the board is solid). */
|
|
1062
|
+
outlineOuter: BenchworkPoint[];
|
|
1063
|
+
outlineInner: BenchworkPoint[];
|
|
1064
|
+
}
|
|
1065
|
+
declare function returnLoop(shape: ReturnLoopShape, opts: {
|
|
1066
|
+
leadInches: number;
|
|
1067
|
+
radius: number;
|
|
1068
|
+
boardHalfWidth?: number;
|
|
1069
|
+
}): ReturnLoopGeometry;
|
|
1042
1070
|
interface ModuleGeometryInput {
|
|
1043
1071
|
lengthInches: number;
|
|
1044
1072
|
geometryType?: string | null;
|
|
@@ -1138,4 +1166,4 @@ declare function poseOverridesFromDoc(doc: ModuleSchematicDoc): Record<string, {
|
|
|
1138
1166
|
heading: number;
|
|
1139
1167
|
}>;
|
|
1140
1168
|
|
|
1141
|
-
export { type BenchworkPoint, type BranchConnector, type DrawCrossing, type DrawCrossover, type DrawIndustry, type DrawSignal, type DrawTrack, type DrawTurnout, ENDPLATE_FASCIA_CLEAR_INCHES, ENDPLATE_LEAD_INCHES, type EditorBranch, type EditorControlPoint, type EditorCpSignal, type EditorCrossing, type EditorIndustry, type EditorState, type EditorTrack, type EditorTurnout, type EndplateBConfig, type EndplatePose, type EndplateTrackIssue, type EndplateWidthIssue, FREEMO_ENDPLATE_TRACK_FASCIA_CLEARANCE_INCHES, FREEMO_ENDPLATE_WIDTH_MIN_INCHES, FREEMO_ENDPLATE_WIDTH_RECOMMENDED_INCHES, FREEMO_TRACK_SPACING_INCHES, type GeometryType, type IndustryLabelMode, type IndustrySpot, MAIN2_TRACK_ID, MAIN_TRACK_ID, type ModuleFeatures, type ModuleFootprint, type ModuleFootprintInput, type ModuleGeometryInput, type ModuleSchematicDoc, type ModuleTrackRow, N_CAR_LENGTH_INCHES, N_SCALE_RATIO, type OutlineFace, type SchematicBlock, type SchematicControlPoint, type SchematicCrossing, type SchematicEndplate, type SchematicEndplateTrack, type SchematicIndustry, type SchematicSection, type SchematicSignal, type SchematicTrack, type SchematicTurnout, type SectionAdjacency, type SectionFootprint, type SectionRelativePos, type SignalFacing, type SignalSide, type TrackConfig, type TrackRole, type TurnoutKind, WHOLE_MODULE_SECTION_ID, asModuleSchematic, benchworkBand, benchworkOutline, buildCrossover, buildPassingSiding, buildTransition, carCapacity, checkEndplateWidth, deriveEndplatePoses, divergeSideForHand, docToState, emptyEditorState, endplateFaceSegments, endplateLead, endplateTrackOffsetFor, endplateTrackOffsetInches, endplateWidthInches, fromSectionRelative, geometryTurnDegrees, inchesToScaleFeet, isLoopDoc, isTransitionTurnout, moduleCenterline, moduleFeatures, moduleFootprint, moduleLengthFromSections, moduleSections, nextId, poseNeedsManual, poseOverridesFromDoc, remapPos, sampleBenchworkOutline, samplePath, scaleFeetToInches, sectionAdjacency, sectionBand, sectionBreaksFromSections, sectionComponents, sectionFootprints, sectionNeighbours, sectionSpans, sectionSpansOrWhole, sectionedCenterline, sectionedEndPose, sliceCenterline, stateToDoc, toSectionRelative, trackMeetsEndplateIssues, trackPath };
|
|
1169
|
+
export { type BenchworkPoint, type BranchConnector, type DrawCrossing, type DrawCrossover, type DrawIndustry, type DrawSignal, type DrawTrack, type DrawTurnout, ENDPLATE_FASCIA_CLEAR_INCHES, ENDPLATE_LEAD_INCHES, type EditorBranch, type EditorControlPoint, type EditorCpSignal, type EditorCrossing, type EditorIndustry, type EditorState, type EditorTrack, type EditorTurnout, type EndplateBConfig, type EndplatePose, type EndplateTrackIssue, type EndplateWidthIssue, FREEMO_ENDPLATE_TRACK_FASCIA_CLEARANCE_INCHES, FREEMO_ENDPLATE_WIDTH_MIN_INCHES, FREEMO_ENDPLATE_WIDTH_RECOMMENDED_INCHES, FREEMO_TRACK_SPACING_INCHES, type GeometryType, type IndustryLabelMode, type IndustrySpot, MAIN2_TRACK_ID, MAIN_TRACK_ID, type ModuleFeatures, type ModuleFootprint, type ModuleFootprintInput, type ModuleGeometryInput, type ModuleSchematicDoc, type ModuleTrackRow, N_CAR_LENGTH_INCHES, N_SCALE_RATIO, type OutlineFace, type ReturnLoopGeometry, type ReturnLoopShape, type SchematicBlock, type SchematicControlPoint, type SchematicCrossing, type SchematicEndplate, type SchematicEndplateTrack, type SchematicIndustry, type SchematicSection, type SchematicSignal, type SchematicTrack, type SchematicTurnout, type SectionAdjacency, type SectionFootprint, type SectionRelativePos, type SignalFacing, type SignalSide, type TrackConfig, type TrackRole, type TurnoutKind, WHOLE_MODULE_SECTION_ID, asModuleSchematic, benchworkBand, benchworkOutline, buildCrossover, buildPassingSiding, buildTransition, carCapacity, checkEndplateWidth, deriveEndplatePoses, divergeSideForHand, docToState, emptyEditorState, endplateFaceSegments, endplateLead, endplateTrackOffsetFor, endplateTrackOffsetInches, endplateWidthInches, fromSectionRelative, geometryTurnDegrees, inchesToScaleFeet, isLoopDoc, isTransitionTurnout, moduleCenterline, moduleFeatures, moduleFootprint, moduleLengthFromSections, moduleSections, nextId, poseNeedsManual, poseOverridesFromDoc, remapPos, returnLoop, sampleBenchworkOutline, samplePath, scaleFeetToInches, sectionAdjacency, sectionBand, sectionBreaksFromSections, sectionComponents, sectionFootprints, sectionNeighbours, sectionSpans, sectionSpansOrWhole, sectionedCenterline, sectionedEndPose, sliceCenterline, stateToDoc, toSectionRelative, trackMeetsEndplateIssues, trackPath };
|
package/dist/index.d.ts
CHANGED
|
@@ -412,6 +412,9 @@ interface ModuleFootprintInput {
|
|
|
412
412
|
* When present it wins over the geometry-derived centre-line — the owner drew
|
|
413
413
|
* the real shape (#2d-track, physical view only). */
|
|
414
414
|
mainPath?: BenchworkPoint[] | null;
|
|
415
|
+
/** A balloon / return loop — the centre-line turns back on itself, so its far
|
|
416
|
+
* end is the THROAT, not an endplate; only endplate A's face is emitted (#loop). */
|
|
417
|
+
loop?: boolean;
|
|
415
418
|
}
|
|
416
419
|
interface OutlineFace {
|
|
417
420
|
/** The endplate face's two corners + midpoint (the track point). */
|
|
@@ -1039,6 +1042,31 @@ interface EndplatePose {
|
|
|
1039
1042
|
/** True when the pose was hand-entered, not derived (wye/loop/other). */
|
|
1040
1043
|
manual?: boolean;
|
|
1041
1044
|
}
|
|
1045
|
+
type ReturnLoopShape = "circle" | "teardrop" | "offset-teardrop" | "square";
|
|
1046
|
+
/** A computed return-loop: a mainline LEAD to the throat, a WYE that splits into
|
|
1047
|
+
* two legs, and the LOOP track those legs form, closing back at the throat. Pure
|
|
1048
|
+
* geometry, module-local inches, endplate A at the origin, lead heading +x. All
|
|
1049
|
+
* shapes are built so the loop CLOSES exactly at the throat and the two wye legs
|
|
1050
|
+
* diverge symmetrically about the lead — the piece the earlier eyeballed versions
|
|
1051
|
+
* kept getting wrong (#loop). */
|
|
1052
|
+
interface ReturnLoopGeometry {
|
|
1053
|
+
throat: BenchworkPoint;
|
|
1054
|
+
/** The loop track, throat → around → throat (starts and ends at the throat). */
|
|
1055
|
+
loop: BenchworkPoint[];
|
|
1056
|
+
/** The two diverging wye legs at the throat (each throat → its tangent point). */
|
|
1057
|
+
wyeLegs: [BenchworkPoint[], BenchworkPoint[]];
|
|
1058
|
+
/** Half the angle between the two wye legs, degrees (0 = tangent/no wye). */
|
|
1059
|
+
wyeHalfAngleDeg: number;
|
|
1060
|
+
/** Benchwork fascia: outer boundary, and an inner boundary for a donut (empty
|
|
1061
|
+
* when the board is solid). */
|
|
1062
|
+
outlineOuter: BenchworkPoint[];
|
|
1063
|
+
outlineInner: BenchworkPoint[];
|
|
1064
|
+
}
|
|
1065
|
+
declare function returnLoop(shape: ReturnLoopShape, opts: {
|
|
1066
|
+
leadInches: number;
|
|
1067
|
+
radius: number;
|
|
1068
|
+
boardHalfWidth?: number;
|
|
1069
|
+
}): ReturnLoopGeometry;
|
|
1042
1070
|
interface ModuleGeometryInput {
|
|
1043
1071
|
lengthInches: number;
|
|
1044
1072
|
geometryType?: string | null;
|
|
@@ -1138,4 +1166,4 @@ declare function poseOverridesFromDoc(doc: ModuleSchematicDoc): Record<string, {
|
|
|
1138
1166
|
heading: number;
|
|
1139
1167
|
}>;
|
|
1140
1168
|
|
|
1141
|
-
export { type BenchworkPoint, type BranchConnector, type DrawCrossing, type DrawCrossover, type DrawIndustry, type DrawSignal, type DrawTrack, type DrawTurnout, ENDPLATE_FASCIA_CLEAR_INCHES, ENDPLATE_LEAD_INCHES, type EditorBranch, type EditorControlPoint, type EditorCpSignal, type EditorCrossing, type EditorIndustry, type EditorState, type EditorTrack, type EditorTurnout, type EndplateBConfig, type EndplatePose, type EndplateTrackIssue, type EndplateWidthIssue, FREEMO_ENDPLATE_TRACK_FASCIA_CLEARANCE_INCHES, FREEMO_ENDPLATE_WIDTH_MIN_INCHES, FREEMO_ENDPLATE_WIDTH_RECOMMENDED_INCHES, FREEMO_TRACK_SPACING_INCHES, type GeometryType, type IndustryLabelMode, type IndustrySpot, MAIN2_TRACK_ID, MAIN_TRACK_ID, type ModuleFeatures, type ModuleFootprint, type ModuleFootprintInput, type ModuleGeometryInput, type ModuleSchematicDoc, type ModuleTrackRow, N_CAR_LENGTH_INCHES, N_SCALE_RATIO, type OutlineFace, type SchematicBlock, type SchematicControlPoint, type SchematicCrossing, type SchematicEndplate, type SchematicEndplateTrack, type SchematicIndustry, type SchematicSection, type SchematicSignal, type SchematicTrack, type SchematicTurnout, type SectionAdjacency, type SectionFootprint, type SectionRelativePos, type SignalFacing, type SignalSide, type TrackConfig, type TrackRole, type TurnoutKind, WHOLE_MODULE_SECTION_ID, asModuleSchematic, benchworkBand, benchworkOutline, buildCrossover, buildPassingSiding, buildTransition, carCapacity, checkEndplateWidth, deriveEndplatePoses, divergeSideForHand, docToState, emptyEditorState, endplateFaceSegments, endplateLead, endplateTrackOffsetFor, endplateTrackOffsetInches, endplateWidthInches, fromSectionRelative, geometryTurnDegrees, inchesToScaleFeet, isLoopDoc, isTransitionTurnout, moduleCenterline, moduleFeatures, moduleFootprint, moduleLengthFromSections, moduleSections, nextId, poseNeedsManual, poseOverridesFromDoc, remapPos, sampleBenchworkOutline, samplePath, scaleFeetToInches, sectionAdjacency, sectionBand, sectionBreaksFromSections, sectionComponents, sectionFootprints, sectionNeighbours, sectionSpans, sectionSpansOrWhole, sectionedCenterline, sectionedEndPose, sliceCenterline, stateToDoc, toSectionRelative, trackMeetsEndplateIssues, trackPath };
|
|
1169
|
+
export { type BenchworkPoint, type BranchConnector, type DrawCrossing, type DrawCrossover, type DrawIndustry, type DrawSignal, type DrawTrack, type DrawTurnout, ENDPLATE_FASCIA_CLEAR_INCHES, ENDPLATE_LEAD_INCHES, type EditorBranch, type EditorControlPoint, type EditorCpSignal, type EditorCrossing, type EditorIndustry, type EditorState, type EditorTrack, type EditorTurnout, type EndplateBConfig, type EndplatePose, type EndplateTrackIssue, type EndplateWidthIssue, FREEMO_ENDPLATE_TRACK_FASCIA_CLEARANCE_INCHES, FREEMO_ENDPLATE_WIDTH_MIN_INCHES, FREEMO_ENDPLATE_WIDTH_RECOMMENDED_INCHES, FREEMO_TRACK_SPACING_INCHES, type GeometryType, type IndustryLabelMode, type IndustrySpot, MAIN2_TRACK_ID, MAIN_TRACK_ID, type ModuleFeatures, type ModuleFootprint, type ModuleFootprintInput, type ModuleGeometryInput, type ModuleSchematicDoc, type ModuleTrackRow, N_CAR_LENGTH_INCHES, N_SCALE_RATIO, type OutlineFace, type ReturnLoopGeometry, type ReturnLoopShape, type SchematicBlock, type SchematicControlPoint, type SchematicCrossing, type SchematicEndplate, type SchematicEndplateTrack, type SchematicIndustry, type SchematicSection, type SchematicSignal, type SchematicTrack, type SchematicTurnout, type SectionAdjacency, type SectionFootprint, type SectionRelativePos, type SignalFacing, type SignalSide, type TrackConfig, type TrackRole, type TurnoutKind, WHOLE_MODULE_SECTION_ID, asModuleSchematic, benchworkBand, benchworkOutline, buildCrossover, buildPassingSiding, buildTransition, carCapacity, checkEndplateWidth, deriveEndplatePoses, divergeSideForHand, docToState, emptyEditorState, endplateFaceSegments, endplateLead, endplateTrackOffsetFor, endplateTrackOffsetInches, endplateWidthInches, fromSectionRelative, geometryTurnDegrees, inchesToScaleFeet, isLoopDoc, isTransitionTurnout, moduleCenterline, moduleFeatures, moduleFootprint, moduleLengthFromSections, moduleSections, nextId, poseNeedsManual, poseOverridesFromDoc, remapPos, returnLoop, sampleBenchworkOutline, samplePath, scaleFeetToInches, sectionAdjacency, sectionBand, sectionBreaksFromSections, sectionComponents, sectionFootprints, sectionNeighbours, sectionSpans, sectionSpansOrWhole, sectionedCenterline, sectionedEndPose, sliceCenterline, stateToDoc, toSectionRelative, trackMeetsEndplateIssues, trackPath };
|
package/dist/index.js
CHANGED
|
@@ -472,7 +472,9 @@ function moduleFootprint(input) {
|
|
|
472
472
|
return {
|
|
473
473
|
centerline,
|
|
474
474
|
band: benchworkBand(centerline, widthA, widthB, offA, offB),
|
|
475
|
-
|
|
475
|
+
// A loop's centre-line ends at the throat, not a far endplate — keep only
|
|
476
|
+
// endplate A's face (the far face would be a spurious plate at the throat).
|
|
477
|
+
endplateFaces: input.loop ? endplateFaceSegments(centerline, widthA, widthB, offA, offB).slice(0, 1) : endplateFaceSegments(centerline, widthA, widthB, offA, offB),
|
|
476
478
|
outline: sectionOutlines.length || !authored ? null : sampleBenchworkOutline(authored),
|
|
477
479
|
sectionOutlines
|
|
478
480
|
};
|
|
@@ -1318,6 +1320,83 @@ function moduleFeatures(doc) {
|
|
|
1318
1320
|
laneMax: Math.max(...allLanes)
|
|
1319
1321
|
};
|
|
1320
1322
|
}
|
|
1323
|
+
function returnLoop(shape, opts) {
|
|
1324
|
+
const L = Math.max(1, opts.leadInches);
|
|
1325
|
+
const R = Math.max(1, opts.radius);
|
|
1326
|
+
const hw = Math.min(opts.boardHalfWidth ?? 6, R - 1);
|
|
1327
|
+
const T = { x: L, y: 0 };
|
|
1328
|
+
const r2 = (v) => Math.round(v * 100) / 100;
|
|
1329
|
+
const rd = (pts) => pts.map((p) => ({ x: r2(p.x), y: r2(p.y) }));
|
|
1330
|
+
const arc = (cx, cy, r, a0, a12, steps) => {
|
|
1331
|
+
const out = [];
|
|
1332
|
+
for (let i = 0; i <= steps; i++) out.push({ x: cx + r * Math.cos(a0 + (a12 - a0) * i / steps), y: cy + r * Math.sin(a0 + (a12 - a0) * i / steps) });
|
|
1333
|
+
return out;
|
|
1334
|
+
};
|
|
1335
|
+
if (shape === "square") {
|
|
1336
|
+
const s = 2 * R;
|
|
1337
|
+
const loop2 = [
|
|
1338
|
+
{ x: L, y: 0 },
|
|
1339
|
+
{ x: L, y: R },
|
|
1340
|
+
{ x: L + s, y: R },
|
|
1341
|
+
{ x: L + s, y: -R },
|
|
1342
|
+
{ x: L, y: -R },
|
|
1343
|
+
{ x: L, y: 0 }
|
|
1344
|
+
];
|
|
1345
|
+
return {
|
|
1346
|
+
throat: T,
|
|
1347
|
+
loop: rd(loop2),
|
|
1348
|
+
wyeLegs: [rd([T, { x: L, y: R }]), rd([T, { x: L, y: -R }])],
|
|
1349
|
+
wyeHalfAngleDeg: 90,
|
|
1350
|
+
outlineOuter: rd([
|
|
1351
|
+
{ x: 0, y: hw },
|
|
1352
|
+
{ x: L + s + hw, y: hw },
|
|
1353
|
+
{ x: L + s + hw, y: -R - hw },
|
|
1354
|
+
{ x: 0, y: -R - hw }
|
|
1355
|
+
]),
|
|
1356
|
+
outlineInner: rd([
|
|
1357
|
+
{ x: L + hw, y: R - hw },
|
|
1358
|
+
{ x: L + s - hw, y: R - hw },
|
|
1359
|
+
{ x: L + s - hw, y: -R + hw },
|
|
1360
|
+
{ x: L + hw, y: -R + hw }
|
|
1361
|
+
])
|
|
1362
|
+
};
|
|
1363
|
+
}
|
|
1364
|
+
const D = shape === "circle" ? R * 1.15 : R * 1.6;
|
|
1365
|
+
const offY = shape === "offset-teardrop" ? R * 0.7 : 0;
|
|
1366
|
+
const C = { x: L + D, y: offY };
|
|
1367
|
+
const dist = Math.hypot(C.x - T.x, C.y - T.y);
|
|
1368
|
+
const ac = Math.acos(Math.min(1, R / dist));
|
|
1369
|
+
const base = Math.atan2(T.y - C.y, T.x - C.x);
|
|
1370
|
+
const a1 = base + ac;
|
|
1371
|
+
const a2 = base - ac;
|
|
1372
|
+
const P1 = { x: C.x + R * Math.cos(a1), y: C.y + R * Math.sin(a1) };
|
|
1373
|
+
const P2 = { x: C.x + R * Math.cos(a2), y: C.y + R * Math.sin(a2) };
|
|
1374
|
+
const loop = [T, P1, ...arc(C.x, C.y, R, a1, a2 + 2 * Math.PI, 64).slice(1), T];
|
|
1375
|
+
const legDir = (P) => Math.atan2(P.y - T.y, P.x - T.x);
|
|
1376
|
+
const half = Math.abs((legDir(P1) - legDir(P2) + Math.PI) % (2 * Math.PI) - Math.PI) / 2;
|
|
1377
|
+
const ringOuter = (rr) => {
|
|
1378
|
+
const xTop = C.x - Math.sqrt(Math.max(0, rr * rr - (hw - C.y) ** 2));
|
|
1379
|
+
const xBot = C.x - Math.sqrt(Math.max(0, rr * rr - (-hw - C.y) ** 2));
|
|
1380
|
+
const tTop = Math.atan2(hw - C.y, xTop - C.x);
|
|
1381
|
+
const tBot = Math.atan2(-hw - C.y, xBot - C.x);
|
|
1382
|
+
return [
|
|
1383
|
+
{ x: 0, y: hw },
|
|
1384
|
+
{ x: xTop, y: hw },
|
|
1385
|
+
...arc(C.x, C.y, rr, tTop, tBot - 2 * Math.PI, 48).slice(1, -1),
|
|
1386
|
+
{ x: xBot, y: -hw },
|
|
1387
|
+
{ x: 0, y: -hw }
|
|
1388
|
+
];
|
|
1389
|
+
};
|
|
1390
|
+
const Ri = R - hw;
|
|
1391
|
+
return {
|
|
1392
|
+
throat: T,
|
|
1393
|
+
loop: rd(loop),
|
|
1394
|
+
wyeLegs: [rd([T, P1]), rd([T, P2])],
|
|
1395
|
+
wyeHalfAngleDeg: r2(half * 180 / Math.PI),
|
|
1396
|
+
outlineOuter: rd(ringOuter(R + hw)),
|
|
1397
|
+
outlineInner: Ri > 2 ? rd(arc(C.x, C.y, Ri, 0, 2 * Math.PI, 40)) : []
|
|
1398
|
+
};
|
|
1399
|
+
}
|
|
1321
1400
|
function geometryTurnDegrees(geometryType, geometryDegrees) {
|
|
1322
1401
|
switch (geometryType) {
|
|
1323
1402
|
case "corner_45":
|
|
@@ -1489,6 +1568,6 @@ function poseOverridesFromDoc(doc) {
|
|
|
1489
1568
|
return out;
|
|
1490
1569
|
}
|
|
1491
1570
|
|
|
1492
|
-
export { ENDPLATE_FASCIA_CLEAR_INCHES, ENDPLATE_LEAD_INCHES, FREEMO_ENDPLATE_TRACK_FASCIA_CLEARANCE_INCHES, FREEMO_ENDPLATE_WIDTH_MIN_INCHES, FREEMO_ENDPLATE_WIDTH_RECOMMENDED_INCHES, FREEMO_TRACK_SPACING_INCHES, MAIN2_TRACK_ID, MAIN_TRACK_ID, N_CAR_LENGTH_INCHES, N_SCALE_RATIO, WHOLE_MODULE_SECTION_ID, asModuleSchematic, benchworkBand, benchworkOutline, buildCrossover, buildPassingSiding, buildTransition, carCapacity, checkEndplateWidth, deriveEndplatePoses, divergeSideForHand, docToState, emptyEditorState, endplateFaceSegments, endplateLead, endplateTrackOffsetFor, endplateTrackOffsetInches, endplateWidthInches, fromSectionRelative, geometryTurnDegrees, inchesToScaleFeet, isLoopDoc, isTransitionTurnout, moduleCenterline, moduleFeatures, moduleFootprint, moduleLengthFromSections, moduleSections, nextId, poseNeedsManual, poseOverridesFromDoc, remapPos, sampleBenchworkOutline, samplePath, scaleFeetToInches, sectionAdjacency, sectionBand, sectionBreaksFromSections, sectionComponents, sectionFootprints, sectionNeighbours, sectionSpans, sectionSpansOrWhole, sectionedCenterline, sectionedEndPose, sliceCenterline, stateToDoc, toSectionRelative, trackMeetsEndplateIssues, trackPath };
|
|
1571
|
+
export { ENDPLATE_FASCIA_CLEAR_INCHES, ENDPLATE_LEAD_INCHES, FREEMO_ENDPLATE_TRACK_FASCIA_CLEARANCE_INCHES, FREEMO_ENDPLATE_WIDTH_MIN_INCHES, FREEMO_ENDPLATE_WIDTH_RECOMMENDED_INCHES, FREEMO_TRACK_SPACING_INCHES, MAIN2_TRACK_ID, MAIN_TRACK_ID, N_CAR_LENGTH_INCHES, N_SCALE_RATIO, WHOLE_MODULE_SECTION_ID, asModuleSchematic, benchworkBand, benchworkOutline, buildCrossover, buildPassingSiding, buildTransition, carCapacity, checkEndplateWidth, deriveEndplatePoses, divergeSideForHand, docToState, emptyEditorState, endplateFaceSegments, endplateLead, endplateTrackOffsetFor, endplateTrackOffsetInches, endplateWidthInches, fromSectionRelative, geometryTurnDegrees, inchesToScaleFeet, isLoopDoc, isTransitionTurnout, moduleCenterline, moduleFeatures, moduleFootprint, moduleLengthFromSections, moduleSections, nextId, poseNeedsManual, poseOverridesFromDoc, remapPos, returnLoop, sampleBenchworkOutline, samplePath, scaleFeetToInches, sectionAdjacency, sectionBand, sectionBreaksFromSections, sectionComponents, sectionFootprints, sectionNeighbours, sectionSpans, sectionSpansOrWhole, sectionedCenterline, sectionedEndPose, sliceCenterline, stateToDoc, toSectionRelative, trackMeetsEndplateIssues, trackPath };
|
|
1493
1572
|
//# sourceMappingURL=index.js.map
|
|
1494
1573
|
//# sourceMappingURL=index.js.map
|