@willcgage/module-schematic 0.52.0 → 0.53.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,28 @@ 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. Measured lead ÷ N: **#7 = 0.482, #10 = 0.419.** The
1043
+ * rule predicted 4.82″ for the #10; it measures 4³⁄₁₆″ — **13% over**. Atlas
1044
+ * compress the lead on long turnouts, just as they compress overall length.
1045
+ *
1046
+ * Prefer {@link leadInchesForSize}, which returns a real part's measurement when
1047
+ * one exists and only falls back here for sizes nothing in the library covers.
1048
+ * A fallback at N ≥ 10 will read LONG.
1049
+ *
1050
+ * BETTER MODEL (hypothesis, not yet enough data): a roughly CONSTANT SWITCH
1051
+ * ANGLE α — the angle the point rails leave the stock rail at — which is real
1052
+ * prototype practice, points being planed to a standard angle. Inverting
1053
+ * {@link turnoutClosure} gives `lead = 2g / (1/N + α)`, and the two measured
1054
+ * leads agree to 3%: #7 ⇒ α = 0.0669, #10 ⇒ α = 0.0691. If it holds, lead is
1055
+ * whatever falls out of a fixed point angle meeting the frog, not a multiple
1056
+ * of N. DISCRIMINATING TEST: at α ≈ 0.068 the #5's lead is **2.64″**, where
1057
+ * this constant says 2.41″ — measure a physical 2050 to settle it.
1058
+ */
1042
1059
  declare const TURNOUT_LEAD_INCHES_PER_FROG = 0.482;
1043
1060
  /** Where a dimension came from. `derived` = we computed it from another part or
1044
1061
  * a rule of thumb; `unverified` = plausible but unconfirmed — treat with care. */
@@ -1049,6 +1066,12 @@ interface PartDimension {
1049
1066
  /** Who measured it / which spec, so it can be re-checked. */
1050
1067
  note?: string;
1051
1068
  }
