Пример #1
0
        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
        }
Пример #2
0
        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");
            }
        }