基於ANYCAD的DXF文件讀取與轉換

来源:http://www.cnblogs.com/liuzetao/archive/2016/07/01/5632676.html
-Advertisement-
Play Games

寫這篇文章的目的是我這段時間關於ANYCAD的一些學習感悟,並且附上具體的操作,使新手少走一些彎路。 本人是C#的新手,從來沒接觸過編程,暑期跟著老師做學習,第一個任務就是用C#打開DXF文件,我以為任務很簡單,BUT 在網上搜索一大堆,都是沒用的(對於我這個新手來講),偶然一次看到一篇《基於Any ...


     寫這篇文章的目的是我這段時間關於ANYCAD的一些學習感悟,並且附上具體的操作,使新手少走一些彎路。

     本人是C#的新手,從來沒接觸過編程,暑期跟著老師做學習,第一個任務就是用C#打開DXF文件,我以為任務很簡單,BUT 在網上搜索一大堆,都是沒用的(對於我這個新手來講),偶然一次看到一篇《基於AnyCAD.net 三維圖形平臺快速搭建DXF文件的讀取、顯示、轉換成JPG, PNG,以及PDF》,瞭解了這個ANYCAD這個控制項,但是這篇文章在我把代碼輸進去操作的時候發現對於我這個新手來說沒太大用,只能說它給我打開了一個學習的大門。

     AnyCAD 三維圖形控制項(AnyCAD Graphics SDK)是專業的、綜合的三維圖形應用開發包,是一個基於 OpenCASCADE CAD平臺, 可以用於開發二維/三維模型設計、電腦模擬、有限元前後處理等應用程式。按照功能模塊,AnyCAD Graphics SDK 專業版包括幾何造型、三維可視化和數據交換模 塊,企業版在專業版的基礎上增加數據管理模塊。 AnyCAD Graphics SDK 擁有.Net C++兩個版本,其中.Net 版本支持WinForm WPF界面框架;C++版本支持MFC/Qt/wxWidgets 等界面庫。

     首先瞭解一下ANYCAD.SDK,這是一個動態鏈接庫,舉個例子,你要用到下邊代碼中的renderView,那你首先得對它定義才能使用,定義在哪呢?對,就在SDK中,所以首先得下載ANYCADSDK,但是由於版權問題,只有試用期,過後得購買,學生有特殊照顧,這裡就不詳細說啦。

19      public MainForm()
20         {
21            InitializeComponent();
22 
23            this.renderView = new AnyCAD.Presentation.RenderWindow3d();
24             this.renderView.Size = this.panel3d.ClientSize;
25            this.renderView.TabIndex = 1;
26             panel3d.Controls.Add(this.renderView);
27         }

        當你下載SDK後(註:需要註意VSSDK的版本),第一步是添加引用,這樣才能夠使用封裝的函數。最重要的是把添加的SDK文件複製到你的項目中

                                   

然後添加USING,如下圖:

                                                

