-
-
Notifications
You must be signed in to change notification settings - Fork 1
CSV Format
This page defines CSV input format for point cloud, alignment, and structure import.
- Recommended encoding: UTF-8
- Delimiter: comma (
,) - Decimal separator: dot (
.) - Keep one header row at top
- Avoid empty header names
Required header:
easting,northing,elevation
Example:
easting,northing,elevation
352000.000,4169000.000,116.000
352005.000,4169000.000,116.021
352010.000,4169000.000,116.041Rules:
-
easting: float (X) -
northing: float (Y) -
elevation: float (Z) - Recommended regular XY sampling for stable DEM mesh generation
- UTM coordinates are supported
- Keep enough density for mesh continuity in design area
Recommended sample file:
tests/samples/pointcloud_utm_realistic_hilly.csv

Required header:
E,N,Radius,TransitionLs
Example:
E,N,Radius,TransitionLs
352060.000,4169055.000,0.0,0.0
352130.000,4169125.000,180.0,30.0
352210.000,4169200.000,220.0,35.0Rules:
-
E: float (IP easting) -
N: float (IP northing) -
Radius: float (0for tangent/no curve) -
TransitionLs: float (0allowed) - At least 2 valid rows are required
- Keep alignment extents inside terrain extents for EG sampling stability
Recommended sample file:
tests/samples/alignment_utm_realistic_hilly.csv

