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); } }
public void WritingEmptyBlockR2000Test() { var file = new DxfFile(); file.Header.Version = DxfAcadVersion.R2000; file.Blocks.Add(new DxfBlock()); file.Blocks.Add(SetAllPropertiesToDefault(new DxfBlock())); file.Blocks.Add(null); using (var ms = new MemoryStream()) { file.Save(ms); } }
public void DontWriteBomTest() { using (var stream = new MemoryStream()) { var file = new DxfFile(); file.Save(stream); stream.Seek(0, SeekOrigin.Begin); var buffer = new byte[3]; stream.Read(buffer, 0, buffer.Length); // first three bytes should be " 0", not 0xEF, 0xBB, 0xBF Assert.Equal(new byte[] { (byte)' ', (byte)' ', (byte)'0' }, buffer); } }
public void WriteTablesWithDefaultValuesTest() { var file = new DxfFile(); file.ApplicationIds.Add(new DxfAppId()); file.ApplicationIds.Add(SetAllPropertiesToDefault(new DxfAppId())); file.ApplicationIds.Add(null); file.BlockRecords.Add(new DxfBlockRecord()); file.BlockRecords.Add(SetAllPropertiesToDefault(new DxfBlockRecord())); file.BlockRecords.Add(null); file.DimensionStyles.Add(new DxfDimStyle()); file.DimensionStyles.Add(SetAllPropertiesToDefault(new DxfDimStyle())); file.DimensionStyles.Add(null); file.Layers.Add(new DxfLayer()); file.Layers.Add(SetAllPropertiesToDefault(new DxfLayer())); file.Layers.Add(null); file.Linetypes.Add(new DxfLineType()); file.Linetypes.Add(SetAllPropertiesToDefault(new DxfLineType())); file.Linetypes.Add(null); file.Styles.Add(new DxfStyle()); file.Styles.Add(SetAllPropertiesToDefault(new DxfStyle())); file.Styles.Add(null); file.UserCoordinateSystems.Add(new DxfUcs()); file.UserCoordinateSystems.Add(SetAllPropertiesToDefault(new DxfUcs())); file.UserCoordinateSystems.Add(null); file.Views.Add(new DxfView()); file.Views.Add(SetAllPropertiesToDefault(new DxfView())); file.Views.Add(null); file.ViewPorts.Add(new DxfViewPort()); file.ViewPorts.Add(SetAllPropertiesToDefault(new DxfViewPort())); file.ViewPorts.Add(null); using (var ms = new MemoryStream()) { file.Save(ms); } }
public void VerifyTableItemsReportTableAsOwner() { var file = new DxfFile(); var view = new DxfView(); file.Views.Add(view); using (var ms = new MemoryStream()) { file.Save(ms); // not needed, but it forces pointers to bind } // check pointer values Assert.NotEqual(0u, view.OwnerHandle); Assert.Equal(view.OwnerHandle, file.TablesSection.ViewTable.Handle); // check object values Assert.True(ReferenceEquals(view.Owner, file.TablesSection.ViewTable)); }
public void AutoCadReadAllEntitiesTest() { // TODO: make these work with AutoCAD var unsupportedTypes = new[] { // unsupported because I need to write more information with them typeof(DxfInsert), // need a block to insert typeof(DxfLeader), // needs vertices typeof(DxfMLine), // need to set MLINESTYLE and MLINESTYLE dictionary typeof(DxfDgnUnderlay), // AcDbUnderlayDefinition object ID must be set typeof(DxfDwfUnderlay), // AcDbUnderlayDefinition object ID must be set typeof(DxfPdfUnderlay), // AcDbUnderlayDefinition object ID must be set typeof(DxfSpline), // need to supply control/fit points typeof(DxfVertex), // can't write a lone vertex? // unsupported for other reasons TBD typeof(Dxf3DSolid), typeof(DxfAttribute), typeof(DxfAttributeDefinition), typeof(DxfBody), typeof(DxfHelix), // acad expects AcDbSpline? typeof(DxfLight), typeof(DxfMText), typeof(DxfRegion), typeof(DxfProxyEntity), typeof(DxfShape), typeof(DxfTolerance), }; // create a file with all entities and ensure AutoCAD can read it var file = new DxfFile(); file.Header.Version = DxfAcadVersion.R2010; var assembly = typeof(DxfFile).Assembly; foreach (var type in assembly.GetTypes()) { if (DxfReaderWriterTests.IsEntityOrDerived(type) && type.BaseType != typeof(DxfDimensionBase) && !unsupportedTypes.Contains(type)) { var ctor = type.GetConstructor(Type.EmptyTypes); if (ctor != null) { // add the entity with its default initialized values var entity = (DxfEntity)ctor.Invoke(new object[0]); file.Entities.Add(entity); if (entity is DxfText) { // set an explicit value to ensure that it could be round-tripped ((DxfText)entity).Value = "sample text"; } } } } using (var directory = new ManageTemporaryDirectory()) { var sampleFilePath = Path.Combine(directory.DirectoryPath, "file.dxf"); using (var fs = new FileStream(sampleFilePath, FileMode.Create)) { file.Save(fs); } var scriptFilePath = Path.Combine(directory.DirectoryPath, "script.scr"); var outputFilePath = Path.Combine(directory.DirectoryPath, "result.dxf"); File.WriteAllLines(scriptFilePath, new[] { "FILEDIA 0", $"DXFIN \"{sampleFilePath}\"", $"DXFOUT \"{outputFilePath}\" 16", "FILEDIA 1", "QUIT Y" }); ExecuteAutoCadScript(scriptFilePath); // read file back in and confirm DxfText value DxfFile resultFile; using (var fs = new FileStream(outputFilePath, FileMode.Open)) { resultFile = DxfFile.Load(fs); } var text = resultFile.Entities.OfType<DxfText>().Single(); Assert.Equal("sample text", text.Value); } }
public void TeighaReadAllObjectsTest() { // create a file with all objects and ensure Teigha can read it var file = new DxfFile(); file.Header.Version = DxfAcadVersion.R2013; var assembly = typeof(DxfFile).Assembly; foreach (var type in assembly.GetTypes()) { if (DxfReaderWriterTests.IsObjectOrDerived(type)) { var ctor = type.GetConstructor(Type.EmptyTypes); if (ctor != null) { // add the object with its default initialized values var obj = (DxfObject)ctor.Invoke(new object[0]); file.Objects.Add(obj); } } } using (var input = new ManageTemporaryDirectory()) using (var output = new ManageTemporaryDirectory()) { var inputFile = Path.Combine(input.DirectoryPath, "file.dxf"); using (var fs = new FileStream(inputFile, FileMode.Create)) { file.Save(fs); } AssertTeighaConvert(input.DirectoryPath, output.DirectoryPath, DxfAcadVersion.R2013); } }
public void AutoCadReadIxMiliaFileCompatTest() { // save a DXF file in all the formats that IxMilia.Dxf and AutoCAD support and try to get AutoCAD to read all of them using (var directory = new ManageTemporaryDirectory()) { var tempDir = directory.DirectoryPath; var versions = new[] { DxfAcadVersion.R9, DxfAcadVersion.R10, DxfAcadVersion.R11, DxfAcadVersion.R12, //DxfAcadVersion.R13, DxfAcadVersion.R14, DxfAcadVersion.R2000, DxfAcadVersion.R2004, DxfAcadVersion.R2007, DxfAcadVersion.R2010, DxfAcadVersion.R2013 }; // save the minimal file with all versions var file = new DxfFile(); var text = new DxfText(DxfPoint.Origin, 2.0, ""); file.Entities.Add(text); foreach (var version in versions) { var fileName = $"file.{version}.dxf"; file.Header.Version = version; text.Value = version.ToString(); var outputPath = Path.Combine(tempDir, fileName); using (var fs = new FileStream(outputPath, FileMode.Create)) { file.Save(fs); } } // open each file in AutoCAD and try to write it back out var lines = new List<string>(); lines.Add("FILEDIA 0"); foreach (var version in versions) { lines.Add("ERASE ALL "); lines.Add($"DXFIN \"{Path.Combine(tempDir, $"file.{version}.dxf")}\""); lines.Add($"DXFOUT \"{Path.Combine(tempDir, $"result.{version}.dxf")}\" V R12 16"); } lines.Add("FILEDIA 1"); lines.Add("QUIT Y"); // create and execute the script var scriptPath = Path.Combine(tempDir, "script.scr"); File.WriteAllLines(scriptPath, lines); ExecuteAutoCadScript(scriptPath); // check each resultant file for the correct version and text foreach (var version in versions) { DxfFile dxf; using (var fs = new FileStream(Path.Combine(tempDir, $"result.{version}.dxf"), FileMode.Open)) { dxf = DxfFile.Load(fs); } Assert.Equal(version.ToString(), ((DxfText)dxf.Entities.Single()).Value); } } }
private static void EnsureFileContainsEntity(DxfEntity entity, string text) { var file = new DxfFile(); file.Entities.Add(entity); using (var stream = new MemoryStream()) { file.Save(stream); stream.Flush(); stream.Seek(0, SeekOrigin.Begin); using (var reader = new StreamReader(stream)) { var actual = reader.ReadToEnd(); Assert.Contains(text.Trim(), actual); } } }
public void WriteAllDefaultEntitiesTest() { var file = new DxfFile(); var assembly = typeof(DxfFile).Assembly; foreach (var type in assembly.GetTypes()) { if (IsEntityOrDerived(type)) { var ctor = type.GetConstructor(Type.EmptyTypes); if (ctor != null) { // add the entity with its default initialized values var entity = (DxfEntity)ctor.Invoke(new object[0]); file.Entities.Add(entity); // add the entity with its default values and 2 items added to each List<T> collection entity = (DxfEntity)ctor.Invoke(new object[0]); foreach (var property in type.GetProperties().Where(p => IsListOfT(p.PropertyType))) { var itemType = property.PropertyType.GenericTypeArguments.Single(); var itemValue = itemType.IsValueType ? Activator.CreateInstance(itemType) : null; var addMethod = property.PropertyType.GetMethod("Add"); var propertyValue = property.GetValue(entity); addMethod.Invoke(propertyValue, new object[] { itemValue }); addMethod.Invoke(propertyValue, new object[] { itemValue }); } // add an entity with all non-indexer properties set to `default(T)` entity = (DxfEntity)SetAllPropertiesToDefault(ctor.Invoke(new object[0])); file.Entities.Add(entity); } } } // write each version of the entities with default versions foreach (var version in new[] { DxfAcadVersion.R10, DxfAcadVersion.R11, DxfAcadVersion.R12, DxfAcadVersion.R13, DxfAcadVersion.R14, DxfAcadVersion.R2000, DxfAcadVersion.R2004, DxfAcadVersion.R2007, DxfAcadVersion.R2010, DxfAcadVersion.R2013 }) { file.Header.Version = version; using (var ms = new MemoryStream()) { file.Save(ms); } } }
public void WriteLayoutTest() { var layout = new DxfLayout(); layout.PageSetupName = "page-setup-name"; layout.LayoutName = "layout-name"; var file = new DxfFile(); file.Objects.Add(layout); using (var ms = new MemoryStream()) { file.Save(ms); ms.Seek(0, SeekOrigin.Begin); using (var reader = new StreamReader(ms)) { var contents = reader.ReadToEnd(); // verify the plot settings were written var plotSettingsOffset = contents.IndexOf(@" 100 AcDbPlotSettings 1 page-setup-name ".Trim()); Assert.True(plotSettingsOffset > 0); // verify the layout settings were written var layoutOffset = contents.IndexOf(@" 100 AcDbLayout 1 layout-name ".Trim()); Assert.True(layoutOffset > 0); // verify that the layout settings were written after the plot settings Assert.True(layoutOffset > plotSettingsOffset); } } }
public void WriteAndReadTypeDefaultsTest() { var file = new DxfFile(); SetAllPropertiesToDefault(file.Header); // write each version of the header with default values foreach (var version in new[] { DxfAcadVersion.R10, DxfAcadVersion.R11, DxfAcadVersion.R12, DxfAcadVersion.R13, DxfAcadVersion.R14, DxfAcadVersion.R2000, DxfAcadVersion.R2004, DxfAcadVersion.R2007, DxfAcadVersion.R2010, DxfAcadVersion.R2013 }) { file.Header.Version = version; using (var ms = new MemoryStream()) { file.Save(ms); ms.Flush(); ms.Seek(0, SeekOrigin.Begin); // ensure the header can be read back in, too var file2 = DxfFile.Load(ms); } } }
private IEnumerator CreateFile(Bounds UnityBounds, List <Layer> layerList) { FreezeLayers(layerList, true); Debug.Log(layerList.Count); Vector3RD bottomLeftRD = CoordConvert.UnitytoRD(UnityBounds.min); Vector3RD topRightRD = CoordConvert.UnitytoRD(UnityBounds.max); boundingbox = new MeshClipper.RDBoundingBox(bottomLeftRD.x, bottomLeftRD.y, topRightRD.x, topRightRD.y); DxfFile dxfFile = new DxfFile(); dxfFile.SetupDXF(); yield return(null); MeshClipper meshClipper = new MeshClipper(); loadingScreen.ShowMessage("DXF-bestand genereren..."); loadingScreen.ProgressBar.SetMessage(""); loadingScreen.ProgressBar.Percentage(0.1f); yield return(new WaitForEndOfFrame()); int layercounter = 0; foreach (var layer in layerList) { layercounter++; loadingScreen.ProgressBar.Percentage((float)layercounter / ((float)layerList.Count + 1)); loadingScreen.ProgressBar.SetMessage("Laag '" + layer.name + "' wordt omgezet..."); yield return(new WaitForEndOfFrame()); List <GameObject> gameObjectsToClip = GetTilesInLayer(layer, bottomLeftRD, topRightRD); if (gameObjectsToClip.Count == 0) { continue; } foreach (var gameObject in gameObjectsToClip) { meshClipper.SetGameObject(gameObject); for (int submeshID = 0; submeshID < gameObject.GetComponent <MeshFilter>().sharedMesh.subMeshCount; submeshID++) { string layerName = gameObject.GetComponent <MeshRenderer>().sharedMaterials[submeshID].name.Replace(" (Instance)", ""); loadingScreen.ProgressBar.SetMessage("Laag '" + layer.name + "' object " + layerName + " wordt uitgesneden..."); yield return(new WaitForEndOfFrame()); meshClipper.ClipSubMesh(boundingbox, submeshID); dxfFile.AddLayer(meshClipper.clippedVerticesRD, layerName, GetColor(gameObject.GetComponent <MeshRenderer>().sharedMaterials[submeshID])); yield return(new WaitForEndOfFrame()); } yield return(new WaitForEndOfFrame()); } yield return(new WaitForEndOfFrame()); } loadingScreen.ProgressBar.Percentage((float)layerList.Count / ((float)layerList.Count + 1)); loadingScreen.ProgressBar.SetMessage("Het AutoCAD DXF (.dxf) bestand wordt afgerond..."); yield return(new WaitForEndOfFrame()); dxfFile.Save(); loadingScreen.Hide(); FreezeLayers(layerList, false); Debug.Log("file saved"); }
public void WritingEmptyBlockR2000Test() { var file = new DxfFile(); file.Header.Version = DxfAcadVersion.R2000; file.Blocks.Add(new DxfBlock()); using (var ms = new MemoryStream()) { file.Save(ms); } }
public void WritingPartiallyInitializedTablesTest() { var file = new DxfFile(); file.ApplicationIds.Add(new DxfAppId()); file.BlockRecords.Add(new DxfBlockRecord()); file.DimensionStyles.Add(new DxfDimStyle()); file.Layers.Add(new DxfLayer()); file.Linetypes.Add(new DxfLineType()); file.Styles.Add(new DxfStyle()); file.UserCoordinateSystems.Add(new DxfUcs()); file.Views.Add(new DxfView()); file.ViewPorts.Add(new DxfViewPort()); using (var ms = new MemoryStream()) { file.Save(ms); } }
public void WriteSunStudyTest() { var sun = new DxfSunStudy(); sun.Hours.Add(42); sun.Hours.Add(43); sun.Hours.Add(44); var file = new DxfFile(); file.Objects.Add(sun); VerifyFileContains(file, @" 0 SUNSTUDY 5 A 100 AcDbSunStudy 90 0 1 2 70 0 3 290 0 4 291 0 91 0 292 0 73 3 290 42 290 43 290 44 340 0 341 0 342 0 74 0 75 0 76 0 77 0 40 0.0 293 0 294 0 343 0 "); // verify writing as binary doesn't crash using (var ms = new MemoryStream()) { file.Save(ms, asText: false); } }