|
|
|
|
@ -530,7 +530,7 @@ pub struct ObjectsBuilder<'a> {
|
|
|
|
|
spline_step: u32,
|
|
|
|
|
blocks: &'a [&'a Block],
|
|
|
|
|
offset: Offset,
|
|
|
|
|
scale_fact: ScaleFactor,
|
|
|
|
|
scale_fact: ScaleFactor
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
impl<'a> ObjectsBuilder<'a> {
|
|
|
|
|
@ -575,6 +575,28 @@ impl<'a> ObjectsBuilder<'a> {
|
|
|
|
|
if !self.ent.common.is_visible {
|
|
|
|
|
return Err("Entity is not visible");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 获取线型名称
|
|
|
|
|
let line_type_name: String = self.ent.common.line_type_name.clone();
|
|
|
|
|
|
|
|
|
|
// 通用样式修改函数:根据line_type_name修改现有style中的line-style
|
|
|
|
|
let update_line_style = |style: &mut String| {
|
|
|
|
|
// 只有当line_type_name需要虚线样式时才进行修改,提高性能
|
|
|
|
|
if line_type_name.contains("DASH") || line_type_name == "BORDURE" {
|
|
|
|
|
// 使用正则表达式替换line-style部分
|
|
|
|
|
if style.contains("line-style:") {
|
|
|
|
|
*style = style.replace(
|
|
|
|
|
&format!("line-style:{}",
|
|
|
|
|
if style.contains("line-style:normal") { "normal" }
|
|
|
|
|
else if style.contains("line-style:dashed") { "dashed" }
|
|
|
|
|
else { "normal" }
|
|
|
|
|
),
|
|
|
|
|
"line-style:dashed"
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// 如果不是特殊线型,保持原有样式不变,避免不必要的操作
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// 实体类型转换处理
|
|
|
|
|
match &self.ent.specific {
|
|
|
|
|
@ -582,6 +604,9 @@ impl<'a> ObjectsBuilder<'a> {
|
|
|
|
|
EntityType::Circle(circle) => {
|
|
|
|
|
let mut ellipse: Ellipse = circle.into();
|
|
|
|
|
|
|
|
|
|
// 根据line_type_name更新线型样式
|
|
|
|
|
ellipse.update_line_style(&update_line_style);
|
|
|
|
|
|
|
|
|
|
ellipse.scale(self.scale_fact.x, self.scale_fact.y);
|
|
|
|
|
ellipse.x += self.offset.x;
|
|
|
|
|
ellipse.y -= self.offset.y;
|
|
|
|
|
@ -590,6 +615,9 @@ impl<'a> ObjectsBuilder<'a> {
|
|
|
|
|
EntityType::Line(line) => {
|
|
|
|
|
let mut line: Line = line.into();
|
|
|
|
|
|
|
|
|
|
// 根据line_type_name更新线型样式
|
|
|
|
|
line.update_line_style(&update_line_style);
|
|
|
|
|
|
|
|
|
|
line.scale(self.scale_fact.x, self.scale_fact.y);
|
|
|
|
|
|
|
|
|
|
line.x1 += self.offset.x;
|
|
|
|
|
@ -603,6 +631,9 @@ impl<'a> ObjectsBuilder<'a> {
|
|
|
|
|
EntityType::Arc(arc) => {
|
|
|
|
|
let mut arc: Arc = arc.into();
|
|
|
|
|
|
|
|
|
|
// 根据line_type_name更新线型样式
|
|
|
|
|
arc.update_line_style(&update_line_style);
|
|
|
|
|
|
|
|
|
|
arc.scale(self.scale_fact.x, self.scale_fact.y);
|
|
|
|
|
|
|
|
|
|
arc.x += self.offset.x;
|
|
|
|
|
@ -613,6 +644,9 @@ impl<'a> ObjectsBuilder<'a> {
|
|
|
|
|
EntityType::Spline(spline) => {
|
|
|
|
|
let mut poly: Polygon = (spline, self.spline_step).into();
|
|
|
|
|
|
|
|
|
|
// 根据line_type_name更新线型样式
|
|
|
|
|
poly.update_line_style(&update_line_style);
|
|
|
|
|
|
|
|
|
|
match poly.coordinates.len() {
|
|
|
|
|
0 | 1 => Err("Error removing empty Spline"),
|
|
|
|
|
//I'll need to improve my understanding of splines and the math here
|
|
|
|
|
@ -668,6 +702,9 @@ impl<'a> ObjectsBuilder<'a> {
|
|
|
|
|
EntityType::Ellipse(ellipse) => {
|
|
|
|
|
let mut ellipse: Ellipse = ellipse.into();
|
|
|
|
|
|
|
|
|
|
// 根据line_type_name更新线型样式
|
|
|
|
|
ellipse.update_line_style(&update_line_style);
|
|
|
|
|
|
|
|
|
|
ellipse.scale(self.scale_fact.x, self.scale_fact.y);
|
|
|
|
|
ellipse.x += self.offset.x;
|
|
|
|
|
ellipse.y -= self.offset.y;
|
|
|
|
|
@ -709,6 +746,9 @@ impl<'a> ObjectsBuilder<'a> {
|
|
|
|
|
2 => {
|
|
|
|
|
let mut line = Line::try_from(polyline)?;
|
|
|
|
|
|
|
|
|
|
// 根据line_type_name更新线型样式
|
|
|
|
|
line.update_line_style(&update_line_style);
|
|
|
|
|
|
|
|
|
|
line.scale(self.scale_fact.x, self.scale_fact.x);
|
|
|
|
|
|
|
|
|
|
line.x1 += self.offset.x;
|
|
|
|
|
@ -721,6 +761,9 @@ impl<'a> ObjectsBuilder<'a> {
|
|
|
|
|
}
|
|
|
|
|
_ => {
|
|
|
|
|
if let Ok(mut ellipse) = Ellipse::try_from(polyline) {
|
|
|
|
|
// 根据line_type_name更新线型样式
|
|
|
|
|
ellipse.update_line_style(&update_line_style);
|
|
|
|
|
|
|
|
|
|
ellipse.scale(self.scale_fact.x, self.scale_fact.y);
|
|
|
|
|
|
|
|
|
|
ellipse.x += self.offset.x;
|
|
|
|
|
@ -730,6 +773,9 @@ impl<'a> ObjectsBuilder<'a> {
|
|
|
|
|
} else {
|
|
|
|
|
let mut poly: Polygon = polyline.into();
|
|
|
|
|
|
|
|
|
|
// 根据line_type_name更新线型样式
|
|
|
|
|
poly.update_line_style(&update_line_style);
|
|
|
|
|
|
|
|
|
|
poly.scale(self.scale_fact.x, self.scale_fact.y);
|
|
|
|
|
|
|
|
|
|
for cord in &mut poly.coordinates {
|
|
|
|
|
@ -746,6 +792,9 @@ impl<'a> ObjectsBuilder<'a> {
|
|
|
|
|
2 => {
|
|
|
|
|
let mut line = Line::try_from(lwpolyline)?;
|
|
|
|
|
|
|
|
|
|
// 根据line_type_name更新线型样式
|
|
|
|
|
line.update_line_style(&update_line_style);
|
|
|
|
|
|
|
|
|
|
line.scale(self.scale_fact.x, self.scale_fact.y);
|
|
|
|
|
|
|
|
|
|
line.x1 += self.offset.x;
|
|
|
|
|
@ -758,6 +807,9 @@ impl<'a> ObjectsBuilder<'a> {
|
|
|
|
|
}
|
|
|
|
|
_ => {
|
|
|
|
|
if let Ok(mut ellipse) = Ellipse::try_from(lwpolyline) {
|
|
|
|
|
// 根据line_type_name更新线型样式
|
|
|
|
|
ellipse.update_line_style(&update_line_style);
|
|
|
|
|
|
|
|
|
|
ellipse.scale(self.scale_fact.x, self.scale_fact.y);
|
|
|
|
|
|
|
|
|
|
ellipse.x += self.offset.x;
|
|
|
|
|
@ -767,6 +819,9 @@ impl<'a> ObjectsBuilder<'a> {
|
|
|
|
|
} else {
|
|
|
|
|
let mut poly: Polygon = lwpolyline.into();
|
|
|
|
|
|
|
|
|
|
// 根据line_type_name更新线型样式
|
|
|
|
|
poly.update_line_style(&update_line_style);
|
|
|
|
|
|
|
|
|
|
poly.scale(self.scale_fact.x, self.scale_fact.y);
|
|
|
|
|
|
|
|
|
|
for cord in &mut poly.coordinates {
|
|
|
|
|
|