///|
// Represents an EDGE_CURVE entity.
// Example from simple-box.step:
//   EDGE_CURVE('',#82,#83,#102,.T.)
pub struct EdgeCurve {
  name : String
  edge_start : @step.Ref
  edge_end : @step.Ref
  edge_geometry : @step.Ref
  same_sense : Bool
}

///|
pub fn EdgeCurve::new(
  name : String,
  edge_start : @step.Ref,
  edge_end : @step.Ref,
  edge_geometry : @step.Ref,
  same_sense : Bool,
) -> EdgeCurve {
  EdgeCurve::{ name, edge_start, edge_end, edge_geometry, same_sense, }
}

///|
pub impl @step.Entity for EdgeCurve with fn to_step(self) {
  let start_str = "#\{self.edge_start.id.value}"
  let end_str = "#\{self.edge_end.id.value}"
  let geom_str = "#\{self.edge_geometry.id.value}"
  let ss_str = bool_to_step(self.same_sense)
  "EDGE_CURVE(\{step_str_or_dollar(self.name)},\{start_str},\{end_str},\{geom_str},\{ss_str})"
}