private void SetAttributes(EntityObject entity, IGeoObject go) { if (go is IColorDef cd && cd.ColorDef != null) { AciColor clr; if (cd.ColorDef.Color.ToArgb().Equals(Color.White.ToArgb()) || cd.ColorDef.Color.ToArgb().Equals(Color.Black.ToArgb())) { clr = AciColor.Default; } else { clr = AciColor.FromTrueColor(cd.ColorDef.Color.ToArgb()); if (clr.Index > 0 && clr.Index < 256) { var indexColor = AciColor.FromCadIndex(clr.Index); if (indexColor.ToColor().ToArgb().Equals(cd.ColorDef.Color.ToArgb())) { // if the color matches the index color exactly // we don't need to use TruColor clr.UseTrueColor = false; } } } entity.Color = clr; } if (go.Layer != null) { if (!createdLayers.TryGetValue(go.Layer, out netDxf.Tables.Layer layer)) { layer = new netDxf.Tables.Layer(go.Layer.Name); doc.Layers.Add(layer); createdLayers[go.Layer] = layer; } entity.Layer = layer; } if (go is ILinePattern lp) { if (!createdLinePatterns.TryGetValue(lp.LinePattern, out Linetype linetype)) { List <LinetypeSegment> segments = new List <LinetypeSegment>(); if (lp.LinePattern.Pattern != null) { for (int i = 0; i < lp.LinePattern.Pattern.Length; i++) { LinetypeSegment ls; if ((i & 0x01) == 0) { ls = new LinetypeSimpleSegment(lp.LinePattern.Pattern[i]); } else { ls = new LinetypeSimpleSegment(-lp.LinePattern.Pattern[i]); } segments.Add(ls); } } linetype = new Linetype(lp.LinePattern.Name); linetype.Segments.AddRange(segments); doc.Linetypes.Add(linetype); createdLinePatterns[lp.LinePattern] = linetype; } entity.Linetype = linetype; } if (go is ILineWidth lw) { double minError = double.MaxValue; Lineweight found = Lineweight.Default; foreach (Lineweight lwe in Enum.GetValues(typeof(Lineweight))) { double err = Math.Abs(((int)lwe) / 100.0 - lw.LineWidth.Width); if (err < minError) { minError = err; found = lwe; } } entity.Lineweight = found; } }
private void SetAttributes(EntityObject entity, IGeoObject go) { if (go is IColorDef cd && cd.ColorDef != null) { AciColor clr = AciColor.FromTrueColor(cd.ColorDef.Color.ToArgb()); entity.Color = clr; } if (go.Layer != null) { if (!createdLayers.TryGetValue(go.Layer, out netDxf.Tables.Layer layer)) { layer = new netDxf.Tables.Layer(go.Layer.Name); doc.Layers.Add(layer); createdLayers[go.Layer] = layer; } entity.Layer = layer; } if (go is ILinePattern lp) { if (!createdLinePatterns.TryGetValue(lp.LinePattern, out Linetype linetype)) { List <LinetypeSegment> segments = new List <LinetypeSegment>(); if (lp.LinePattern.Pattern != null) { for (int i = 0; i < lp.LinePattern.Pattern.Length; i++) { LinetypeSegment ls; if ((i & 0x01) == 0) { ls = new LinetypeSimpleSegment(lp.LinePattern.Pattern[i]); } else { ls = new LinetypeSimpleSegment(-lp.LinePattern.Pattern[i]); } segments.Add(ls); } } linetype = new Linetype(lp.LinePattern.Name); linetype.Segments.AddRange(segments); doc.Linetypes.Add(linetype); createdLinePatterns[lp.LinePattern] = linetype; } entity.Linetype = linetype; } if (go is ILineWidth lw) { double minError = double.MaxValue; Lineweight found = Lineweight.Default; foreach (Lineweight lwe in Enum.GetValues(typeof(Lineweight))) { double err = Math.Abs(((int)lwe) / 100.0 - lw.LineWidth.Width); if (err < minError) { minError = err; found = lwe; } } entity.Lineweight = found; } }