@willcgage/module-schematic 0.52.0 → 0.54.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.d.cts CHANGED
@@ -1034,11 +1034,30 @@ interface ModuleFeatures {
1034
1034
  */
1035
1035
  /** N-scale track gauge, inches (9 mm). */
1036
1036
  declare const RAIL_GAUGE_INCHES = 0.354;
1037
- /** Points → FROG for a #1 frog, inches — a turnout's LEAD, scaled by frog
1038
- * number. Calibrated COMMERCIALLY rather than on the prototype, since owners lay
1039
- * real product: an Atlas code 55 #7 measures 3⅜″ points→frog (Steve Branton,
1040
- * #173) ⇒ 3.375 / 7. (The prototype #7 lead is 62′-1″ ≈ 4.66″ in N; commercial
1041
- * turnouts are compressed against that.) */
1037
+ /**
1038
+ * ⚠️ **REFUTED AS A GENERAL RULE LAST RESORT ONLY.** Points→frog for a #1
1039
+ * frog, i.e. a turnout's LEAD if lead were proportional to frog number. From an
1040
+ * Atlas code 55 #7 measuring 3⅜″ (Steve Branton, #173) ⇒ 3.375 / 7.
1041
+ *
1042
+ * It is NOT proportional, and the error CHANGES SIGN. Measured lead ÷ N:
1043
+ * **#5 = 0.600, #7 = 0.482, #10 = 0.419** — it falls monotonically. This rule
1044
+ * reads **20% SHORT at N=5** (2.41″ vs a measured 3.00″) and **13% LONG at
1045
+ * N=10** (4.82″ vs 4³⁄₁₆″). There is no safe direction to be wrong in.
1046
+ *
1047
+ * Prefer {@link leadInchesForSize}, which returns a real part's measurement when
1048
+ * one exists and only falls back here for sizes nothing in the library covers.
1049
+ * ⚠️ The remaining fallback user is the #2.5 wye at 1.21″; since per-frog RISES
1050
+ * as N falls, that is very likely SHORT. Treat it as a placeholder.
1051
+ *
1052
+ * A constant-switch-angle model was also proposed here and is likewise REFUTED:
1053
+ * inverting {@link turnoutClosure} gives α = 0.036 (#5), 0.067 (#7), 0.069
1054
+ * (#10). It was floated when only the #7 and #10 were known, which agreed to
1055
+ * 3%; the #5 killed it. Kept as a warning — two agreeing parts are not a law,
1056
+ * and this library has now watched three separate rules die that way.
1057
+ *
1058
+ * The pattern that DOES fit both fully-measured parts is on {@link
1059
+ * ATLAS_CODE55_N}: the frog sits at a fixed 4.75″ and the points move.
1060
+ */
1042
1061
  declare const TURNOUT_LEAD_INCHES_PER_FROG = 0.482;
1043
1062
  /** Where a dimension came from. `derived` = we computed it from another part or
1044
1063
  * a rule of thumb; `unverified` = plausible but unconfirmed — treat with care. */
@@ -1049,6 +1068,12 @@ interface PartDimension {
1049
1068
  /** Who measured it / which spec, so it can be re-checked. */
1050
1069
  note?: string;
1051
1070
  }
1071
+ /** Same provenance discipline as {@link PartDimension}, for angles. */
1072
+ interface PartAngle {
1073
+ deg: number;
1074
+ source: DimensionSource;
1075
+ note?: string;
1076
+ }
1052
1077
  interface TrackPart {
1053
1078
  /** Stable slug, e.g. "atlas-c55-n-7". */
1054
1079
  id: string;
@@ -1066,8 +1091,20 @@ interface TrackPart {
1066
1091
  };
1067
1092
  /** Frog number N (the 1:N ratio). Definitional, so no provenance needed. */
1068
1093
  frogNumber?: number;
1094
+ /** The angle the part ACTUALLY diverges at, where that's known to differ from
1095
+ * the theoretical `atan(1/N)`. Atlas appear to build to SECTIONAL angles
1096
+ * (multiples of 11.25° = 1/32 turn) rather than true frog ratios, so a "#5" is
1097
+ * 11.25° not 11.31°. ⚠️ Currently below our drawing resolution — 0.06° over a
1098
+ * 6″ turnout is 0.006″ — so nothing uses this yet. Recorded because it's a
1099
+ * real property of the product and will matter if we ever check whether a part
1100
+ * mates with sectional track. */
1101
+ actualAngle?: PartAngle;
1069
1102
  /** Points → frog. The number that decides where a turnout's throat lands. */
1070
1103
  lead?: PartDimension;
1104
+ /** End of the tie strip → the point tips. Where the working turnout starts
1105
+ * inside its moulding; the rest of that end is plain approach track. Needed to
1106
+ * fit a part into a space, and by any renderer drawing the real outline. */
1107
+ pointsOffset?: PartDimension;
1071
1108
  /** End-to-end length of the part. */
1072
1109
  overallLength?: PartDimension;
1073
1110
  /** Diverging route radius (straight turnouts). */
@@ -1084,10 +1121,41 @@ declare const CODE55_RAIL_HEIGHT_INCHES = 0.055;
1084
1121
  * Atlas N-scale Code 55 — the Free-moN mainstay.
1085
1122
  *
1086
1123
  * ⚠️ Atlas do not publish leads or overall lengths for the straight turnouts.
1087
- * The only hard datum is Steve Branton's measurement of a #7 (3⅜″ points→frog,
1088
- * #173); the #5 and #10 leads are SCALED from it by frog number and are marked
1089
- * `derived` for exactly that reason they should be replaced with real
1090
- * measurements when someone has the parts to hand.
1124
+ * Everything here traces to physical measurements: Steve Branton's #7 lead
1125
+ * (3⅜″ points→frog, #173) and Will Gage's #5/#7/#10 overall lengths plus the
1126
+ * #10's lead and points offset. The #5's lead and the wye's are still derived.
1127
+ *
1128
+ * ⭐⭐ **THE FROG SITS AT 4.75″ FROM THE TIE END — ON BOTH MEASURED PARTS.**
1129
+ *
1130
+ * part points FROG overall lead
1131
+ * #5 1¾″ 4.75″ 6.00″ 3.0000″
1132
+ * #10 ⁹⁄₁₆″ 4.75″ 8.00″ 4.1875″
1133
+ *
1134
+ * Atlas appear to FIX where the frog casting sits in the moulding and move the
1135
+ * POINTS to change the frog number. That single fact explains every failed rule
1136
+ * below at once: lead was never a property of N — it is just
1137
+ * `4.75 − wherever the points landed`.
1138
+ *
1139
+ * ⚠️ TESTABLE, AND CHEAP: Steve's #7 lead of 3⅜″ was measured independently, by
1140
+ * someone else, on a different part. If the frog really is fixed at 4.75″, that
1141
+ * part's POINTS must sit at 4.75 − 3.375 = **1⅜″**. Measure a physical 2052 and
1142
+ * this model is confirmed or dead. Nobody has measured the #7's points offset.
1143
+ *
1144
+ * NOTHING HERE IS PROPORTIONAL TO FROG NUMBER. Three rules assumed otherwise;
1145
+ * all three were tested against a physical part and FAILED:
1146
+ * - ❌ **Lead ∝ N.** Measured lead ÷ N: #5 = 0.600, #7 = 0.482, #10 = 0.419 —
1147
+ * falls monotonically. {@link TURNOUT_LEAD_INCHES_PER_FROG} reads 13% LONG at
1148
+ * N=10 and 20% SHORT at N=5, so its error even changes sign.
1149
+ * - ❌ **Constant switch angle.** Inverting {@link turnoutClosure} gives α =
1150
+ * 0.036 (#5), 0.067 (#7), 0.069 (#10). The #7 and #10 agreed to 3% and the #5
1151
+ * killed it. Two agreeing parts are not a law.
1152
+ * - ❌ **Overall length ∝ N.** #5 = 6.00″ and #7 = 6.00″ — same moulding, two
1153
+ * frog numbers.
1154
+ *
1155
+ * The definition is the reason: #N fixes the DIVERGENCE RATE AT THE FROG (1
1156
+ * across per N along) and says NOTHING about how much tie strip the manufacturer
1157
+ * wraps around it, or where inside it the frog goes. Angle is geometry;
1158
+ * everything else is a tooling decision. **Measure the part. Do not model it.**
1091
1159
  */
1092
1160
  declare const ATLAS_CODE55_N: TrackPart[];
1093
1161
  /** Every built-in part, across manufacturers. */
@@ -1343,4 +1411,4 @@ declare function poseOverridesFromDoc(doc: ModuleSchematicDoc): Record<string, {
1343
1411
  heading: number;
1344
1412
  }>;
1345
1413
 
1346
- export { ATLAS_CODE55_N, BUILT_IN_TRACK_PARTS, type BenchworkPoint, type BranchConnector, CODE55_RAIL_HEIGHT_INCHES, type DimensionSource, 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 ImportedPart, 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 PartDimension, type PartEnd, type PartSegment, RAIL_GAUGE_INCHES, 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, TURNOUT_LEAD_INCHES_PER_FROG, type TrackConfig, type TrackPart, type TrackRole, type TurnoutClosure, 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, leadInchesForSize, moduleCenterline, moduleFeatures, moduleFootprint, moduleLengthFromSections, moduleSections, nextId, parseXtpLibrary, poseNeedsManual, poseOverridesFromDoc, remapPos, returnLoop, sampleBenchworkOutline, samplePartSegments, samplePath, scaleFeetToInches, sectionAdjacency, sectionBand, sectionBreaksFromSections, sectionComponents, sectionFootprints, sectionNeighbours, sectionSpans, sectionSpansOrWhole, sectionedCenterline, sectionedEndPose, sliceCenterline, stateToDoc, toSectionRelative, trackMeetsEndplateIssues, trackPart, trackPath, turnoutClosure, turnoutPartForSize };
1414
+ export { ATLAS_CODE55_N, BUILT_IN_TRACK_PARTS, type BenchworkPoint, type BranchConnector, CODE55_RAIL_HEIGHT_INCHES, type DimensionSource, 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 ImportedPart, 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 PartAngle, type PartDimension, type PartEnd, type PartSegment, RAIL_GAUGE_INCHES, 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, TURNOUT_LEAD_INCHES_PER_FROG, type TrackConfig, type TrackPart, type TrackRole, type TurnoutClosure, 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, leadInchesForSize, moduleCenterline, moduleFeatures, moduleFootprint, moduleLengthFromSections, moduleSections, nextId, parseXtpLibrary, poseNeedsManual, poseOverridesFromDoc, remapPos, returnLoop, sampleBenchworkOutline, samplePartSegments, samplePath, scaleFeetToInches, sectionAdjacency, sectionBand, sectionBreaksFromSections, sectionComponents, sectionFootprints, sectionNeighbours, sectionSpans, sectionSpansOrWhole, sectionedCenterline, sectionedEndPose, sliceCenterline, stateToDoc, toSectionRelative, trackMeetsEndplateIssues, trackPart, trackPath, turnoutClosure, turnoutPartForSize };
package/dist/index.d.ts CHANGED
@@ -1034,11 +1034,30 @@ interface ModuleFeatures {
1034
1034
  */
1035
1035
  /** N-scale track gauge, inches (9 mm). */
1036
1036
  declare const RAIL_GAUGE_INCHES = 0.354;
1037
- /** Points → FROG for a #1 frog, inches — a turnout's LEAD, scaled by frog
1038
- * number. Calibrated COMMERCIALLY rather than on the prototype, since owners lay
1039
- * real product: an Atlas code 55 #7 measures 3⅜″ points→frog (Steve Branton,
1040
- * #173) ⇒ 3.375 / 7. (The prototype #7 lead is 62′-1″ ≈ 4.66″ in N; commercial
1041
- * turnouts are compressed against that.) */
1037
+ /**
1038
+ * ⚠️ **REFUTED AS A GENERAL RULE LAST RESORT ONLY.** Points→frog for a #1
1039
+ * frog, i.e. a turnout's LEAD if lead were proportional to frog number. From an
1040
+ * Atlas code 55 #7 measuring 3⅜″ (Steve Branton, #173) ⇒ 3.375 / 7.
1041
+ *
1042
+ * It is NOT proportional, and the error CHANGES SIGN. Measured lead ÷ N:
1043
+ * **#5 = 0.600, #7 = 0.482, #10 = 0.419** — it falls monotonically. This rule
1044
+ * reads **20% SHORT at N=5** (2.41″ vs a measured 3.00″) and **13% LONG at
1045
+ * N=10** (4.82″ vs 4³⁄₁₆″). There is no safe direction to be wrong in.
1046
+ *
1047
+ * Prefer {@link leadInchesForSize}, which returns a real part's measurement when
1048
+ * one exists and only falls back here for sizes nothing in the library covers.
1049
+ * ⚠️ The remaining fallback user is the #2.5 wye at 1.21″; since per-frog RISES
1050
+ * as N falls, that is very likely SHORT. Treat it as a placeholder.
1051
+ *
1052
+ * A constant-switch-angle model was also proposed here and is likewise REFUTED:
1053
+ * inverting {@link turnoutClosure} gives α = 0.036 (#5), 0.067 (#7), 0.069
1054
+ * (#10). It was floated when only the #7 and #10 were known, which agreed to
1055
+ * 3%; the #5 killed it. Kept as a warning — two agreeing parts are not a law,
1056
+ * and this library has now watched three separate rules die that way.
1057
+ *
1058
+ * The pattern that DOES fit both fully-measured parts is on {@link
1059
+ * ATLAS_CODE55_N}: the frog sits at a fixed 4.75″ and the points move.
1060
+ */
1042
1061
  declare const TURNOUT_LEAD_INCHES_PER_FROG = 0.482;
1043
1062
  /** Where a dimension came from. `derived` = we computed it from another part or
1044
1063
  * a rule of thumb; `unverified` = plausible but unconfirmed — treat with care. */
@@ -1049,6 +1068,12 @@ interface PartDimension {
1049
1068
  /** Who measured it / which spec, so it can be re-checked. */
1050
1069
  note?: string;
1051
1070
  }
1071
+ /** Same provenance discipline as {@link PartDimension}, for angles. */
1072
+ interface PartAngle {
1073
+ deg: number;
1074
+ source: DimensionSource;
1075
+ note?: string;
1076
+ }
1052
1077
  interface TrackPart {
1053
1078
  /** Stable slug, e.g. "atlas-c55-n-7". */
1054
1079
  id: string;
@@ -1066,8 +1091,20 @@ interface TrackPart {
1066
1091
  };
1067
1092
  /** Frog number N (the 1:N ratio). Definitional, so no provenance needed. */
1068
1093
  frogNumber?: number;
1094
+ /** The angle the part ACTUALLY diverges at, where that's known to differ from
1095
+ * the theoretical `atan(1/N)`. Atlas appear to build to SECTIONAL angles
1096
+ * (multiples of 11.25° = 1/32 turn) rather than true frog ratios, so a "#5" is
1097
+ * 11.25° not 11.31°. ⚠️ Currently below our drawing resolution — 0.06° over a
1098
+ * 6″ turnout is 0.006″ — so nothing uses this yet. Recorded because it's a
1099
+ * real property of the product and will matter if we ever check whether a part
1100
+ * mates with sectional track. */
1101
+ actualAngle?: PartAngle;
1069
1102
  /** Points → frog. The number that decides where a turnout's throat lands. */
1070
1103
  lead?: PartDimension;
1104
+ /** End of the tie strip → the point tips. Where the working turnout starts
1105
+ * inside its moulding; the rest of that end is plain approach track. Needed to
1106
+ * fit a part into a space, and by any renderer drawing the real outline. */
1107
+ pointsOffset?: PartDimension;
1071
1108
  /** End-to-end length of the part. */
1072
1109
  overallLength?: PartDimension;
1073
1110
  /** Diverging route radius (straight turnouts). */
@@ -1084,10 +1121,41 @@ declare const CODE55_RAIL_HEIGHT_INCHES = 0.055;
1084
1121
  * Atlas N-scale Code 55 — the Free-moN mainstay.
1085
1122
  *
1086
1123
  * ⚠️ Atlas do not publish leads or overall lengths for the straight turnouts.
1087
- * The only hard datum is Steve Branton's measurement of a #7 (3⅜″ points→frog,
1088
- * #173); the #5 and #10 leads are SCALED from it by frog number and are marked
1089
- * `derived` for exactly that reason they should be replaced with real
1090
- * measurements when someone has the parts to hand.
1124
+ * Everything here traces to physical measurements: Steve Branton's #7 lead
1125
+ * (3⅜″ points→frog, #173) and Will Gage's #5/#7/#10 overall lengths plus the
1126
+ * #10's lead and points offset. The #5's lead and the wye's are still derived.
1127
+ *
1128
+ * ⭐⭐ **THE FROG SITS AT 4.75″ FROM THE TIE END — ON BOTH MEASURED PARTS.**
1129
+ *
1130
+ * part points FROG overall lead
1131
+ * #5 1¾″ 4.75″ 6.00″ 3.0000″
1132
+ * #10 ⁹⁄₁₆″ 4.75″ 8.00″ 4.1875″
1133
+ *
1134
+ * Atlas appear to FIX where the frog casting sits in the moulding and move the
1135
+ * POINTS to change the frog number. That single fact explains every failed rule
1136
+ * below at once: lead was never a property of N — it is just
1137
+ * `4.75 − wherever the points landed`.
1138
+ *
1139
+ * ⚠️ TESTABLE, AND CHEAP: Steve's #7 lead of 3⅜″ was measured independently, by
1140
+ * someone else, on a different part. If the frog really is fixed at 4.75″, that
1141
+ * part's POINTS must sit at 4.75 − 3.375 = **1⅜″**. Measure a physical 2052 and
1142
+ * this model is confirmed or dead. Nobody has measured the #7's points offset.
1143
+ *
1144
+ * NOTHING HERE IS PROPORTIONAL TO FROG NUMBER. Three rules assumed otherwise;
1145
+ * all three were tested against a physical part and FAILED:
1146
+ * - ❌ **Lead ∝ N.** Measured lead ÷ N: #5 = 0.600, #7 = 0.482, #10 = 0.419 —
1147
+ * falls monotonically. {@link TURNOUT_LEAD_INCHES_PER_FROG} reads 13% LONG at
1148
+ * N=10 and 20% SHORT at N=5, so its error even changes sign.
1149
+ * - ❌ **Constant switch angle.** Inverting {@link turnoutClosure} gives α =
1150
+ * 0.036 (#5), 0.067 (#7), 0.069 (#10). The #7 and #10 agreed to 3% and the #5
1151
+ * killed it. Two agreeing parts are not a law.
1152
+ * - ❌ **Overall length ∝ N.** #5 = 6.00″ and #7 = 6.00″ — same moulding, two
1153
+ * frog numbers.
1154
+ *
1155
+ * The definition is the reason: #N fixes the DIVERGENCE RATE AT THE FROG (1
1156
+ * across per N along) and says NOTHING about how much tie strip the manufacturer
1157
+ * wraps around it, or where inside it the frog goes. Angle is geometry;
1158
+ * everything else is a tooling decision. **Measure the part. Do not model it.**
1091
1159
  */
1092
1160
  declare const ATLAS_CODE55_N: TrackPart[];
1093
1161
  /** Every built-in part, across manufacturers. */
@@ -1343,4 +1411,4 @@ declare function poseOverridesFromDoc(doc: ModuleSchematicDoc): Record<string, {
1343
1411
  heading: number;
1344
1412
  }>;
1345
1413
 
1346
- export { ATLAS_CODE55_N, BUILT_IN_TRACK_PARTS, type BenchworkPoint, type BranchConnector, CODE55_RAIL_HEIGHT_INCHES, type DimensionSource, 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 ImportedPart, 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 PartDimension, type PartEnd, type PartSegment, RAIL_GAUGE_INCHES, 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, TURNOUT_LEAD_INCHES_PER_FROG, type TrackConfig, type TrackPart, type TrackRole, type TurnoutClosure, 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, leadInchesForSize, moduleCenterline, moduleFeatures, moduleFootprint, moduleLengthFromSections, moduleSections, nextId, parseXtpLibrary, poseNeedsManual, poseOverridesFromDoc, remapPos, returnLoop, sampleBenchworkOutline, samplePartSegments, samplePath, scaleFeetToInches, sectionAdjacency, sectionBand, sectionBreaksFromSections, sectionComponents, sectionFootprints, sectionNeighbours, sectionSpans, sectionSpansOrWhole, sectionedCenterline, sectionedEndPose, sliceCenterline, stateToDoc, toSectionRelative, trackMeetsEndplateIssues, trackPart, trackPath, turnoutClosure, turnoutPartForSize };
1414
+ export { ATLAS_CODE55_N, BUILT_IN_TRACK_PARTS, type BenchworkPoint, type BranchConnector, CODE55_RAIL_HEIGHT_INCHES, type DimensionSource, 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 ImportedPart, 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 PartAngle, type PartDimension, type PartEnd, type PartSegment, RAIL_GAUGE_INCHES, 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, TURNOUT_LEAD_INCHES_PER_FROG, type TrackConfig, type TrackPart, type TrackRole, type TurnoutClosure, 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, leadInchesForSize, moduleCenterline, moduleFeatures, moduleFootprint, moduleLengthFromSections, moduleSections, nextId, parseXtpLibrary, poseNeedsManual, poseOverridesFromDoc, remapPos, returnLoop, sampleBenchworkOutline, samplePartSegments, samplePath, scaleFeetToInches, sectionAdjacency, sectionBand, sectionBreaksFromSections, sectionComponents, sectionFootprints, sectionNeighbours, sectionSpans, sectionSpansOrWhole, sectionedCenterline, sectionedEndPose, sliceCenterline, stateToDoc, toSectionRelative, trackMeetsEndplateIssues, trackPart, trackPath, turnoutClosure, turnoutPartForSize };
package/dist/index.js CHANGED
@@ -1102,9 +1102,24 @@ var ATLAS_CODE55_N = [
1102
1102
  partNumbers: { left: "2050", right: "2051" },
1103
1103
  frogNumber: 5,
1104
1104
  lead: {
1105
- inches: 5 * TURNOUT_LEAD_INCHES_PER_FROG,
1106
- source: "derived",
1107
- note: "scaled from the measured #7 by frog number \u2014 not measured"
1105
+ inches: 3,
1106
+ source: "measured",
1107
+ note: "Will Gage, physical Atlas 2050 (#5 LH): points at 1\xBE\u2033, frog at 4.75\u2033 \u21D2 3\u2033 exactly. REFUTED BOTH standing models \u2014 the per-frog rule predicted 2.41\u2033, the constant-switch-angle model 2.64\u2033; both read short. It also retired my earlier ~2.4\u2033 photo estimate, which was 20% under."
1108
+ },
1109
+ pointsOffset: {
1110
+ inches: 1.75,
1111
+ source: "measured",
1112
+ note: "Will Gage, physical Atlas 2050 (#5 LH) \u2014 end of tie strip to point tips"
1113
+ },
1114
+ overallLength: {
1115
+ inches: 6,
1116
+ source: "measured",
1117
+ note: "Will Gage, physical Atlas 2050 (#5 LH), end tie to end tie"
1118
+ },
1119
+ actualAngle: {
1120
+ deg: 11.25,
1121
+ source: "unverified",
1122
+ note: "CORROBORATED: XTrkCAD N-atlasn55.xtp gives 11.250152\xB0, and AnyRail-forum trial-and-error (glakedylan, 2012) gives 11.25\xB0. Theory atan(1/5) = 11.310\xB0. 11.25\xB0 is exactly 1/32 turn \u2014 Atlas appear to build to sectional angles."
1108
1123
  }
1109
1124
  },
1110
1125
  {
@@ -1120,6 +1135,16 @@ var ATLAS_CODE55_N = [
1120
1135
  inches: 3.375,
1121
1136
  source: "measured",
1122
1137
  note: "Steve Branton, physical Atlas code 55 #7, 3\u215C\u2033 points\u2192frog (#173)"
1138
+ },
1139
+ overallLength: {
1140
+ inches: 6,
1141
+ source: "measured",
1142
+ note: "Will Gage, physical Atlas 2052 (#7), end tie to end tie \u2014 the SAME 6\u2033 as the #5, which is what proves length is not a function of frog number"
1143
+ },
1144
+ actualAngle: {
1145
+ deg: 8.13,
1146
+ source: "unverified",
1147
+ note: "DISPUTED: XTrkCAD .xtp says 8.1818\xB0, AnyRail forum says 8.125\xB0, theory atan(1/7) = 8.130\xB0. The sources disagree, so theory is used here."
1123
1148
  }
1124
1149
  },
1125
1150
  {
@@ -1132,9 +1157,24 @@ var ATLAS_CODE55_N = [
1132
1157
  partNumbers: { left: "2054", right: "2055" },
1133
1158
  frogNumber: 10,
1134
1159
  lead: {
1135
- inches: 10 * TURNOUT_LEAD_INCHES_PER_FROG,
1136
- source: "derived",
1137
- note: "scaled from the measured #7 by frog number \u2014 not measured"
1160
+ inches: 4.1875,
1161
+ source: "measured",
1162
+ note: "Will Gage, physical Atlas 2054 (#10): points at 9/16\u2033 from the end, frog at 4.75\u2033 \u21D2 4\xB3\u2044\u2081\u2086\u2033. THIS IS THE MEASUREMENT THAT REFUTED the lead-per-frog rule \u2014 it predicted 4.82\u2033, 13% over."
1163
+ },
1164
+ pointsOffset: {
1165
+ inches: 0.5625,
1166
+ source: "measured",
1167
+ note: "Will Gage, physical Atlas 2054 (#10) \u2014 end of tie strip to point tips"
1168
+ },
1169
+ overallLength: {
1170
+ inches: 8,
1171
+ source: "measured",
1172
+ note: "Will Gage, physical Atlas 2054 (#10), end tie to end tie"
1173
+ },
1174
+ actualAngle: {
1175
+ deg: 5.74,
1176
+ source: "unverified",
1177
+ note: "CORROBORATED: XTrkCAD .xtp gives 5.739\xB0, AnyRail forum 5.75\xB0 \u2014 they agree with each other and not with theory atan(1/10) = 5.711\xB0."
1138
1178
  }
1139
1179
  },
1140
1180
  {