下麵是全部的代碼:

  1 using System;
  2 using System.Collections.Generic;
  3 using System.ComponentModel;
  4 using System.Data;
  5 using System.Drawing;
  6 using System.Linq;
  7 using System.Text;
  8 using System.Windows.Forms;
  9 using AnyCAD.Platform;
 10 
 11 namespace DxfViewer
 12 {
 13     public partial class MainForm : Form
 14     {
 15         private AnyCAD.Presentation.RenderWindow3d renderView = null;
 16         private ElementId mBeginId = new ElementId();
 17         private ElementId mEndId = new ElementId();
 18 
 19         public MainForm()
 20         {
 21             InitializeComponent();
 22 
 23             this.renderView = new AnyCAD.Presentation.RenderWindow3d();
 24             this.renderView.Size = this.panel3d.ClientSize;
 25             this.renderView.TabIndex = 1;
 26             panel3d.Controls.Add(this.renderView);
 27         }
 28 
 29         private void MainForm_Load(object sender, EventArgs e)
 30         {
 31             renderView.ShowWorkingGrid(false);
 32             renderView.ExecuteCommand("ShadeWithEdgeMode");
 33             renderView.ShowCoordinateAxis(false);
 34 
 35             ColorValue clr = new ColorValue(33f / 255f, 40f / 255f, 48f / 255f, 1);
 36             renderView.SetBackgroundColor(clr, clr, clr);
 37 
 38             Renderer renderer = renderView.Renderer;
 39 
 40             // Customize the Axis
 41             ScreenWidget coodinateNode = new ScreenWidget();
 42             AxesWidget axesNode = new AxesWidget();
 43             axesNode.SetArrowText((int)EnumAxesDirection.Axes_Z, "");
 44             coodinateNode.SetNode(axesNode);
 45             coodinateNode.SetWidgetPosition(0);     
 46             renderer.SetCoordinateWidget(coodinateNode);
 47 
 48             // Set the fixed Top View
 49             renderer.SetStandardView(EnumStandardView.SV_Top);
 50             renderer.SetViewType(EnumStandardView.SV_Top);
 51 
 52             this.renderView.RequestDraw();
 53 
 54         }
 55 
 56         private void MainForm_Resize(object sender, EventArgs e)
 57         {
 58             if (renderView != null)
 59                 renderView.Size = this.panel3d.ClientSize;
 60         }
 61 
 62         private void openToolStripMenuItem_Click(object sender, EventArgs e)
 63         {
 64             OpenFileDialog dlg = new OpenFileDialog();
 65             dlg.Filter = "DXF (*.dxf)|*.dxf";
 66 
 67             if (DialogResult.OK == dlg.ShowDialog())
 68             {
 69                 AnyCAD.Exchange.DxfReader reader = new AnyCAD.Exchange.DxfReader();
 70                 renderView.ClearScene();
 71                 AnyCAD.Exchange.ShowShapeReaderContext context = new AnyCAD.Exchange.ShowShapeReaderContext(renderView.SceneManager);
 72                 context.NextShapeId = mBeginId;
 73                 if (reader.Read(dlg.FileName, context, false))
 74                 {
 75                     renderView.RequestDraw();
 76                     mEndId = context.NextShapeId;
 77                 }
 78 
 79             }
 80 
 81             renderView.View3d.FitAll();
 82         }
 83 
 84         private void pDFToolStripMenuItem_Click(object sender, EventArgs e)
 85         {
 86             SaveFileDialog dlg = new SaveFileDialog();
 87             dlg.Filter = "PDF (*.pdf)|*.pdf";
 88             if (DialogResult.OK == dlg.ShowDialog())
 89             {
 90                 renderView.Renderer.Print(dlg.FileName);
 91             }
 92 
 93         }
 94 
 95         private void imageToolStripMenuItem_Click(object sender, EventArgs e)
 96         {
 97             SaveFileDialog dlg = new SaveFileDialog();
 98             dlg.Filter = "Image File (*.jpg;*.png)|*.jpg;*.png";
 99             if (DialogResult.OK == dlg.ShowDialog())
100             {
101                 renderView.CaptureImage(dlg.FileName);
102             }
103         }
104 
105         private void dToolStripMenuItem_Click(object sender, EventArgs e)
106         {
107             renderView.ExecuteCommand("IsoView");
108             renderView.View3d.FitAll();
109         }
110 
111         private void exportIgesToolStripMenuItem_Click(object sender, EventArgs e)
112         {
113             SceneManager sceneManager = renderView.SceneManager;
114 
115 
116 
117             TopoShapeGroup group = new TopoShapeGroup();
118             for (ElementId ii = mBeginId; ii < mEndId; ++ii)
119             {
120                 SceneNode node = sceneManager.FindNode(ii);
121                 if (node != null)
122                 {
123                     TopoShape shape = GlobalInstance.TopoShapeConvert.ToTopoShape(node);
124                     if (shape != null)
125                     {
126                         Matrix4 trf = GlobalInstance.MatrixBuilder.MakeRotation(90, Vector3.UNIT_X);
127                         shape = GlobalInstance.BrepTools.Transform(shape, trf);
128                         group.Add(shape);
129                     }
130                 }
131             }
132 
133             if (group.Size() > 0)
134             {
135                 SaveFileDialog dlg = new SaveFileDialog();
136                 dlg.Filter = "IGES File (*.igs;*.iges)|*.igs;*.iges";
137                 if (DialogResult.OK != dlg.ShowDialog())
138                 {
139                     return;
140                 }
141                 TopoDataExchangeIges igsWriter = new TopoDataExchangeIges();
142                 igsWriter.Write(group, new AnyCAD.Platform.Path(dlg.FileName));
143             }
144             else
145             {
146                 MessageBox.Show("No shape to save!");
147             }
148 
149         }
150 
151         private void dToolStripMenuItem1_Click(object sender, EventArgs e)
152         {
153             renderView.ExecuteCommand("TopView");
154             this.renderView.RequestDraw();
155         }
156 
157     }
158 }