Recommended header:
Id,Type,StartStation,EndStation,CenterStation,Side,Offset,Width,Height,BottomElevation,Cover,RotationDeg,BehaviorMode,GeometryMode,TemplateName,WallThickness,FootingWidth,FootingThickness,CapHeight,CellCount,CorridorMode,CorridorMargin,Notes,ShapeSourcePath,ScaleFactor,PlacementMode,UseSourceBaseAsBottom
Example:
Id,Type,StartStation,EndStation,CenterStation,Side,Offset,Width,Height,BottomElevation,Cover,RotationDeg,BehaviorMode,GeometryMode,TemplateName,WallThickness,FootingWidth,FootingThickness,CapHeight,CellCount,CorridorMode,CorridorMargin,Notes,ShapeSourcePath,ScaleFactor,PlacementMode,UseSourceBaseAsBottom
CULV-T01,culvert,120.000,150.000,135.000,center,0.000,6.000,2.500,103.200,1.200,0.000,section_overlay,template,box_culvert,0.350,0.000,0.000,0.200,2,notch,0.000,Two-cell box culvert template,,1.000,,
RW-T01,retaining_wall,265.000,340.000,302.500,right,8.000,0.600,4.000,101.800,0.000,0.000,assembly_override,template,retaining_wall,0.450,3.200,0.500,0.150,1,split_only,0.000,Right-side retaining wall template,,1.000,,
EXT-CULV-01,culvert,120.000,150.000,135.000,center,0.000,6.000,2.500,103.200,0.000,0.000,section_overlay,external_shape,,0.000,0.000,0.000,0.000,1,notch,0.000,Replace with your local STEP file,C:/replace-with-your-models/culvert_box.step,1.000,center_on_station,true
EXT-ABUT-01,abutment_zone,470.000,515.000,492.500,both,0.000,14.000,5.000,103.800,0.000,0.000,assembly_override,external_shape,,0.000,0.000,0.000,0.000,1,skip_zone,0.000,Replace with your local FCStd object path,C:/replace-with-your-models/bridge_parts.FCStd#AbutmentBlock,1.000,center_on_station,trueRules:
-
Id: recommended string identifier -
Type: one ofcrossing,culvert,retaining_wall,bridge_zone,abutment_zone,other -
StartStation,EndStation,CenterStation: numeric station values -
Side: one ofleft,right,center,both -
Width,Height: non-negative numeric values -
BehaviorMode: one oftag_only,section_overlay,assembly_override -
GeometryMode: one ofbox,template,external_shape -
TemplateName: currentlybox_culvert,utility_crossing,retaining_wall,abutment_block -
WallThickness,FootingWidth,FootingThickness,CapHeight,CellCount: template-specific fields -
CorridorMode: one ofnone,split_only,skip_zone,notch -
CorridorMargin: optional non-negative corridor envelope margin -
Notes: optional free text -
ShapeSourcePath: local.step,.brep, or.FCStd#ObjectNamesource path whenGeometryMode=external_shape -
ScaleFactor: optional uniform scale for external geometry -
PlacementMode: currentlycenter_on_stationorstart_on_station -
UseSourceBaseAsBottom:true/falseflag for external source Z anchoring
Recommended sample file:
tests/samples/structure_utm_realistic_hilly.csvtests/samples/structure_utm_realistic_hilly_template.csvtests/samples/structure_utm_realistic_hilly_external_shape.csv
Practical notes:
- Run
Generate Stationsbefore usingEdit Structures, even if the CSV contains valid station values. -
culvert,crossing,bridge_zone, andabutment_zoneare usually zone-type records that affect both section sides. -
retaining_wallusually makes sense on only one side. -
tag_onlyis the safest mode when you want structure-aware station tags without changing section behavior. - Leave
GeometryModeempty if you want strict backward-compatibleboxbehavior. - Use
template / box_culvertwhen you want culvert display solids andStructure Sectionsoverlays to show wall and cell layout. - Use
template / retaining_wallwhen you want footing + stem display and overlay shapes. - Use
external_shapewhen you already have a structure model inSTEP,BREP, orFCStdformat and want to place that geometry directly. - For
FCStd, useShapeSourcePathin the formC:/path/model.FCStd#ObjectName. - The repository does not currently bundle sample
.step,.brep, or.FCStdfiles, so the sampleShapeSourcePathvalues are placeholders that must be replaced before use. - The upper structure table now defaults to a compact view; use
Selected Structure Detailsfor most advanced edits. - The panel now includes quick-add helpers, structure cloning, grouped column toggles, and built-in structure presets.
[Screenshot Needed] Edit Structures panel loading a structure CSV file. Suggested file:
wiki-csv-structure-import-panel.png
This is an advanced companion CSV format for variable-size structures.
Current workflow:
-
Edit Structuresnow supports a two-table workflow. - Load the base structure CSV first.
- Then use
Browse Profile CSV->Load Profile CSV. - The lower table shows the station-profile rows for the currently selected structure.
- The lower table also supports
Sort by Station,Duplicate Profile Row,Add Midpoint, andDelete All for Selected. - The
Profile Presetcontrols above the lower table can create starter control points directly from the selected structure row.
Recommended header:
StructureId,Station,Offset,Width,Height,BottomElevation,Cover,WallThickness,FootingWidth,FootingThickness,CapHeight,CellCount
Example:
StructureId,Station,Offset,Width,Height,BottomElevation,Cover,WallThickness,FootingWidth,FootingThickness,CapHeight,CellCount
CULV-V01,120.000,0.000,4.000,2.000,103.300,0.000,0.280,0.000,0.000,0.050,1
CULV-V01,150.000,0.000,6.000,2.600,103.100,0.000,0.320,0.000,0.000,0.120,2
CULV-V01,180.000,0.000,3.800,1.900,102.950,0.000,0.260,0.000,0.000,0.050,1
RW-V01,265.000,7.500,0.550,2.800,101.900,0.000,0.320,2.200,0.450,0.120,1
RW-V01,305.000,8.250,0.700,5.000,101.650,0.000,0.420,3.000,0.600,0.220,1
RW-V01,345.000,9.000,0.600,3.400,101.450,0.000,0.360,2.400,0.500,0.120,1How it is used:
- Each
StructureIdmust match a row in the main structure CSV. - At least two profile points are recommended for a variable structure.
- Profile rows for the same structure should be in ascending station order.
- Duplicate stations for the same structure should be avoided.
Current runtime consumption:
- 3D structure display uses station-profile values.
-
Structure Sectionsoverlay objects use station-profile values. - Section overrides and earthwork use station-profile values.
- Corridor
notchhandling uses station-profile values.
Current limits:
-
CellCountis treated as a step/nearest value, not a continuously interpolated value. -
skip_zoneandsplit_onlystill follow the base structure span (StartStation/EndStation) rather than profile-point-derived span changes. - The current runtime builds variable structures as profile-driven segments, not as a fully continuous taper loft.
Recommended sample files:
tests/samples/structure_utm_realistic_hilly_station_profile_headers.csvtests/samples/structure_utm_realistic_hilly_station_profile_points.csvtests/samples/structure_utm_realistic_hilly_mixed.csvtests/samples/structure_utm_realistic_hilly_mixed_profile_points.csv
[Screenshot Needed] Structure Sections overlays showing station-profile-driven size changes. Suggested file:
wiki-csv-structure-station-profile-overlays.png
Typical Section now supports direct CSV import.
Current workflow:
- Open
Typical Section - Either choose a built-in
Presetor useBrowse CSV Load CSV- Use quick-add buttons, mirror buttons, and row-move buttons if needed
- Review the
Summarypanel Apply
Recommended header:
Id,Type,Side,Width,CrossSlopePct,Height,Offset,Order,Enabled
Example:
Id,Type,Side,Width,CrossSlopePct,Height,Offset,Order,Enabled
LANE-L,lane,left,3.500,2.0,0.000,0.000,10,true
SHL-L,shoulder,left,1.500,4.0,0.000,0.000,20,true
GUT-L,gutter,left,0.800,6.0,0.000,0.000,30,true
DITCH-L,ditch,left,2.000,2.0,1.000,0.000,40,true
BERM-L,berm,left,1.500,0.0,0.000,0.000,50,true
LANE-R,lane,right,3.500,2.0,0.000,0.000,10,true
SHL-R,shoulder,right,1.500,4.0,0.000,0.000,20,trueRecommended sample files:
tests/samples/typical_section_basic_rural.csvtests/samples/typical_section_urban_complete_street.csvtests/samples/typical_section_with_ditch.csvtests/samples/typical_section_pavement_basic.csv
Current notes:
-
TypicalSectionTemplatedefines the finished-grade top profile. -
AssemblyTemplatestill provides corridor depth, side slopes, and daylight defaults. -
Save Component CSVcan export the edited component table back to CSV. - The editor now supports built-in presets and quick-add component buttons for faster setup.
- Type-aware tooltips and cell tinting help distinguish slope-driven rows (
lane,shoulder,gutter) from height-driven rows (curb,ditch). - When
Sectionsuses a typical section, runtime should reportSectionSchemaVersion=2andTopProfileSource=typical_section. -
Corridorcompletion/status now reports source schema, top profile source, and points per section.
Typical Section also supports a first-pass pavement layer CSV.
Current workflow:
- Open
Typical Section Browse Pavement CSVLoad Pavement CSV- Review/edit the pavement layer table if needed
- Optionally use
Save Pavement CSVto export the edited stack Apply
Recommended header:
Id,Type,Thickness,Enabled
Example:
Id,Type,Thickness,Enabled
SURF,surface,0.050,true
BINDER,binder,0.070,true
BASE,base,0.200,true
SUBBASE,subbase,0.250,trueRecommended sample file:
tests/samples/typical_section_pavement_basic.csv
Current notes:
- Pavement layers are stored as data on
TypicalSectionTemplate. - Current supported layer types are
surface,binder,base,subbase,subgrade. - Current result fields include
PavementLayerCount,EnabledPavementLayerCount, andPavementTotalThickness. - These values currently propagate to
SectionSet,Corridor, andDesign Grading Surface. - Pavement preview offset wires were removed; pavement data remains available through the stored layer rows and total thickness summary.
- Header names match exactly.
- Numeric fields are finite values.
- Alignment lies within point cloud spatial extent.
- Coordinate mode (
Local/World) is consistent for terrain usage. - Structure station ranges fall inside the generated alignment/stationing range.
- Sparse point cloud causes holes or no-data cells.
- Alignment outside terrain extent causes EG blanks.
- Non-numeric text in numeric columns causes row skips.
- Mixed coordinate frames (local/world mismatch) produce shifted results.
- Structure CSV with invalid
Type,Side, orBehaviorModecauses validation warnings.
CellSize controls how the imported point cloud is sampled into the DEM grid.
How to interpret it:
- Smaller
CellSizepreserves more local terrain detail. - Smaller
CellSizealso makes sparse areas more visible, which can leave holes or weak coverage in the DEM. - Larger
CellSizeaverages over a wider area and can reduce no-data gaps in sparse point clouds. - Larger
CellSizecan help reduce blank or zero EG/profile values when the source point cloud is not dense enough.
When to increase CellSize:
- EG values are blank at many stations.
- Profile data contains long zero-value runs after DEM import.
- The terrain mesh looks fragmented or contains many small holes.
- Point spacing in the CSV is visibly wider than the current DEM cell size.
Tradeoff:
- If
CellSizeis too small, terrain detail is preserved but coverage may be unstable. - If
CellSizeis too large, EG/profile coverage may improve, but the terrain becomes smoother and sharp features may be flattened.
Recommended tuning approach:
- Start near the typical XY point spacing of the source CSV.
- If EG/profile values contain many blanks or zeros, increase
CellSizegradually. - Rebuild the terrain and regenerate profiles after each change.
- Stop when coverage becomes stable without excessively flattening the terrain.
Practical note:
- If your point cloud spacing is irregular, it is usually safer to use a slightly larger
CellSizethan the smallest local spacing. - For early testing, stable EG coverage is often more important than preserving every small terrain variation.
[Screenshot Needed] PointCloud DEM task panel showing
CellSizeadjustment. Suggested file:wiki-csv-dem-cellsize-tuning.png
Last verified with commit: <fill-after-release>