WriterController
Dieser Inhalt ist noch nicht in deiner Sprache verfügbar.
lc_plugin::writer_ctrl::WriterController is the export-side drawing access API. LinkCAD passes it to Writer::write_file() while a native Rust writer is exporting a drawing.
Use it to configure export rendering, enumerate layers/cells/fonts, query transforms and counts, render cells back through Writer entity callbacks, log diagnostics, and report progress. Python export plugins expose the corresponding low-level API through WriterController in linkcad.v1.plugin.
Key Public Items
| Item | Purpose |
|---|---|
WriterController | Host-owned export controller wrapper. |
SortOrder | Layer enumeration order. |
HolesMode | How rendered holes are represented. |
PolygonType | Rendered polygon output mode. |
Enums
pub enum SortOrder { Regular = 0, Reverse = 1,}
pub enum HolesMode { Separate = 0, Combined = 1,}
pub enum PolygonType { Filled = 0, Outline = 1,}Pass these to layer enumeration and polygon rendering configuration methods.
Host Construction
pub unsafe fn from_raw(ptr: *mut LcWriterController) -> Self;pub fn raw(&self) -> *mut LcWriterController;These methods are public for ABI glue and advanced integrations. Format plugins should use the WriterController passed to Writer::write_file().
Export Configuration and Counts
| Method | Description |
|---|---|
init_progress(force_flattened: bool) | Initialize host progress counting. |
flatten_cell_hierarchy(mode: i32) | Configure hierarchy flattening mode. |
set_polygon_mode(holes: HolesMode, polygon_type: PolygonType) | Configure rendered polygon hole and outline handling. |
object_count() -> usize | Return processed-object count. |
set_object_count(count: usize) | Set processed-object count. |
total_object_count() -> usize | Return total object count. |
set_total_object_count(count: usize) | Set total object count. |
file_name() -> String | Return the output file path. |
resolution() -> Resolution | Return curve tessellation settings. |
layer_count() -> usize | Return enabled layer count. |
Layer Enumeration
| Method | Description |
|---|---|
start_enum_layers(order: SortOrder) | Reset layer enumeration in the requested order. |
next_layer() -> Option<Layer> | Return the next layer, or None at the end. |
ctrl.start_enum_layers(SortOrder::Regular);while let Some(layer) = ctrl.next_layer() { ctrl.log().info(&format!("Exporting layer {}", layer.name()));}Font and Cell Enumeration
| Method | Description |
|---|---|
start_enum_fonts() | Reset font enumeration. |
next_font() -> Option<String> | Return the next font name. |
start_enum_cells() | Reset cell enumeration. |
next_cell(layer: Option<&Layer>) -> Option<Cell> | Return the next cell, optionally filtered by layer. |
main_cell() -> Option<Cell> | Return the main cell. |
Rendering and Callbacks
| Method | Description |
|---|---|
render_cell(cell: &Cell, layer: &Layer, xform: &Xform) | Render one cell/layer pair through Writer entity callbacks. |
render_cell_in_layer_order(cell: &Cell, xform: &Xform) | Render a cell by layer order through Writer entity callbacks. |
fill_rule() -> FillRule | Return the current polygon fill rule. |
When you call a render method, LinkCAD invokes the Writer callback matching each rendered entity type, such as write_polygon(), write_polyline(), or write_text(). See entity for callback entity wrappers.
fn write_file(&mut self, _path: &str, ctrl: &mut WriterController) -> bool { let Some(cell) = ctrl.main_cell() else { ctrl.log().error("No main cell to export"); return false; };
ctrl.start_enum_layers(SortOrder::Regular); while let Some(layer) = ctrl.next_layer() { let xform = ctrl.transformation(false); ctrl.render_cell(&cell, &layer, &xform); } true}Transformations
| Method | Description |
|---|---|
transformation(persistent: bool) -> Xform | Return the current transform. |
transform_point(pt: Point) -> Point | Transform a point with the current export transform. |
transform_distance(d: i64) -> i64 | Transform an integer distance. |
transform_distance_f(d: f64) -> f64 | Transform a floating-point distance. |
Use persistent = true when you need the persistent transform from the export controller; use false for the current transient rendering transform.
Layer Properties
These methods read layer metadata through the writer controller’s drawing context.
| Method | Description |
|---|---|
layer_polarity_positive(layer: &Layer) -> bool | Return positive/negative polarity. |
layer_polarity_group(layer: &Layer) -> Option<String> | Return deferred polarity group name. |
layer_polarity_sequence(layer: &Layer) -> i32 | Return source-order index in a polarity group. |
layer_comment(layer: &Layer) -> Option<String> | Return layer comment. |
layer_export_number(layer: &Layer) -> Option<i32> | Return validated export layer number. |
Logging and Progress
| Method | Description |
|---|---|
log() -> EventLog | Return the export event log wrapper. |
set_progress(percent: i32) | Report progress to the host. |
Use EventLog for messages that should appear in the LinkCAD log panel.