具體運行效果:

                                                  

 

    希望我的這些東西可以幫到你哪怕一點,我也是很開心的!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1、進入支付寶首頁 GET https://auth.alipay.com/login/index.htm HTTP/1.1Accept: */*Accept-Language: zh-CNAccept-Encoding: gzip, deflateUser-Agent: Mozilla/4.0 ( ...
  • 很早之前看到過RESTful Web Services,並未在意,也沒找相關資料進行學習。今天偶爾有一機會,就找了點資料進行研究,發現RESTful真是“簡約而不簡單”。下麵用示例來說明: 1 項目結構 2 REST 服務介面定義 3 REST服務介面實現 4 將服務HOST 5 打開瀏覽器,即可進 ...
  • 一. 結構體的傳遞 Cpp代碼 #define JNAAPI extern "C" __declspec(dllexport) // C方式導出函數 typedef struct { int osVersion; int majorVersion; int minorVersion; int bui ...
  • 近段時間,有實現一個看板的功能,就是用戶更新信息時,即是對資料庫的數據進行插入,更新,或是刪除時,在牆上的屏幕的數據不需要人為去刷新,用戶就能看到更新後的數據。實現此功能,Insus.NET使用SignalR的技術來實現。下麵的實例中,雖然不是實際的數據,但是實現過程是一樣的,現在分享給大家學習學習 ...
  • 本文參考Roslyn項目中的Issue:#118。 1. C# 7.0 新特性1: 基於Tuple的“多”返回值方法 2. C# 7.0 新特性2: 本地方法 3. C# 7.0 新特性3: 模式匹配 4. C# 7.0 新特性4: 返回引用 C#早在最初的發行版C# 1.0中(2002年1月),就 ...
  • 1. IIS7中應用程式池隊列長度調整為65535(預設為1000) 打開IIS7管理器,選擇應用程式池,右鍵選擇應用程式池,選擇高級設置,把1000改為65535 2. IIS7的appConcurrentRequestLimit調正為100000(預設5000) 方法: 命令行:C:\windo ...
  • 使用軟體的一個重要原因,是因為軟體可以幫我們重覆處理很多事情。在前面我們已經講到了迴圈。迴圈就是為了重覆處理一個事情。那麼我們有沒有想過,我們要重覆處理的一批數據怎麼在程式里存放呢? 舉個例子吧。 我們有一個通訊錄的程式,需要保存通訊錄中的所有名字。我們可以這樣做。 string name1=”Da ...
  • 題記:之前一直用timer,突然用了次ThreadPool來註冊線程,發現在註銷的時候不會了(%>_<%),於是簡單記錄幾句: private AutoResetEvent autoReset = new AutoResetEvent(false); private RegisteredWaitHa ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...