• 您的位置:首頁 > 新聞動態 > 技術文章

    CATIA插件二次開發C#

    2018/6/22      點擊:

    1. 引(yǐn)言

    由於項(xiàng)目中要使用WONGLOVE數據手套,近搜集整理了一些關(guān)於CATIA二次開發的資料,網絡的相關資料比較有限,因此剛開始遇到了(le)不少問題,通過分析(xī)一些示(shì)例,以及(jí)結合CATIA的宏(hóng)錄製功能生成的代碼,才算是對CATIA的開(kāi)發方式(shì)有所了解(jiě)。現總結一下學習中遇到的相關問題及解決辦法,以共享各位小朋(péng)友(yǒu)。

    2. CATIA簡介

    CATIA(Computer Aided Three Dimensional Interactive Application)是法國達索公司的產品開發旗艦解決方案。作為(wéi)PLM協同解決方案的一個重要組成(chéng)部分,它可以幫(bāng)助製造廠商設計他們未來的產品,並支持從項目前階(jiē)段、具體(tǐ)的設計、分析、模擬、組(zǔ)裝到維護在內的全部工業設計流程。通過使企業能夠(gòu)重用產品設計知識,縮短開發周期,CATIA解決(jué)方案加快企業對市場的需求的反應。CATIA比較廣泛的用於汽車、航空航天、輪船、軍工(gōng)、儀器儀表、建(jiàn)築工程、電氣管道、通信等方方麵麵(來源-百度百(bǎi)科-CATIA)。

    3. CATIA開發模(mó)式

    CATIA提供了AutomationAPI組件和組件應用架構(CAA,Component Application Architecture)兩(liǎng)種(zhǒng)開(kāi)發模式。

    3.1 Automation組件

    Automation API具備與任(rèn)何OLE所兼容的平台進行通訊能力,自動化(Automation)組件(jiàn)使用VBScript作為編輯工(gōng)具。通過宏錄製功能(Macro Record),可以記錄用(yòng)戶的操作過程並自動生成VBScript代碼。這種方式比較簡單,在CATIA環境就中可完成。

    3.2 組(zǔ)件應用架構(CAA)

    CAA采用組件對象(xiàng)模型(COM)和對象的連接和嵌入(OLE)技(jì)術,COM作為一種軟件架(jià)構具備了更好的模塊獨立性、可擴展性,使CAA的程序設計更加容易且趨(qū)於標準化,使程序的(de)代(dài)碼更加簡潔明了。在CATIA運(yùn)行的情況下,外部進程可以通過訪問COM組件實現對CATIA的操作(zuò),如創建、修改CATIA環境和幾(jǐ)何(hé)形體的數據、尺寸(cùn)等。

    4. 為什麽(me)采用C#作為開發語言

    VBScript腳本方法過於簡單,無法實現CATIA的某些功能,如碰撞檢測功能,且無法與現有項(xiàng)目進行集成。CAA/C++模式是*複雜的開發模式,其可以實現幾乎(hū)所有的CATIA功能,但(dàn)是其過於複雜,需要一(yī)定的(de)學(xué)習時(shí)間,無法很快進行功能實(shí)現。因此(cǐ)這兩種(zhǒng)實現(xiàn)方式都不是很(hěn)適合(hé)。由於CATIA提供了COM支持,因此我們可以通過.Net平台引入COM組(zǔ)件進行開發,其有如下優(yōu)勢: 
    1. 由於項目本身采用的(de)是CSharp語言,因(yīn)此(cǐ)能(néng)夠很好的集成到項(xiàng)目中,並且能夠滿足(zú)項目需求。 
    2. 學習成本(běn)較低,通(tōng)過(guò)對宏生成代碼進行少許改造即可在(zài).Net平台中運行。 
    3. 可以將通(tōng)用操作進行封(fēng)裝,方便(biàn)今後項目的開發,降低開發成本。

    5. 準備開發

    5.1 所需軟件

    • CATIA V5 R20
    • Visual Studio 2010

    5.2 引入類庫

    在正確安裝CATIA之後即(jí)可在項目中引用CATIA COM類(lèi)庫,其類庫名稱均以CATIA V5開頭。在引用為類庫後,我們即可進行開發工(gōng)作。 


    5.3 開發(fā)示例

    該示例(lì)演示了如何連接CATIA,並生成一個新的Product。

    namespace CATIATest
    {
        class Program
        {
            static void Main(string[] args)
            {
                // 連接CATIA
                Application Catia =(Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Catia.Application");
                // 獲取當前活動ProductDocument
                ProductDocument pd = (ProductDocument)Catia.ActiveDocument;
                // 創建一(yī)個ID為newProduct的Product
                pd.Product.Products.AddNewProduct("newProduct");
            }
        }
    }

    【注意】在調試之前(qián)請確(què)保CATIA已經運行,否則無法連接到CATIA,程序無法運行。

    6. 開發中使用到(dào)的操作總結

    6.1 加載CATIA文件

    public void AddNewComponent(string filePath)
    {
        object[] files = new object[1] { filePath };
        this.ActiveProductDocument.Product.Products.AddComponentsFromFiles(files, "All");
    }

    6.2 向當前Product中添加Part

    // 向(xiàng)當前Product中添加一個指(zhǐ)定長度(dù)的圓柱體
    public void CreateCylinder(string name, double length)
    {
        // 添加(jiā)一個新零件(jiàn)
        Product product = this.ActiveProductDocument.Product.Products.AddNewComponent("Part", name);
        // 繪製圓
        Part part = ((PartDocument)this._catia.Documents.Item(name + ".CATPart")).Part;
        Sketch sketch = (part.Bodies.GetItem("零(líng)件幾何體") as Body).Sketches.Add(
            (Reference)part.OriginElements.PlaneXY);
        sketch.SetAbsoluteAxisData(new object[] { 0, 0, 0, 1, 0, 0, 0, 1, 0 });
        part.InWorkObject = sketch;
        Factory2D factory = sketch.OpenEdition();
        Axis2D axis = (Axis2D)sketch.GeometricElements.GetItem("絕對軸");
        (axis.GetItem("橫向") as Line2D).ReportName = 1;
        (axis.GetItem("縱向") as Line2D).ReportName = 2;
        Circle2D circle = factory.CreateClosedCircle(0, 0, 5);
        circle.CenterPoint = (Point2D)axis.GetItem("原點");
        circle.ReportName = 3;
        sketch.CloseEdition();
        part.Update();
        // 繪(huì)製圓柱
        (part.ShapeFactory as ShapeFactory).AddNewPad(sketch, length);
        part.Update();
    }

    6.3 查找(zhǎo)Product

    // 根據產品名稱獲取指定Product
    public Product GetProduct(string productId)
    {
        return (Product)this.ActiveProductDocument.Product.Products.GetItem(productId);
    }

    6.4 移除Product

    protected void RemoveProduct(Product product)
    {
        Selection selection = this.ActiveProductDocument.Selection;
        selection.Clear();
        selection.Add(product);
        selection.Delete();
    }

    6.5 碰撞檢測

    // 檢測兩個產品間(jiān)是否存在衝突
    public bool ConflictCheck(Product product1, Product product2)
    {
        Groups groups = this.ActiveProductDocument.Product.GetTechnologicalObject("Groups") as Groups;
        Group first = groups.Add();
        Group second = groups.Add();
        first.AddExplicit(product1);
        second.AddExplicit(product2);
        Clash clash = (this.ActiveProductDocument.Product.GetTechnologicalObject("Clashes") as Clashes).Add();
        clash.ComputationType = CatClashComputationType.catClashComputationTypeBetweenTwo;
        clash.InterferenceType = CatClashInterferenceType.catClashInterferenceTypeContact;
        clash.FirstGroup = first;
        clash.SecondGroup = second;
        clash.Compute();
        Conflicts conflicts = clash.Conflicts;
        groups.Remove(first.get_Name());
        groups.Remove(second.get_Name());
        return conflicts.Count != 0;
    }

    6.6 自動調整視圖

    protected void AdapteAllView()
    {
        this._catia.ActiveWindow.ActiveViewer.Reframe();
    }

    7. 其他功能探索

    一般來說,對於(yú)CATIA中能夠手工解決的問題均(jun1)應能夠通過編程的方式(shì)處理,我們可以通過以下三(sān)種途徑獲取編程幫助(zhù)以及Sample。

    1. V5 Automation API 手冊(推薦)
    2. CATIA 宏錄製功能
    3. Baidu 以及 Google

    方式一:在安裝好CATIA後,再其安裝(zhuāng)目錄中%Install Root%\Dassault Systemes\B20\intel_a\code\bin中已經包含了V5 Automation API .chm幫助文檔。該文檔中包含了全部的可用API及類繼承結構,同時提供了豐富的代碼示例供讀者(zhě)參考。 

    方式二:通過啟用CATIA的(de)宏錄製功能,可(kě)以獲得所有操作的VBScript代碼,我們可以參考該代碼進行CSharp代碼的開(kāi)發。下圖通過CATIA錄製了(le)一個繪製圓(yuán)柱的過程,右側窗口內顯示的即為生(shēng)成(chéng)的VBScript代碼。 

    8. WONGLOVE數據手套在(zài)CATIA中使用(yòng)

    按照上麵的方法, 各位小朋友應該能和(hé)我們(men)一樣實(shí)現WONGLOVE數據手套在CATIA中的應(yīng)用。



    91网站入口_91视频导航_91短视频在线_91视频在线免费观看