Exemple #1
0
 private async Task <DxfFile> WriteToFile(Drawing drawing)
 {
     using (var stream = await WriteToStream(drawing))
     {
         return(DxfFile.Load(stream));
     }
 }
Exemple #2
0
        static void Main(string[] args)
        {
            DxfFile           dxfFile     = DxfFile.Load(@"D:\Test\Spline.dxf");
            IList <DxfEntity> dxfEntities = dxfFile.Entities;

            foreach (var entity in dxfEntities)
            {
                if (entity is DxfSpline)
                {
                    DxfSpline dxfSpline = entity as DxfSpline;
                    Point2D[] p         = new Point2D[dxfSpline.ControlPoints.Count];
                    double[]  t         = new double[dxfSpline.KnotValues.Count];
                    for (int i = 0; i < p.Length; i++)
                    {
                        p[i] = new Point2D(dxfSpline.ControlPoints[i].X, dxfSpline.ControlPoints[i].Y);
                    }
                    for (int i = 0; i < t.Length; i++)
                    {
                        t[i] = dxfSpline.KnotValues[i];
                    }
                    Point2D test = new Point2D(dxfSpline.ControlPoints[0].X, dxfSpline.ControlPoints[0].Y);
                    test = NET.Spline.EvaluateSpline(p, t, dxfSpline.DegreeOfCurve, 0.1);
                    test = NET.Spline.EvaluateSpline(p, t, dxfSpline.DegreeOfCurve, 0.2);
                    test = NET.Spline.EvaluateSpline(p, t, dxfSpline.DegreeOfCurve, 0.3);
                    test = NET.Spline.EvaluateSpline(p, t, dxfSpline.DegreeOfCurve, 0.4);
                    test = NET.Spline.EvaluateSpline(p, t, dxfSpline.DegreeOfCurve, 0.5);
                    test = NET.Spline.EvaluateSpline(p, t, dxfSpline.DegreeOfCurve, 0.6);
                    test = NET.Spline.EvaluateSpline(p, t, dxfSpline.DegreeOfCurve, 0.7);
                    test = NET.Spline.EvaluateSpline(p, t, dxfSpline.DegreeOfCurve, 0.8);
                    test = NET.Spline.EvaluateSpline(p, t, dxfSpline.DegreeOfCurve, 0.9);
                    test = new Point2D(dxfSpline.ControlPoints[dxfSpline.ControlPoints.Count - 1].X, dxfSpline.ControlPoints[dxfSpline.ControlPoints.Count - 1].Y);
                }
            }
        }
Exemple #3
0
        public void ReadDxbNoLengthOrPositionStreamTest()
        {
            var data = DxbSentinel.Concat(new byte[]
            {
                // color
                136,        // type specifier for new color
                0x01, 0x00, // color index 1

                // line
                0x01,       // type specifier
                0x01, 0x00, // P1.X = 0x0001
                0x02, 0x00, // P1.Y = 0x0002
                0x03, 0x00, // P1.Z = 0x0003
                0x04, 0x00, // P2.X = 0x0004
                0x05, 0x00, // P2.Y = 0x0005
                0x06, 0x00, // P2.Z = 0x0006

                0x0         // null terminator
            }).ToArray();

            using (var ms = new MemoryStream(data))
                using (var stream = new StreamWithNoLengthOrPosition(ms))
                {
                    var file = DxfFile.Load(stream);
                    var line = (DxfLine)file.Entities.Single();
                    Assert.Equal(1, line.Color.RawValue);
                    Assert.Equal(new DxfPoint(1, 2, 3), line.P1);
                    Assert.Equal(new DxfPoint(4, 5, 6), line.P2);
                }
        }
Exemple #4
0
 public void ExceptionOnNonDxfFileTest()
 {
     using (var ms = new MemoryStream())
     {
         // made to look like the start of an R14 DWG
         var dwgBytes = new[]
         {
             'A', 'C', '1', '0', '1', '4',
             0x00, 0x00, 0x00, 0x00, 0x00, 0x00
         };
         foreach (var b in dwgBytes)
         {
             ms.WriteByte((byte)b);
         }
         ms.Flush();
         ms.Seek(0, SeekOrigin.Begin);
         try
         {
             DxfFile.Load(ms);
             throw new Exception("Previous call should have thrown.");
         }
         catch (DxfReadException ex)
         {
             if (ex.Message != "Not a valid DXF file header: `AC1014`.")
             {
                 throw new Exception("Improper exception", ex);
             }
         }
     }
 }
