///|
/// Public API probe. Machine data stays separate from the human CLI report.
fn main {
let args = @env.args()
let bytes = @fs.read_file_to_bytes(args[1]) catch {
@fs.IOError(message) => {
println("READ_ERROR|\{message}")
return
}
}
let drawing = @dxfkit.build_drawing(@dxfkit.scan_tags(bytes))
println("UNIT|\{drawing.declared_unit_label()}")
let entities = drawing.entities()
for entity in entities.entities {
let h = entity.common.handle
println("ENTITY|\{h}|\{entity.kind()}|\{entity.layer()}")
match entity.geom {
@dxfkit.Circle(center~, radius~) =>
println("CIRCLE|\{h}|\{center.x}|\{center.y}|\{radius}")
@dxfkit.Arc(center~, radius~, start_angle~, end_angle~) =>
println(
"ARC|\{h}|\{center.x}|\{center.y}|\{radius}|\{start_angle}|\{end_angle}",
)
@dxfkit.Ellipse(center~, major~, ratio~, start_param~, end_param~) =>
println(
"ELLIPSE|\{h}|\{center.x}|\{center.y}|\{major.x}|\{major.y}|\{ratio}|\{start_param}|\{end_param}",
)
@dxfkit.Polyline(vertices~, closed~) => {
println("POLYLINE|\{h}|\{closed}|\{vertices.length()}")
for v in vertices {
println("VERTEX|\{h}|\{v.at.x}|\{v.at.y}|\{v.bulge}")
}
}
@dxfkit.Spline(degree~, knots~, control_points~, weights~) => {
println(
"SPLINE|\{h}|\{degree}|\{knots.length()}|\{control_points.length()}|\{weights.length()}",
)
for k in knots {
println("KNOT|\{h}|\{k}")
}
for p in control_points {
println("CONTROL|\{h}|\{p.x}|\{p.y}|\{p.z}")
}
}
@dxfkit.Insert(at~, block~, scale~, rotation~) =>
println(
"INSERT|\{h}|\{block}|\{at.x}|\{at.y}|\{scale.x}|\{scale.y}|\{rotation}",
)
_ => ()
}
if entity.bounds() is Some(box) {
println("BOUNDS|\{h}|\{box.min.x}|\{box.min.y}|\{box.max.x}|\{box.max.y}")
}
}
let expansion = drawing.expand(0.002)
for placed in expansion.placed {
match placed.flat {
@dxfkit.Outline(points~, closed~) => {
println(
"OUTLINE|\{placed.entity.common.handle}|\{placed.layer}|\{closed}|\{points.length()}",
)
for p in points {
println("POINT|\{p.x}|\{p.y}")
}
}
_ => ()
}
}
for reason in expansion.warnings {
println("EXPANSION_WARNING|\{reason}")
}
let report = drawing.check({ tol: 0.002, min_gap: 0.0, })
println("INCOMPLETE|\{report.has_incomplete_checks()}")
}