跳转到内容

WriterController

此内容尚不支持你的语言。

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

ItemPurpose
WriterControllerHost-owned export controller wrapper.
SortOrderLayer enumeration order.
HolesModeHow rendered holes are represented.
PolygonTypeRendered 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

MethodDescription
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() -> usizeReturn processed-object count.
set_object_count(count: usize)Set processed-object count.
total_object_count() -> usizeReturn total object count.
set_total_object_count(count: usize)Set total object count.
file_name() -> StringReturn the output file path.
resolution() -> ResolutionReturn curve tessellation settings.
layer_count() -> usizeReturn enabled layer count.

Layer Enumeration

MethodDescription
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

MethodDescription
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

MethodDescription
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() -> FillRuleReturn 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

MethodDescription
transformation(persistent: bool) -> XformReturn the current transform.
transform_point(pt: Point) -> PointTransform a point with the current export transform.
transform_distance(d: i64) -> i64Transform an integer distance.
transform_distance_f(d: f64) -> f64Transform 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.

MethodDescription
layer_polarity_positive(layer: &Layer) -> boolReturn positive/negative polarity.
layer_polarity_group(layer: &Layer) -> Option<String>Return deferred polarity group name.
layer_polarity_sequence(layer: &Layer) -> i32Return 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

MethodDescription
log() -> EventLogReturn 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.