Exemple #5
0
        public async void VerifyNonDefaultVersionIsPreservedInWriteTest()
        {
            using (var ms1 = new MemoryStream())
            {
                var drawing = new Drawing();

                // write file as R13
                using (new DxfFileSettingsProvider(new DxfFileSettings()
                {
                    FileVersion = DxfFileVersion.R13
                }))
                {
                    Assert.True(await Workspace.ReaderWriterService.TryWriteDrawing("filename.dxf", drawing, ViewPort.CreateDefaultViewPort(), ms1, preserveSettings: false));
                }

                // verify that it was written as such
                ms1.Seek(0, SeekOrigin.Begin);
                var file = DxfFile.Load(ms1);
                Assert.Equal(DxfAcadVersion.R13, file.Header.Version);

                using (var ms2 = new MemoryStream())
                {
                    // write it again
                    Assert.True(await Workspace.ReaderWriterService.TryWriteDrawing("filename.dxf", drawing, ViewPort.CreateDefaultViewPort(), ms2, preserveSettings: true));

                    // verify again that it was written correctly without specifying drawing settings
                    ms2.Seek(0, SeekOrigin.Begin);
                    file = DxfFile.Load(ms2);
                    Assert.Equal(DxfAcadVersion.R13, file.Header.Version);
                }
            }
        }
Exemple #6
0
        public void ReadDxbPolylineTest()
        {
            var data = DxbSentinel.Concat(new byte[]
            {
                19,         // polyline
                0x00, 0x00, // is closed = false

                20,         // vertex
                0x01, 0x00, // x
                0x02, 0x00, // y

                20,         // vertex
                0x03, 0x00, // x
                0x04, 0x00, // y

                17,         // seqend

                0x00        // null terminator
            }).ToArray();

            using (var stream = new MemoryStream(data))
            {
                var file = DxfFile.Load(stream);
                var poly = (DxfPolyline)file.Entities.Single();
                Assert.Equal(2, poly.Vertices.Count);
                Assert.Equal(new DxfPoint(1.0, 2.0, 0.0), poly.Vertices[0].Location);
                Assert.Equal(new DxfPoint(3.0, 4.0, 0.0), poly.Vertices[1].Location);
            }
        }
        public string Upload()
        {
            var upload = Request.Form.Files["file"];

            if (upload != null)
            {
                // получаем имя файла
                var fileName = Path.GetFileName(upload.FileName);

                using (var ms = new MemoryStream())
                {
                    upload.CopyTo(ms);
                    ms.Seek(0, SeekOrigin.Begin);

                    try
                    {
                        var dxfFile  = DxfFile.Load(ms);
                        var fileJson = new DxfToJsonConverter().EncodeFileJson(dxfFile);
                        return(fileJson);
                    }
                    catch (Exception e)
                    {
                        return($"{{\"error\":\"{e.Message}\"}}");
                    }
                }
            }

            return("{\"error\":\"No File Uploaded\"}");
        }
