糖尿病康复,内容丰富有趣,生活中的好帮手!
糖尿病康复 > Revit文件导出svg格式思考

Revit文件导出svg格式思考

时间:2024-03-19 23:23:28

相关推荐

Revit文件导出svg格式思考

Revit没有直接导出svg格式文件的方法,但是动动脑子,还是会有一些不太靠谱的方法,可以完成这件事情。说它不太靠谱是因为这些方法非官方,并且这些方法用起来存在这样或那样的问题,很难百分百满足既定需求。

下面列举三种思路,以期抛砖引玉。它们分别为借助外部工具,借助外部dll,自定义解析。我会分别具体叙述一下这几种方法是什么思路。

一、借助外部工具

这里借助了一个名叫【迅捷CAD转换器】的软件。

Revit虽然不能直接导出svg格式文件,但它支持导出dwg文件。众所周知,CAD和Revit是一个公司的产品,导成dwg格式文件的精度还是能接受的。dwg文件和svg文件同属于矢量图存储文件,它们之间的转化,比一般位图的转化要效果好太多。所以我们利用Revit自身导出dwg文件的功能,同时再找一个能将dwg转成svg格式的软件即可。这里我就使用了上面提到的【迅捷CAD转换器】软件。具体操作如下面动态图演示。

1、导出dwg文件

2、dwg文件转换成svg文件

评议:优点就是比较方便,缺点是显著的可控性太差,而且这个软件导出的svg文件略大,且不太清晰

二、借助外部dll

这里借助了一个名为【Aspose.CAD.dll】

这种方法和上面提到的方法思路一样。首先我们要获取到dwg文件,不管是通过Revit自身命令,还是二次开发自己撸代码。这一步都很容易实现。然后,在网上找一个能把dwg文件转换成svg格式文件的类库。经过一番搜索,找到一个名为【Aspose.CAD.dll】的类库,这个类库的最新版本支持dwg文件 到svg文件的转换。经过测试,效果还不错。但美中不足,这个dll存在两个问题,这是慧都软件的收费产品,不购买的话,导出文件会存在水印;其次,我问了软件客服,现在好像还不支持颜色的导出。当然水印的事情,可以通过再次编辑svg文件去掉,颜色的问题就没有什么好办了。

该解决方案,通过nuget引入了Aspose.CAD,Svg两个类库,其中Aspose.CAD负责dwg文件到svg文件的转换,Svg类库负责编辑svg文件,去掉水印

1、dwg可以用revit直接导出,同时也可以使用代码导出。代码方式导出参考如下

/// <summary>/// 将视图导出Dwg格式/// </summary>/// <param name="view">使用的view</param>/// <param name="exportFileName">导出的位置</param>/// <param name="visibleCategories">设置显示的category,如果传入null,则不对category进行限制</param>/// <returns></returns>public bool ExportDwg(View view, string exportFileName, List<Category> visibleCategories){List<Category> useCategories = visibleCategories;string folder = Path.GetDirectoryName(exportFileName);string fileName = Path.GetFileName(exportFileName);DWGExportOptions dwgExportOptions1 = new DWGExportOptions();dwgExportOptions1.Colors = ExportColorMode.IndexColors;dwgExportOptions1.LineScaling = LineScaling.PaperSpace;dwgExportOptions1.TargetUnit = ExportUnit.Millimeter;dwgExportOptions1.FileVersion = ACADVersion.R;dwgExportOptions1.SharedCoords = false;dwgExportOptions1.PropOverrides = PropOverrideMode.ByEntity;dwgExportOptions1.LayerMapping = "AIA";View useView = view;ElementId viewId = view.Id;var document = useView.Document;if (useCategories != null){var categories = useView.Document.Settings.Categories;foreach (Category category in categories){useView.SetCategoryHidden(category.Id, true);}foreach (Category useCategory in useCategories){useView.SetCategoryHidden(useCategory.Id, false);}}return document.Export(folder, fileName, new List<ElementId>() { viewId }, dwgExportOptions1);}

2、dwg文件转到svg文件,代码参考

/// <summary>/// 将制定路径的dwg文件导出到指定路径/// </summary>/// <param name="dwgPath"></param>/// <param name="outSvgPath"></param>/// <returns></returns>public static bool ExportToSvg(string dwgPath,string outSvgPath){var dwfPath = dwgPath;if (!File.Exists(dwfPath)){return false;}var image = Aspose.CAD.Image.Load(dwfPath);var rasterizationOptions = new Aspose.CAD.ImageOptions.CadRasterizationOptions(){PageSize = new Aspose.CAD.SizeF(1200, 1200),};string outPath = outSvgPath; using (MemoryStream stream = new MemoryStream()){image.Save(stream,new Aspose.CAD.ImageOptions.SvgOptions() { VectorRasterizationOptions = rasterizationOptions, ColorType = SvgColorMode.Ycck, });stream.Seek(0, SeekOrigin.Begin);var document = SvgDocument.Open<SvgDocument>(stream);document.Children.RemoveAt(1);document.Write(outPath);return true;}return false;}

3、svg文件去掉水印参考,上面代码SvgDocument类相关部分

评议:可控性较强,满足一般需求。当增加了外部依赖,尤其使用到了收费的dll,给人感觉比较厚重,太过繁琐。

三、自定义解析

这个就要深入了解svg的格式.并且自定义Revit图元与svg元素的映射关系。我没有做这方面的工作。但找到一个cad到svg映射的参考,思路几可复用。

CAD文件转换为SVG文件的探讨

如果觉得《Revit文件导出svg格式思考》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。