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 }
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"); } }