Exemple #8
0
 public void ReadEmptyFileTest()
 {
     using (var ms = new MemoryStream())
     {
         var _ = DxfFile.Load(ms);
     }
 }
        public void ReadDxbNoLengthOrPositionStreamTest()
        {
            var data = new byte[]
            {
                // DXB sentinel
                (byte)'A', (byte)'u', (byte)'t', (byte)'o', (byte)'C', (byte)'A', (byte)'D', (byte)' ', (byte)'D', (byte)'X', (byte)'B', (byte)' ', (byte)'1', (byte)'.', (byte)'0', (byte)'\r', (byte)'\n', 0x1A, 0x0,

                // color
                136,        // type specifier for new color
                0x01, 0x00, // color index 1

                // line
                0x01,       // type specifier
                0x01, 0x00, // P1.X = 0x0001
                0x02, 0x00, // P1.Y = 0x0002
                0x03, 0x00, // P1.Z = 0x0003
                0x04, 0x00, // P1.X = 0x0004
                0x05, 0x00, // P1.Y = 0x0005
                0x06, 0x00, // P1.Z = 0x0006

                // null terminator
                0x0
            };

            using (var ms = new MemoryStream(data))
                using (var stream = new StreamWithNoLengthOrPosition(ms))
                {
                    var file = DxfFile.Load(stream);
                    var line = (DxfLine)file.Entities.Single();
                    Assert.Equal(1, line.Color.RawValue);
                    Assert.Equal(new DxfPoint(1, 2, 3), line.P1);
                    Assert.Equal(new DxfPoint(4, 5, 6), line.P2);
                }
        }
Exemple #10
0
        private void buttonOpenDxf_Click(object sender, EventArgs e)
        {
            var opf = new OpenFileDialog();

            opf.Filter = "DXF Files(*.dxf)|*.dxf";
            if (opf.ShowDialog() == DialogResult.OK)
            {
                dxfFile = DxfFile.Load(opf.FileName);

                var(centerX, centerY) = new Mather().GetCenter(dxfFile);
                Renderer.OffsetX      = -centerX + pictureBoxMain.Width / 2f;
                Renderer.OffsetY      = centerY - pictureBoxMain.Height / 2f;

                Renderer.Render(dxfFile, bitmap, pictureBoxMain.Width, pictureBoxMain.Height);

                // var encodedFile = new DxfToJsonConverter().EncodeFileJson(dxfFile);
                // File.WriteAllText("json.json", encodedFile);

                pictureBoxMain.Refresh();

                labelCost.Text = "Cost: " + new Mather().GetFileTotalLength(dxfFile) + " c.u.";
            }

            Focus();
        }
Exemple #11
0
 private DxfFile WriteToFile(Drawing drawing)
 {
     using (var stream = WriteToStream(drawing))
     {
         return(DxfFile.Load(stream));
     }
 }
        public IEnumerable <DxfLine> Trace(Stream data, Settings settings)
        {
            var dxf             = DxfFile.Load(data);
            var unitsConversion = GetConversionToMillimeters(dxf);
            var lines           = TraceDxf(dxf, settings, unitsConversion);

            return(lines.ToArray());
        }
Exemple #13
0
        public static int Export(string path, IEnumerable <NFP> polygons, IEnumerable <NFP> sheets)
        {
            Dictionary <DxfFile, int> dxfexports = new Dictionary <DxfFile, int>();

            for (int i = 0; i < sheets.Count(); i++)
            {
                DxfFile sheetdxf;
                double  sheetwidth;
                GenerateSheetOutline(sheets, i, out sheetdxf, out sheetwidth);

                foreach (NFP nFP in polygons)
                {
                    var pivot = nFP.Points[0];

                    DxfFile fl;
                    if (nFP.fitted == false || !nFP.Name.ToLower().Contains(".dxf") || nFP.sheet.Id != sheets.ElementAt(i).Id)
                    {
                        continue;
                    }
                    else
                    {
                        fl = DxfFile.Load(nFP.Name);
                    }

                    double sheetXoffset = -sheetwidth * i;

                    DxfPoint         offsetdistance = new DxfPoint(nFP.x + sheetXoffset, nFP.y, 0D);
                    List <DxfEntity> newlist        = OffsetToNest(fl.Entities, new DxfPoint(pivot.x, pivot.y, 0), offsetdistance, nFP.Rotation);

                    foreach (DxfEntity ent in newlist)
                    {
                        sheetdxf.Entities.Add(ent);
                    }
                }

                dxfexports.Add(sheetdxf, sheets.ElementAt(i).Id);
            }

            int sheetcount = 0;

            for (int i = 0; i < dxfexports.Count(); i++)
            {
                var dxf = dxfexports.ElementAt(i).Key;
                var id  = dxfexports.ElementAt(i).Value;

                if (dxf.Entities.Count != 1)
                {
                    sheetcount += 1;
                    FileInfo fi = new FileInfo(path);
                    dxf.Save($"{fi.FullName.Substring(0, fi.FullName.Length - 4)}{id}.dxf", true);
                }
            }

            return(sheetcount);
        }
