예제 #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
 public double DoubleValue()
 {
     return(DXFUtils.StringToDouble(this.FValue));
 }
예제 #3
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");
            }
        }
예제 #4
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 --------------------------------------
        }
예제 #5
0
        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());
        }