1069
+ /** Same provenance discipline as {@link PartDimension}, for angles. */
1070
+ interface PartAngle {
1071
+ deg: number;
1072
+ source: DimensionSource;
1073
+ note?: string;
1074
+ }
1052
1075
  interface TrackPart {
1053
1076
  /** Stable slug, e.g. "atlas-c55-n-7". */
1054
1077
  id: string;
@@ -1066,8 +1089,20 @@ interface TrackPart {
1066
1089
  };
1067
1090
  /** Frog number N (the 1:N ratio). Definitional, so no provenance needed. */
1068
1091
  frogNumber?: number;
1092
+ /** The angle the part ACTUALLY diverges at, where that's known to differ from
1093
+ * the theoretical `atan(1/N)`. Atlas appear to build to SECTIONAL angles
1094
+ * (multiples of 11.25° = 1/32 turn) rather than true frog ratios, so a "#5" is
1095
+ * 11.25° not 11.31°. ⚠️ Currently below our drawing resolution — 0.06° over a
1096
+ * 6″ turnout is 0.006″ — so nothing uses this yet. Recorded because it's a
1097
+ * real property of the product and will matter if we ever check whether a part
1098
+ * mates with sectional track. */
1099
+ actualAngle?: PartAngle;
1069
1100
  /** Points → frog. The number that decides where a turnout's throat lands. */
1070
1101
  lead?: PartDimension;
1102
+ /** End of the tie strip → the point tips. Where the working turnout starts
1103
+ * inside its moulding; the rest of that end is plain approach track. Needed to
1104
+ * fit a part into a space, and by any renderer drawing the real outline. */
1105
+ pointsOffset?: PartDimension;
1071
1106
  /** End-to-end length of the part. */
1072
1107
  overallLength?: PartDimension;
1073
1108
  /** Diverging route radius (straight turnouts). */
@@ -1084,10 +1119,30 @@ declare const CODE55_RAIL_HEIGHT_INCHES = 0.055;
1084
1119
  * Atlas N-scale Code 55 — the Free-moN mainstay.
1085
1120
  *
1086
1121
  * ⚠️ 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.
1122
+ * Everything here traces to physical measurements: Steve Branton's #7 lead
1123
+ * (3⅜″ points→frog, #173) and Will Gage's #5/#7/#10 overall lengths plus the
1124
+ * #10's lead and points offset. The #5's lead and the wye's are still derived.
1125
+ *
1126
+ * NEITHER DIMENSION IS PROPORTIONAL TO FROG NUMBER. Both rules that assumed so
1127
+ * have now been tested and failed:
1128
+ * - **Lead does NOT scale with N.** Measured lead ÷ N: #7 = 0.482, #10 = 0.419.
1129
+ * {@link TURNOUT_LEAD_INCHES_PER_FROG} predicted 4.82″ for the #10 against a
1130
+ * measured 4³⁄₁₆″ — 13% over. See that constant for the constant-switch-angle
1131
+ * model that fits both measurements, and the test that would confirm it.
1132
+ * - ⭐ **Overall length is NOT A FUNCTION OF N AT ALL.** Measured: #5 = 6.00″,
1133
+ * **#7 = 6.00″**, #10 = 8.00″. The #5 and #7 are the SAME LENGTH — Atlas mould
1134
+ * them on a shared 6″ tie strip and vary only the frog angle and where the frog
1135
+ * sits. NEVER derive a length from a frog number; look the part up.
1136
+ *
1137
+ * This is what the frog-number definition actually says, and it's easy to forget:
1138
+ * #N fixes the DIVERGENCE RATE AT THE FROG (1 across per N along). It says
1139
+ * nothing about how much tie strip the manufacturer wraps around it. Angle is
1140
+ * geometry; length is packaging. Hence the lead — where the frog falls inside
1141
+ * that strip — is the only dimension worth chasing.
1142
+ *
1143
+ * (Lengths are whole inches and the #5 diverges at exactly 1/32 of a circle, so
1144
+ * Atlas do seem to work to round numbers — but a prediction that the #7 would
1145
+ * therefore be 7.00″ was tested and FAILED. Round, but not one inch per frog.)
1091
1146
  */
1092
1147
  declare const ATLAS_CODE55_N: TrackPart[];
1093
1148
  /** Every built-in part, across manufacturers. */
@@ -1343,4 +1398,4 @@ declare function poseOverridesFromDoc(doc: ModuleSchematicDoc): Record<string, {
1343
1398
  heading: number;
1344
1399
  }>;
1345
1400
 
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 };
1401
+ 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,28 @@ 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. Measured lead ÷ N: **#7 = 0.482, #10 = 0.419.** The
1043
+ * rule predicted 4.82″ for the #10; it measures 4³⁄₁₆″ — **13% over**. Atlas
1044
+ * compress the lead on long turnouts, just as they compress overall length.
1045
+ *
1046
+ * Prefer {@link leadInchesForSize}, which returns a real part's measurement when
1047
+ * one exists and only falls back here for sizes nothing in the library covers.
1048
+ * A fallback at N ≥ 10 will read LONG.
1049
+ *
1050
+ * BETTER MODEL (hypothesis, not yet enough data): a roughly CONSTANT SWITCH
1051
+ * ANGLE α — the angle the point rails leave the stock rail at — which is real
1052
+ * prototype practice, points being planed to a standard angle. Inverting
1053
+ * {@link turnoutClosure} gives `lead = 2g / (1/N + α)`, and the two measured
1054
+ * leads agree to 3%: #7 ⇒ α = 0.0669, #10 ⇒ α = 0.0691. If it holds, lead is
1055
+ * whatever falls out of a fixed point angle meeting the frog, not a multiple
1056
+ * of N. DISCRIMINATING TEST: at α ≈ 0.068 the #5's lead is **2.64″**, where
1057
+ * this constant says 2.41″ — measure a physical 2050 to settle it.
1058
+ */
1042
1059
  declare const TURNOUT_LEAD_INCHES_PER_FROG = 0.482;
1043
1060
  /** Where a dimension came from. `derived` = we computed it from another part or
1044
1061
  * a rule of thumb; `unverified` = plausible but unconfirmed — treat with care. */
@@ -1049,6 +1066,12 @@ interface PartDimension {
1049
1066
  /** Who measured it / which spec, so it can be re-checked. */
1050
1067
  note?: string;
1051
1068
  }
1069
+ /** Same provenance discipline as {@link PartDimension}, for angles. */
1070
+ interface PartAngle {
1071
+ deg: number;
1072
+ source: DimensionSource;
1073
+ note?: string;
1074
+ }
1052
1075
  interface TrackPart {
1053
1076
  /** Stable slug, e.g. "atlas-c55-n-7". */
1054
1077
  id: string;
@@ -1066,8 +1089,20 @@ interface TrackPart {
1066
1089
  };
1067
1090
  /** Frog number N (the 1:N ratio). Definitional, so no provenance needed. */
1068
1091
  frogNumber?: number;
1092
+ /** The angle the part ACTUALLY diverges at, where that's known to differ from
1093
+ * the theoretical `atan(1/N)`. Atlas appear to build to SECTIONAL angles
1094
+ * (multiples of 11.25° = 1/32 turn) rather than true frog ratios, so a "#5" is
1095
+ * 11.25° not 11.31°. ⚠️ Currently below our drawing resolution — 0.06° over a
1096
+ * 6″ turnout is 0.006″ — so nothing uses this yet. Recorded because it's a
1097
+ * real property of the product and will matter if we ever check whether a part
1098
+ * mates with sectional track. */
1099
+ actualAngle?: PartAngle;
1069
1100
  /** Points → frog. The number that decides where a turnout's throat lands. */
1070
1101
  lead?: PartDimension;
1102
+ /** End of the tie strip → the point tips. Where the working turnout starts
1103
+ * inside its moulding; the rest of that end is plain approach track. Needed to
1104
+ * fit a part into a space, and by any renderer drawing the real outline. */
1105
+ pointsOffset?: PartDimension;
1071
1106
  /** End-to-end length of the part. */
1072
1107
  overallLength?: PartDimension;
1073
1108
  /** Diverging route radius (straight turnouts). */
@@ -1084,10 +1119,30 @@ declare const CODE55_RAIL_HEIGHT_INCHES = 0.055;
1084
1119
  * Atlas N-scale Code 55 — the Free-moN mainstay.
1085
1120
  *
1086
1121
  * ⚠️ 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.
1122
+ * Everything here traces to physical measurements: Steve Branton's #7 lead
1123
+ * (3⅜″ points→frog, #173) and Will Gage's #5/#7/#10 overall lengths plus the
1124
+ * #10's lead and points offset. The #5's lead and the wye's are still derived.
1125
+ *
1126
+ * NEITHER DIMENSION IS PROPORTIONAL TO FROG NUMBER. Both rules that assumed so
1127
+ * have now been tested and failed:
1128
+ * - **Lead does NOT scale with N.** Measured lead ÷ N: #7 = 0.482, #10 = 0.419.
1129
+ * {@link TURNOUT_LEAD_INCHES_PER_FROG} predicted 4.82″ for the #10 against a
1130
+ * measured 4³⁄₁₆″ — 13% over. See that constant for the constant-switch-angle
1131
+ * model that fits both measurements, and the test that would confirm it.
1132
+ * - ⭐ **Overall length is NOT A FUNCTION OF N AT ALL.** Measured: #5 = 6.00″,
1133
+ * **#7 = 6.00″**, #10 = 8.00″. The #5 and #7 are the SAME LENGTH — Atlas mould
1134
+ * them on a shared 6″ tie strip and vary only the frog angle and where the frog
1135
+ * sits. NEVER derive a length from a frog number; look the part up.
1136
+ *
1137
+ * This is what the frog-number definition actually says, and it's easy to forget:
1138
+ * #N fixes the DIVERGENCE RATE AT THE FROG (1 across per N along). It says
1139
+ * nothing about how much tie strip the manufacturer wraps around it. Angle is
1140
+ * geometry; length is packaging. Hence the lead — where the frog falls inside
1141
+ * that strip — is the only dimension worth chasing.
1142
+ *
1143
+ * (Lengths are whole inches and the #5 diverges at exactly 1/32 of a circle, so
1144
+ * Atlas do seem to work to round numbers — but a prediction that the #7 would
1145
+ * therefore be 7.00″ was tested and FAILED. Round, but not one inch per frog.)
1091
1146
  */
1092
1147
  declare const ATLAS_CODE55_N: TrackPart[];
1093
1148
  /** Every built-in part, across manufacturers. */
@@ -1343,4 +1398,4 @@ declare function poseOverridesFromDoc(doc: ModuleSchematicDoc): Record<string, {
1343
1398
  heading: number;
1344
1399
  }>;
1345
1400
 
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 };
1401
+ 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
@@ -1104,7 +1104,17 @@ var ATLAS_CODE55_N = [
1104
1104
  lead: {
1105
1105
  inches: 5 * TURNOUT_LEAD_INCHES_PER_FROG,
1106
1106
  source: "derived",
1107
- note: "scaled from the measured #7 by frog number \u2014 not measured"
1107
+ note: "scaled from the measured #7 by frog number \u2014 not measured, BUT now corroborated: a photo read of Will's physical 2050 puts points\u2192frog at ~2.4\u2033, i.e. 0.48/frog against the #7's 0.482. Replace with a real measurement when someone puts a rule on it."
1108
+ },
1109
+ overallLength: {
1110
+ inches: 6,
1111
+ source: "measured",
1112
+ note: "Will Gage, physical Atlas 2050 (#5 LH), end tie to end tie"
1113
+ },
1114
+ actualAngle: {
1115
+ deg: 11.25,
1116
+ source: "unverified",
1117
+ 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
1118
  }
1109
1119
  },
1110
1120
  {
@@ -1120,6 +1130,16 @@ var ATLAS_CODE55_N = [
1120
1130
  inches: 3.375,
1121
1131
  source: "measured",
1122
1132
  note: "Steve Branton, physical Atlas code 55 #7, 3\u215C\u2033 points\u2192frog (#173)"
1133
+ },
1134
+ overallLength: {
1135
+ inches: 6,
1136
+ source: "measured",
1137
+ 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"
1138
+ },
1139
+ actualAngle: {
1140
+ deg: 8.13,
1141
+ source: "unverified",
1142
+ 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
1143
  }
1124
1144
  },
1125
1145
  {
@@ -1132,9 +1152,24 @@ var ATLAS_CODE55_N = [
1132
1152
  partNumbers: { left: "2054", right: "2055" },
1133
1153
  frogNumber: 10,
1134
1154
  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"
1155
+ inches: 4.1875,
1156
+ source: "measured",
1157
+ 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."
1158
+ },
1159
+ pointsOffset: {
1160
+ inches: 0.5625,
1161
+ source: "measured",
1162
+ note: "Will Gage, physical Atlas 2054 (#10) \u2014 end of tie strip to point tips"
1163
+ },
1164
+ overallLength: {
1165
+ inches: 8,
1166
+ source: "measured",
1167
+ note: "Will Gage, physical Atlas 2054 (#10), end tie to end tie"
1168
+ },
1169
+ actualAngle: {
1170
+ deg: 5.74,
1171
+ source: "unverified",
1172
+ 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
1173
  }
1139
1174
  },
1140
1175
  {