Exemple #14
0
 public void ReadBinaryDxfNoLengthOrPositionStreamTest()
 {
     // this file contains 12 lines
     using (var fs = new FileStream("diamond-bin.dxf", FileMode.Open, FileAccess.Read))
         using (var stream = new StreamWithNoLengthOrPosition(fs))
         {
             var file = DxfFile.Load(stream);
             Assert.Equal(12, file.Entities.Count);
             Assert.Equal(12, file.Entities.Where(e => e.EntityType == DxfEntityType.Line).Count());
         }
 }
Exemple #15
0
 protected static DxfFile Parse(string data)
 {
     using (var ms = new MemoryStream())
         using (var writer = new StreamWriter(ms, new UTF8Encoding(false)))
         {
             writer.WriteLine(data.Trim());
             writer.Flush();
             ms.Seek(0, SeekOrigin.Begin);
             return(DxfFile.Load(ms));
         }
 }
Exemple #16
0
 private DxfFile RoundTripFileThroughODA(DxfFile file)
 {
     using (var input = new ManageTemporaryDirectory())
         using (var output = new ManageTemporaryDirectory())
         {
             file.Save(Path.Combine(input.DirectoryPath, "drawing.dxf"));
             AssertODAConvert(input.DirectoryPath, output.DirectoryPath, file.Header.Version);
             var result = DxfFile.Load(Path.Combine(output.DirectoryPath, "drawing.dxf"));
             return(result);
         }
 }
Exemple #17
0
 public bool Load(System.IO.Stream stream)
 {
     try
     {
         return(Load(DxfFile.Load(stream)));
     }
     catch (Exception ex)
     {
         _log.Warn($"Libray IxMilia.Dxf failed to load DXF stream : {ex.Message}");
         return(false);
     }
 }
Exemple #18
0
 public void ReadWithExtraTrailingNewlinesTest()
 {
     // file must be created this way to ensure all appropriate newlines are present for parsing
     using (var ms = new MemoryStream())
         using (var writer = new StreamWriter(ms))
         {
             writer.Write("0\r\nEOF\r\n\r\n");
             writer.Flush();
             ms.Seek(0, SeekOrigin.Begin);
             var file = DxfFile.Load(ms);
         }
 }
Exemple #19
0
 public bool Load(string filePath)
 {
     try
     {
         return(Load(DxfFile.Load(filePath)));
     }
     catch (Exception ex)
     {
         _log.Warn($"Libray IxMilia.Dxf failed to load DXF file {filePath} : {ex.Message}");
         return(false);
     }
 }
Exemple #20
0
        public void BinaryReaderTest()
        {
            // this file contains 12 lines
            var file = DxfFile.Load("diamond-bin.dxf");

            Assert.Equal(12, file.Entities.Count);
            Assert.Equal(12, file.Entities.Where(e => e.EntityType == DxfEntityType.Line).Count());
            var first = (DxfLine)file.Entities.First();

            Assert.Equal(new DxfPoint(45, 45, 0), first.P1);
            Assert.Equal(new DxfPoint(45, -45, 0), first.P2);
        }
 public void SkipBomTest()
 {
     using (var stream = new MemoryStream())
         using (var writer = new StreamWriter(stream))
         {
             writer.Write((char)0xFEFF); // BOM
             writer.Write("0\r\nEOF");
             writer.Flush();
             stream.Seek(0, SeekOrigin.Begin);
             var file = DxfFile.Load(stream);
             Assert.Equal(0, file.Layers.Count);
         }
 }
