/// <summary> /// Helper class constructor /// </summary> /// <param name="filePath">Path of the DXF file</param> /// <param name="fChart">Flowchart object reference</param> /// <param name="ExportTextAsMultiline">ExportTextAsMultiline property value</param> /// <param name="ExportExternalImages">ExportExternalImages property value</param> /// <param name="NamePattern">Image files name pattern</param> /// <param name="ImagePath">Path for image files saving</param> public DxfHelper( string filePath, FlowChart fChart, bool ExportTextAsMultiline, bool ExportExternalImages, string NamePattern, string ImagePath) { try { // Preparing for writing DXF file m_filePath = filePath; m_StreamWriter = new StreamWriter(filePath, false , Encoding.ASCII); if ( m_StreamWriter == null) throw new Exception("Can't open DXF file"); m_ExportTextAsMultiline = ExportTextAsMultiline; m_ExportExternalImages = ExportExternalImages; provider = new UnitFormatter( m_UnitScale, "."); m_FlowChart = fChart; FileNamePattern = NamePattern; BasedPath = ImagePath; doc = new XmlDocument(); if ( doc == null ) throw new Exception("Can't create XML repository"); // Getting temporarily XML storage from resource try { StreamReader sr = new StreamReader(Assembly.GetExecutingAssembly(). GetManifestResourceStream("MindFusion.Diagramming.Export.DxfExporter.xml"),Encoding.ASCII); if ( sr == null ) throw new Exception("Can't open stream"); string XmlContent = sr.ReadToEnd(); if (XmlContent == "") throw new Exception("Can't read content"); doc.LoadXml(XmlContent); } catch (Exception) { throw new Exception("Error loading XML template from resource"); } // Hashing some temporarily XML nodes for future use nodeRoot = doc.DocumentElement; if ( nodeRoot == null ) throw new Exception("Can't create nodeRoot"); HashNode("header", ref nodeHeader); HashNode("tables", ref nodeTables); HashNode("tables/ltypes", ref nodeLtypes); HashNode("tables/style", ref nodeStyle); HashNode("tables/layer", ref nodeLayers); HashNode("blocks", ref nodeBlocks); HashNode("entities", ref nodeEntities); HashNode("objects", ref nodeObjects); // Setting background group XmlNode node = nodeEntities.AppendChild(doc.CreateNode(XmlNodeType.Element,BACKGROUND_LAYER, "")); if ( node != null ) node.InnerText = String.Format(provider, " 0\nSOLID\n 100\nAcDbEntity\n 5\n{10:X3}\n 8\n{9}\n 62\n{8:ACI}\n 100\nAcDbTrace\n 10\n{0:U}\n 20\n{1:U}\n 11\n{2:U}\n 21\n{3:U}\n 12\n{4:U}\n 22\n{5:U}\n 13\n{6:U}\n 23\n{7:U}\n", 0, 0, m_FlowChart.DocExtents.Width, 0, 0, m_FlowChart.DocExtents.Height, m_FlowChart.DocExtents.Width ,m_FlowChart.DocExtents.Height, m_FlowChart.BackColor, BACKGROUND_LAYER, 99); // Indicates that object was initialized successfully m_valid = true; } catch ( Exception ex ) { m_valid = false; m_status = ex.Message; Trace.WriteLine(String.Format("{0} error {1}\n","DxfHelper.Construct",ex.Message)); } }