public static void Add3dPolylineVertexToExport(ref StringBuilder _sb, Vector3 _coords, string _layer_name, int _index_color, long _true_color) { if (_sb == null) { return; } string tmp = string.Empty; _sb.AppendLine(((int)DXFSpecSaveCodes.ENTITY_TYPE).ToString()); // 0 _sb.AppendLine("VERTEX"); // common _sb.AppendLine(((int)DXFSpecSaveCodes.SUBCLASS_MARKER).ToString()); // 100 _sb.AppendLine("AcDbEntity"); _sb.AppendLine(((int)DXFSpecSaveCodes.LAYER_NAME).ToString()); // 8 tmp = (string.IsNullOrEmpty(_layer_name)) ? "0" : _layer_name; _sb.AppendLine(tmp); _sb.AppendLine(((int)DXFSpecSaveCodes.COLOR_INDEX).ToString()); // 62 _sb.AppendLine(_index_color.ToString()); // 0 = ByBlock, 256 = ByLayer //_sb.AppendLine(((int)DXFSpecSaveCodes.TRUE_COLOR).ToString()); // 420 //_sb.AppendLine(_true_color.ToString()); // vertex _sb.AppendLine(((int)DXFSpecSaveCodes.SUBCLASS_MARKER).ToString()); // 100 _sb.AppendLine("AcDbVertex"); _sb.AppendLine(((int)DXFSpecSaveCodes.SUBCLASS_MARKER).ToString()); // 100 _sb.AppendLine("AcDb3dPolylineVertex"); _sb.AppendLine(((int)DXFSpecSaveCodes.POINT_LOCATION_X).ToString()); // 10 _sb.AppendLine(DXFUtils.ValueToString(_coords.X, "F8")); _sb.AppendLine(((int)DXFSpecSaveCodes.POINT_LOCATION_Y).ToString()); // 20 _sb.AppendLine(DXFUtils.ValueToString(_coords.Y, "F8")); _sb.AppendLine(((int)DXFSpecSaveCodes.POINT_LOCATION_Z).ToString()); // 30 _sb.AppendLine(DXFUtils.ValueToString(_coords.Z, "F8")); _sb.AppendLine(((int)DXFSpecSaveCodes.POLYLINE_FLAG).ToString()); // 70 _sb.AppendLine("32"); // 3d polyline vertex }
public double DoubleValue() { return(DXFUtils.StringToDouble(this.FValue)); }
private static void AddLineTypeDefinitionToExport(ref StringBuilder _sb, string _name, string _description, string _pattern = "") { if (_sb == null || string.IsNullOrEmpty(_name)) { return; } string descr = (string.IsNullOrEmpty(_description)) ? "Solid line" : _description; _sb.AppendLine(((int)DXFSpecSaveCodes.ENTITY_TYPE).ToString()); // 0 _sb.AppendLine(DXFUtils.LTYPE); // LTYPE _sb.AppendLine(((int)DXFSpecSaveCodes.SUBCLASS_MARKER).ToString()); // 100 _sb.AppendLine("AcDbSymbolTableRecord"); _sb.AppendLine(((int)DXFSpecSaveCodes.SUBCLASS_MARKER).ToString()); // 100 _sb.AppendLine("AcDbLinetypeTableRecord"); _sb.AppendLine(((int)EntitySaveCode.ENTITY_NAME).ToString()); // 2 _sb.AppendLine(_name); // ENTITY_NAME _sb.AppendLine("70"); // 70 flag for XREFS and EDITING MARKER in AutoCAD _sb.AppendLine("0"); // set no flags _sb.AppendLine("3"); // 3 descriptive text for the linetype _sb.AppendLine(descr); // description _sb.AppendLine("72"); // alignment code; value is always 65, the ASCII code for A _sb.AppendLine("65"); // A // analyse the pattern double[] pattern_element_length; double total_pattern_length = 0.0; int nr_pattern_elements = 0; string[] parts = _pattern.Split(new string[] { "|" }, StringSplitOptions.RemoveEmptyEntries); if (parts != null && parts.Length > 1) { nr_pattern_elements = parts.Length; pattern_element_length = new double[nr_pattern_elements]; int c = 0; foreach (string x in parts) { pattern_element_length[c] = DXFUtils.StringToDouble(x); c++; } total_pattern_length = pattern_element_length.Select(x => Math.Abs(x)).Sum(); _sb.AppendLine("73"); // the number of linetype elements _sb.AppendLine(nr_pattern_elements.ToString()); _sb.AppendLine("40"); // total pattern length _sb.AppendLine(DXFUtils.ValueToString(total_pattern_length, "F15")); foreach (double d in pattern_element_length) { _sb.AppendLine("49"); // dash, dot or space length _sb.AppendLine(DXFUtils.ValueToString(d, "F15")); //_sb.AppendLine("74"); // line element type flags (AutoCAD dosen't recognize it) //_sb.AppendLine("0"); } } else { _sb.AppendLine("73"); // the number of linetype elements _sb.AppendLine("0"); _sb.AppendLine("40"); // total pattern length _sb.AppendLine("0.0"); } }
public static void AddLineTypeAndLayerDefinitionsToExport(ref StringBuilder _sb, List <string> _layer_names, List <SharpDX.Color> _layer_colors) { if (_sb == null) { return; } // ---------------------- START TABLE SECTION ------------------------------------- _sb.AppendLine(((int)EntitySaveCode.ENTITY_START).ToString()); // 0 _sb.AppendLine(DXFUtils.SECTION_START); // SECTION _sb.AppendLine(((int)EntitySaveCode.ENTITY_NAME).ToString()); // 2 _sb.AppendLine(DXFUtils.TABLES_SECTION); // TABLES // ======================= START LTYPE TABLE ===================================== _sb.AppendLine(((int)EntitySaveCode.ENTITY_START).ToString()); // 0 _sb.AppendLine(DXFUtils.TABLE); // TABLE _sb.AppendLine(((int)EntitySaveCode.ENTITY_NAME).ToString()); // 2 _sb.AppendLine(DXFUtils.LTYPE); // LTYPE _sb.AppendLine(((int)DXFSpecSaveCodes.SUBCLASS_MARKER).ToString()); // 100 _sb.AppendLine("AcDbSymbolTable"); _sb.AppendLine("70"); // maximum nr of entries in table _sb.AppendLine("2"); DXFUtils.AddLineTypeDefinitionToExport(ref _sb, "Continuous", "Solid line", ""); //DXFUtils.AddLineTypeDefinitionToExport(ref _sb, "AM_ISO02W050x2", " _ _ _ _ _ _ _ _ _ _ _ _", "3.0|-0.75"); _sb.AppendLine(((int)EntitySaveCode.ENTITY_START).ToString()); // 0 _sb.AppendLine(DXFUtils.TABLE_END); // ENDTAB // ======================== END LTYPE TABLE ====================================== // ======================= START LAYER TABLE ===================================== _sb.AppendLine(((int)EntitySaveCode.ENTITY_START).ToString()); // 0 _sb.AppendLine(DXFUtils.TABLE); // TABLE _sb.AppendLine(((int)EntitySaveCode.ENTITY_NAME).ToString()); // 2 _sb.AppendLine(DXFUtils.LAYER); // LAYER _sb.AppendLine(((int)DXFSpecSaveCodes.SUBCLASS_MARKER).ToString()); // 100 _sb.AppendLine("AcDbSymbolTable"); _sb.AppendLine("70"); // maximum nr of entries in table _sb.AppendLine((_layer_names.Count * 2).ToString()); // add the default layer 0: DXFUtils.AddLayerDefinitionToExport(ref _sb, "0", "Continuous", SharpDX.Color.Black, false); // add all other layers if (_layer_names != null && _layer_colors != null) { int nrL = _layer_names.Count; if (nrL == _layer_colors.Count) { for (int i = 0; i < nrL; i++) { DXFUtils.AddLayerDefinitionToExport(ref _sb, _layer_names[i], "Continuous", _layer_colors[i], false); DXFUtils.AddLayerDefinitionToExport(ref _sb, _layer_names[i] + DXFUtils.LAYER_HIDDEN_SUFFIX, "Continuous", _layer_colors[i], true); } } } _sb.AppendLine(((int)EntitySaveCode.ENTITY_START).ToString()); // 0 _sb.AppendLine(DXFUtils.TABLE_END); // ENDTAB // ======================== END LAYER TABLE ====================================== _sb.AppendLine(((int)EntitySaveCode.ENTITY_START).ToString()); // 0 _sb.AppendLine(DXFUtils.SECTION_END); // ENDSEC // ----------------------- END TABLE SECTION -------------------------------------- }
public static void Add3dPolylineToExport(ref StringBuilder _sb, string _layer_name, SharpDX.Color _color, List <Vector3> _vertices, bool _is_closed = true) { if (_sb == null) { return; } if (_vertices == null || _vertices.Count == 0) { return; } string tmp = string.Empty; _sb.AppendLine(((int)DXFSpecSaveCodes.ENTITY_TYPE).ToString()); // 0 _sb.AppendLine("POLYLINE"); // common _sb.AppendLine(((int)DXFSpecSaveCodes.SUBCLASS_MARKER).ToString()); // 100 _sb.AppendLine("AcDbEntity"); _sb.AppendLine(((int)DXFSpecSaveCodes.LAYER_NAME).ToString()); // 8 tmp = (string.IsNullOrEmpty(_layer_name)) ? "0" : _layer_name; _sb.AppendLine(tmp); _sb.AppendLine(((int)DXFSpecSaveCodes.COLOR_INDEX).ToString()); // 62 DXFImportExport.DXFColor dxf_color = new DXFImportExport.DXFColor((float)_color.R, (float)_color.G, (float)_color.B, (float)_color.A, true); int ic = 256; // DXFImportExport.DXFColor.DXFColor2Index(dxf_color); _sb.AppendLine(ic.ToString()); // 256 = ByLayer //_sb.AppendLine(((int)DXFSpecSaveCodes.TRUE_COLOR).ToString()); // 420 long tc = DXFImportExport.DXFColor.DXFColor2TrueColor(dxf_color); //_sb.AppendLine(tc.ToString()); // 3d polyline _sb.AppendLine(((int)DXFSpecSaveCodes.SUBCLASS_MARKER).ToString()); // 100 _sb.AppendLine("AcDb3dPolyline"); _sb.AppendLine(((int)DXFSpecSaveCodes.ENT_FLOW_FLAG).ToString()); // 66 _sb.AppendLine("1"); _sb.AppendLine(((int)DXFSpecSaveCodes.POINT_LOCATION_X).ToString()); // 10 _sb.AppendLine("0"); _sb.AppendLine(((int)DXFSpecSaveCodes.POINT_LOCATION_Y).ToString()); // 20 _sb.AppendLine("0"); _sb.AppendLine(((int)DXFSpecSaveCodes.POINT_LOCATION_Z).ToString()); // 30 _sb.AppendLine("0"); _sb.AppendLine(((int)DXFSpecSaveCodes.POLYLINE_FLAG).ToString()); // 70: closed(1) 3d polyline(8) tmp = (_is_closed) ? "9" : "8"; _sb.AppendLine(tmp); // 3d polyline vertices foreach (Vector3 v in _vertices) { Vector3 v_corrected = new Vector3(v.X, -v.Z, v.Y); DXFUtils.Add3dPolylineVertexToExport(ref _sb, v_corrected, _layer_name, 256, tc); } // mark end of vertex sequence _sb.AppendLine(((int)DXFSpecSaveCodes.ENTITY_TYPE).ToString()); // 0 _sb.AppendLine("SEQEND"); _sb.AppendLine(((int)DXFSpecSaveCodes.SUBCLASS_MARKER).ToString()); // 100 _sb.AppendLine("AcDbEntity"); _sb.AppendLine(((int)DXFSpecSaveCodes.LAYER_NAME).ToString()); // 8 tmp = (string.IsNullOrEmpty(_layer_name)) ? "0" : _layer_name; _sb.AppendLine(tmp); _sb.AppendLine(((int)DXFSpecSaveCodes.COLOR_INDEX).ToString()); // 62 _sb.AppendLine(ic.ToString()); //_sb.AppendLine(((int)DXFSpecSaveCodes.TRUE_COLOR).ToString()); // 420 //_sb.AppendLine(tc.ToString()); }