Exemple #22
0
        public void IxMiliaReadODATest()
        {
            // use ODA to convert a minimum-working-file to each of its supported versions and try to open with IxMilia
            var exceptions = new List <Exception>();
            var versions   = new[]
            {
                DxfAcadVersion.R9,
                DxfAcadVersion.R10,
                DxfAcadVersion.R12,
                DxfAcadVersion.R13,
                DxfAcadVersion.R14,
                DxfAcadVersion.R2000,
                DxfAcadVersion.R2004,
                DxfAcadVersion.R2007,
                DxfAcadVersion.R2010,
                DxfAcadVersion.R2013,
                DxfAcadVersion.R2018,
            };

            foreach (var desiredVersion in versions)
            {
                using (var input = new ManageTemporaryDirectory())
                    using (var output = new ManageTemporaryDirectory())
                    {
                        var inputDir  = input.DirectoryPath;
                        var outputDir = output.DirectoryPath;
                        var barePath  = Path.Combine(inputDir, "bare.dxf");
                        File.WriteAllText(barePath, MinimumFileText);
                        AssertODAConvert(inputDir, outputDir, desiredVersion);

                        var convertedFilePath = Directory.EnumerateFiles(outputDir, "*.dxf").Single();
                        using (var fs = new FileStream(convertedFilePath, FileMode.Open))
                        {
                            try
                            {
                                var file = DxfFile.Load(fs);
                                Assert.IsType <DxfLine>(file.Entities.Single());
                            }
                            catch (Exception ex)
                            {
                                exceptions.Add(ex);
                            }
                        }
                    }
            }

            if (exceptions.Count > 0)
            {
                throw new AggregateException("Error reading ODA-produced files", exceptions);
            }
        }
Exemple #23
0
        public void IxMiliaReadAutoCadTest()
        {
            // use AutoCad to convert a minimum-working-file to each of its supported versions and try to open with IxMilia
            var exceptions = new List <Exception>();

            using (var directory = new ManageTemporaryDirectory())
            {
                var tempDir  = directory.DirectoryPath;
                var barePath = Path.Combine(tempDir, "bare.dxf");
                File.WriteAllText(barePath, MinimumFileText);

                var scriptLines = new List <string>();
                scriptLines.Add("FILEDIA 0");
                scriptLines.Add($"DXFIN \"{barePath}\"");
                foreach (var version in new[] { "R12", "2000", "2004", "2007", "2010", "2013" })
                {
                    var fullPath = Path.Combine(tempDir, $"result-{version}.dxf");
                    scriptLines.Add($"DXFOUT \"{fullPath}\" V {version} 16");
                }

                scriptLines.Add("FILEDIA 1");
                scriptLines.Add("QUIT Y");
                scriptLines.Add("");
                var scriptPath = Path.Combine(tempDir, "script.scr");
                File.WriteAllLines(scriptPath, scriptLines);

                ExecuteAutoCadScript(scriptPath);

                foreach (var resultPath in Directory.EnumerateFiles(tempDir, "result-*.dxf"))
                {
                    using (var fs = new FileStream(resultPath, FileMode.Open))
                    {
                        try
                        {
                            var file = DxfFile.Load(fs);
                            Assert.IsType <DxfLine>(file.Entities.Single());
                        }
                        catch (Exception ex)
                        {
                            exceptions.Add(ex);
                        }
                    }
                }
            }

            if (exceptions.Count > 0)
            {
                throw new AggregateException("Error reading AutoCad-produced files", exceptions);
            }
        }
Exemple #24
0
        public void BinaryReaderPostR13Test()
        {
            var bytes = new List <byte>();

            void WriteB(params byte[] bs)
            {
                foreach (var b in bs)
                {
                    bytes.Add(b);
                }
            }

            void WriteS(string s, bool addTerminator = true)
            {
                foreach (var c in s)
                {
                    bytes.Add((byte)c);
                }

                if (addTerminator)
                {
                    bytes.Add(0x00);
                }
            }

            WriteS("AutoCAD Binary DXF\r\n", addTerminator: false);
            WriteB(0x1A, 0x00);

            WriteB(0x00, 0x00);
            WriteS("SECTION");
            WriteB(0x02, 0x00);
            WriteS("HEADER");
            WriteB(0x09, 0x00);
            WriteS("$LWDISPLAY");
            WriteB(0x22, 0x01);
            WriteB(0x01);
            WriteB(0x00, 0x00);
            WriteS("ENDSEC");

            WriteB(0x00, 0x00);
            WriteS("EOF");

            using (var ms = new MemoryStream())
            {
                ms.Write(bytes.ToArray(), 0, bytes.Count);
                ms.Seek(0, SeekOrigin.Begin);
                var file = DxfFile.Load(ms);
                Assert.True(file.Header.DisplayLineweightInModelAndLayoutTab);
            }
        }
Exemple #25
0
        public void RoundTripBinaryFileTest(DxfAcadVersion version)
        {
            var file = new DxfFile();

            file.Header.Version      = version;
            file.Header.CurrentLayer = "current-layer";
            using (var ms = new MemoryStream())
            {
                file.Save(ms, asText: false);
                ms.Flush();
                ms.Seek(0, SeekOrigin.Begin);
                var roundTripped = DxfFile.Load(ms);
                Assert.Equal("current-layer", roundTripped.Header.CurrentLayer);
            }
        }
Exemple #26
0
        public async void VerifyDefaultDxfVersionInWriteTest()
        {
            using (var ms = new MemoryStream())
            {
                var drawing = new Drawing();

                // write file with defaults
                Assert.True(await Workspace.ReaderWriterService.TryWriteDrawing("filename.dxf", drawing, ViewPort.CreateDefaultViewPort(), ms, preserveSettings: false));

                // verify that the written default is correct
                ms.Seek(0, SeekOrigin.Begin);
                var file = DxfFile.Load(ms);
                Assert.Equal(DxfAcadVersion.R12, file.Header.Version);
            }
        }
Exemple #27
0
        public void ReadFileWithExplicitNullEncodingTest()
        {
            // ensure that a `null` text encoding doesn't break file reading
            using (var ms = new MemoryStream())
                using (var writer = new StreamWriter(ms, Encoding.ASCII))
                {
                    writer.WriteLine(@"
  0
EOF
".Trim());
                    writer.Flush();
                    ms.Seek(0, SeekOrigin.Begin);
                    var _file = DxfFile.Load(ms, defaultEncoding: null);
                }
        }
Exemple #28
0
 public static bool ReadFile(string fileName, out DxfFile dxfFile)
 {
     try
     {
         using (var fs = new FileStream(fileName, FileMode.Open))
         {
             dxfFile = DxfFile.Load(fs);
             return(true);
         }
     }
     catch
     {
         dxfFile = null;
         return(false);
     }
 }
        public void WriteDxbTest()
        {
            // write file
            var file = new DxfFile();

            file.Entities.Add(new DxfLine(new DxfPoint(1, 2, 3), new DxfPoint(4, 5, 6)));
            var stream = new MemoryStream();

            file.SaveDxb(stream);
            stream.Seek(0, SeekOrigin.Begin);

            // read it back in
            var dxb  = DxfFile.Load(stream);
            var line = (DxfLine)dxb.Entities.Single();

            Assert.Equal(new DxfPoint(1, 2, 3), line.P1);
            Assert.Equal(new DxfPoint(4, 5, 6), line.P2);
        }
Exemple #30
0
        public void UseCodePageInNonUnicodeFilesTest()
        {
            using (var ms = new MemoryStream())
                using (var writer = new StreamWriter(ms, Encoding.ASCII))
                {
                    // R2004 means non-Unicode.  Characters are handled via $DWGCODEPAGE
                    var head          = @"
  0
SECTION
  2
HEADER
  9
$ACADVER
  1
AC1018
  9
$DWGCODEPAGE
  3
ANSI_1252
  9
$PROJECTNAME
  1".Trim();
                    var tail          = @"
  0
ENDSEC
  0
EOF".Trim();
                    var ansi1252bytes = new byte[]
                    {
                        0xDF, // German sharp S
                    };
                    writer.WriteLine(head);
                    writer.Flush();
                    ms.Write(ansi1252bytes, 0, ansi1252bytes.Length);
                    writer.WriteLine();
                    writer.WriteLine(tail);
                    writer.Flush();
                    ms.Seek(0, SeekOrigin.Begin);

                    var file = DxfFile.Load(ms, Encoding.ASCII); // force ASCII encoding that $DWGCODEPAGE will override
                    Assert.Equal("ß", file.Header.ProjectName);
                }
        }