亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        AutoCAD實體導(dǎo)出Glyph2腳本的實現(xiàn)

        2016-07-21 06:12:16羅小美
        現(xiàn)代機械 2016年3期
        關(guān)鍵詞:腳本圓弧命令

        羅小美

        (杜爾涂裝系統(tǒng)工程(上海)有限公司,上海200233)

        ?

        AutoCAD實體導(dǎo)出Glyph2腳本的實現(xiàn)

        羅小美

        (杜爾涂裝系統(tǒng)工程(上海)有限公司,上海200233)

        摘要:目前CFD網(wǎng)格劃分軟件Pointwise不能導(dǎo)入AutoCAD圖紙,無法實現(xiàn)數(shù)據(jù)重用。為了提高工作效率,需要開發(fā)一個能在Pointwise中重建AutoCAD實體對象的程序。這個程序作為AutoCAD的擴展運行,把AutoCAD圖紙中的實體對象逐個翻譯成能重新創(chuàng)建 Pointwise實體對象的Glyph2腳本語句,在Pointwise中執(zhí)行該腳本可以得到AutoCAD實體對象的等價物。實際運行該擴展程序證明該實現(xiàn)是切實可行的,避免了重復(fù)建模工作。

        關(guān)鍵詞:AutoCADObjectARX導(dǎo)出Glyph2

        在流體仿真過程中,需要對不同設(shè)計方案或設(shè)計參數(shù)分別進行計算。每次計算如果都重建模型,將非常繁瑣低效。

        CFD網(wǎng)格劃分領(lǐng)域最流行的是采用自頂向下方法的ICEM和采用自底向上方法的Pointwise。Pointwise嚴格按照點、線、面、體的方式來生成網(wǎng)格,學(xué)習(xí)曲線平坦[1]。每個網(wǎng)格分區(qū)里的網(wǎng)格可以做詳細的調(diào)整,網(wǎng)格質(zhì)量很好,支持最復(fù)雜、網(wǎng)格質(zhì)量最苛刻的模型,這是ICEM難以比擬的。

        在實際應(yīng)用的過程中,Pointwise和AutoCAD之間缺乏數(shù)據(jù)交換工具,需要實現(xiàn)一個AutoCAD的擴展,把圖紙里的實體信息提取出來,生成一個Glyph2的腳本,然后在Pointwise里執(zhí)行腳本,重建模型,從而實現(xiàn)模型重用。

        1Glyph2腳本概念

        Pointwise的腳本語言Glyph2是通用解釋型腳本語言Tcl/Tk的擴展。它提供了一個基于文本、面向?qū)ο蟮倪^程化接口。Pointwise讀取Glyph2腳本后,依次執(zhí)行其中的命令,不容錯。

        Glyph2腳本由命令組成。每一行都包含命令和若干參數(shù),用空格分開。命令到行尾結(jié)束。一個長命令分布到多行上使用反斜杠()作為連續(xù)行指示符。多個命令寫在同一行使用分號(;)分割。

        表達式加中括號表示計算這個表達式的值并代換。表達式可嵌套,最深的表達式先計算。同嵌套層級的表達式從左至右執(zhí)行。

        多個詞可用雙引號和大括號組成一個單一參數(shù)。雙引號允許變量和命令替換。大括號用于不希望代換或者延遲代換的時候。大括號可標識奇異的變量名,如果變量名的字符不屬于規(guī)定的類型,如果包含了連字符,就要加上大括號解除常規(guī)命名限制。

        大括號和雙引號的作用范圍覆蓋前后符號之間,包括分號和換行符。雙引號內(nèi)部嵌套的大括號仍然執(zhí)行代換功能,大括號內(nèi)的內(nèi)容都當成一個常規(guī)字符。在大括號和雙引號前面加反斜杠()把它們轉(zhuǎn)義成常規(guī)字符。

        #符號表示從這里到行末是注釋,如果行末是反斜杠表示下一行還是注釋。如果想在一行的中間開始加入注釋,用分號標識這一行前面的命令到此結(jié)束[2]。

        2Pointwise中的實體

        Pointwise中的實體包括Database、Connector、Domain和Block。Database指的是那些將要被劃分網(wǎng)格的幾何對象,Connector是線網(wǎng)格,Domain是面網(wǎng)格,Block才是最終需要的體網(wǎng)格[1]。

        為了簡化AutoCAD直線和曲線到Database的翻譯過程,這里僅討論AutoCAD的兩種簡單線類型:直線段和圓弧。

        3簡單Glyph2腳本的結(jié)構(gòu)

        下面介紹在創(chuàng)建一根直線型database的最簡腳本模式[2]:

        第一行是:

        package require PWI_Glyph

        這是所有Pointwise腳本的首行,它令Pointwise加載Glyph2模塊和庫。注意Glyph2只是Tcl的一個包,Pointwise還可以靈活加載其它Tcl包。

        第二行開始創(chuàng)建Database[3]:

        set oneDatabaseObj [pw::Application begin Create]

        Glyph2腳本中,一個實體的標準創(chuàng)建過程叫做一個Creation Mode。在Glyph2腳本中使用Creation Mode并不是必須的,但它提供了一種安全措施。比如,如果在一個Creation Mode中創(chuàng)建一個Connector,而這個Connector和這個Creation Mode外部已經(jīng)存在的某個Connector共享兩個端點坐標,那么Pointwise會激活重復(fù)性檢查,而這兩個Connector會合并成一個Connector。在這里,創(chuàng)建了一個名為oneDatabaseObj的Creation Mode。

        第三行創(chuàng)建一個Segment對象:

        set oneDatabaseObjSeg [pw::SegmentSpline create]

        這是一個SegmentSpline類型的派生對象,為了腳本的可讀性,這個Segment對象的名字只是在所屬的Creation Mode的名字后面加上“Seg”后綴。

        第四行和第五行為這個SegmentSpline對象添加兩個定義點:

        兩個定義點的添加順序是:起點、終點。注意點坐標表達格式,它們是list函數(shù)的參數(shù)。

        第六行創(chuàng)建一個Curve對象:

        set oneDatabaseObjCurve [pw::Curve create]

        Curve對象才是真正在面板區(qū)列出的Database對象,它可以包含一個或多個Segment對象。為了腳本的可讀性,這個Curve對象的名字同樣只是在所屬的Creation Mode的名字后面加上“Curve”后綴。

        第七行向Curve對象添加前面創(chuàng)建的Segment對象:

        第八行結(jié)束當前的Creation Mode:

        第九行是重置圖形區(qū):

        pw::Display resetView; # Zoom to geometry

        Database對象創(chuàng)建之后,其大小和圖形區(qū)的大小經(jīng)常是不匹配的。重置圖形區(qū)本質(zhì)上是最大化顯示。

        第十行,也是最后一行,結(jié)束腳本:

        Exit; # END SCRIPT

        以上就是一個最簡單的創(chuàng)建直線型Database Curve對象的腳本的全部內(nèi)容。

        創(chuàng)建圓弧型Database對象的時候,需要創(chuàng)建的Segment對象應(yīng)該是SegmentCircle類型的:

        set oneDatabaseObjSeg [pw::SegmentCircle create]

        SegmentCircle對象需要按順序添加4個參數(shù):首先用addPoint命令添加圓弧的起點和圓弧的終點:

        然后用setCenterPoint命令添加圓弧的圓心點和圓弧的法向矢量。

        這樣就設(shè)置了一個起點在(10,0,0),終點在(10,0,0),圓心在(0,0,0,),法向矢量指向Z軸,位于第一和第二象限的半圓弧Segment。

        4程序?qū)崿F(xiàn)

        AutoCAD的二次開發(fā)可以選擇原生語言C++、.NET語言C#和VB.NET、腳本語言VBA和Visual Lisp。這里選擇了C#語言,因為它在功能和難度之間比較平衡。

        AutoCAD和Pointwise使用同樣的坐標系,所以不需考慮坐標系變換。

        使用C#開發(fā)的AutoCAD擴展是后綴名“dll”的類庫文件。類庫文件中至少包含一個類聲明,在其中實現(xiàn)一個方法。為了能夠從AutoCAD的命令行調(diào)用這個方法,需要給這個方法加上命令屬性[4]。

        [CommandMethod("GENGLPH", CommandFlags.UsePickSet | CommandFlags.Redraw | CommandFlags.Modal)]

        static public void GenerateGlyphScript()

        此處方法名稱是GenerateGlyphScript,調(diào)用的命令是縮寫"GENGLPH"。

        方法在執(zhí)行過程中要執(zhí)行三個任務(wù):

        1)選擇對象;

        2)讓用戶指定Glyphs腳本文件存放的路徑;

        3)選擇集中的對象逐個翻譯成Glyph2腳本語句并寫入指定的文件。

        因為只轉(zhuǎn)換AutoCAD直線段和圓弧,所以構(gòu)建一個選擇過濾器[5]。首先創(chuàng)建一個PromptSelectionOptions對象:

        PromptSelectionOptions pso = new PromptSelectionOptions();

        它的作用是顯示屏幕提示:

        pso.MessageForAdding = "Plese select lines or arcs";

        創(chuàng)建使用邏輯運算符的過濾器選擇多個類型的AutoCAD實體:

        TypedValue[] filterValue = new TypedValue[]

        {

        new TypedValue((int)DxfCode.Operator, "

        new TypedValue((int)DxfCode.Start,"Line"),

        new TypedValue((int)DxfCode.Start,"Arc"),

        new TypedValue((int)DxfCode.Operator, "OR>")

        };

        SelectionFilter entityFilter = new SelectionFilter(filterValue);

        然后把PromptSelectionOptions對象和SelectionFilter對象作為參數(shù),讓Editor對象執(zhí)行選擇交互:

        PromptSelectionResult psr = ed.GetSelection(pso, entityFilter);

        創(chuàng)建一個SelectionSet對象保存選擇集:

        SelectionSet ss = psr.Value;

        接下來需要用戶指定Glyph2腳本的完整路徑。

        創(chuàng)建一個PromptSaveFileOptions對象,它用于設(shè)置文件保存對話框:

        PromptSaveFileOptions psfo = new PromptSaveFileOptions("Specigy Glayph2 file name");

        這里的構(gòu)造函數(shù)帶有一個字符串參數(shù),它是文件保存對話框的標題。Glyph2腳本文件的名字默認地取當前AutoCAD圖紙的名字:

        psfo.DeriveInitialFilenameFromDrawingName = true;

        為了讓Glyph2腳本文件自動地取得擴展名“glf”,這里設(shè)置一個文件擴展名過濾列表:

        psfo.Filter = "Pointwise Glyph Script (*.glf)|*.glf|All files (*.*)|*.*";

        過濾列表定義了兩個項目:glf文件和所有文件。為了讓“glf”成為默認選項,按索引數(shù)值通知文件保存對話框該默認選擇哪一個:

        psfo.FilterIndex = 0;

        然后把PromptSaveFileOptions對象作為參數(shù),讓Editor對象執(zhí)行交互:

        PromptFileNameResult pfnr = ed.GetFileNameForSave(psfo);

        用戶指定保存目錄和文件名之后,創(chuàng)建一個FileStream對象表示這個文件:

        FileStream fs = new FileStream(pfnr.StringResult, FileMode.Create, FileAccess.Write);

        接著創(chuàng)建一個StreamWriter對象執(zhí)行寫入操作:

        StreamWriter sw = new StreamWriter(fs);

        現(xiàn)在讓StreamWriter對象寫入任何Glyph2腳本的統(tǒng)一的首行[6]:

        sw.WriteLine("package require PWI_Glyph");

        再把前面選擇的對象逐個翻譯成Glyph2腳本語句并寫入腳本文件。因為需要寫入多個AutoCAD實體對象對應(yīng)的腳本語句,所以creation mode的命名需要改為隨機字符串。

        以一根AutoCAD直線段為例子,初始化直線型對象的引用:

        Line oneLine = id.GetObject(OpenMode.ForRead) as Line;

        調(diào)用GUID的方法生成一個無格式隨機字符串作為creation mode的命名[7]:

        string creationModeName = System.Guid.NewGuid().ToString("N");

        接下來按照前述Creation mode結(jié)構(gòu)模板調(diào)用StreamWriter對象的WriteLine()方法寫入這個AutoCAD直線段對應(yīng)的Glyph2語句。

        AutoCAD圓弧的處理方法是一樣的,只是圓弧讀取的參數(shù)不一樣而已。

        選擇集中所有的AutoCAD實體對象都處理完畢后,關(guān)閉FileStream對象和StreamWtriter對象:

        sw.Close();

        fs.Close();

        最后,讓Editor對象在命令行中寫入執(zhí)行完畢的通知:

        ed.WriteMessage("Save a script file successfully!");

        圖1是AutoCAD繪制的一個容器,一頭流入,另一頭流出。

        圖2是Pointwise執(zhí)行Plyph2腳本之后生成的Database對象。

        5結(jié)語

        使用C#語言開發(fā)的Glyph2腳本生成工具,在實際使用中,成功利用了已有的AutoCAD圖紙,避免了使用Pointwise進行重復(fù)的它并不擅長的幾何建模工作,提高了工作效率。

        參考文獻

        [1]Pointwise, Inc. Pointwise User Manual[M/CD]. USA: Pointwise, Inc. 2014:16-17.

        [2]Pointwise, Inc. Pointwise Glyph Reference Manual [M/CD]. USA: Pointwise, Inc. 2014:14-21.

        [3]Pointwise, Inc. Glyph2[EB/OL]. http://www.pointwise.com/glyph2/files/Glyph/cxx/GgGlyph-cxx.html

        [4]曾洪飛,盧擇臨,張帆. AutoCAD VBA&VB.NET開發(fā)基礎(chǔ)與實例教程(第二版)[M].北京:中國電力出版社,2013:12-22.

        [5]Autodesk Inc. ObjectARX for AutoCAD 2013 : Managed Class Reference[M/OL]. http://usa.autodesk.com/adsk/servlet/item?siteID=123112&id=785550.

        [6]Karli Watson, Christian Nagel. C#入門經(jīng)典(第5版) [M]. 齊立波,譯. 北京:清華大學(xué)出版社,2010:598-619.

        [7]Microsoft Corporation. Visual C# [EB/OL]. https://msdn.microsoft.com/en-us/library/vstudio/system.guid.newguid%28v=vs.110%29.aspx.

        中圖分類號:TH12;TP39

        文獻標識碼:B

        文章編號:1002-6886(2016)03-0091-05

        作者簡介:羅小美(1977-),女,機械工程師,就職于杜爾涂裝系統(tǒng)工程(上海)有限公司。

        收稿日期:2015-11-03

        The implementation of generating Glyph2 scripts from AutoCAD entities

        LUO Xiaomei

        Abstract:Currently, mesh generation software for CFD cannot import AutoCAD drawings, so work data cannot be reused. In order to improve work efficiency, it is necessity to develop a program that can rebuild AutoCAD entity objects in Pointwise. This program will run as the extension of AutoCAD, and translate AutoCAD entity objects one by one into Glyph2 script sentences that can rebuilt Pointwise entities, and the equivalents of AutoCAD entity objects can be gotten after Glyph2 script is executed in Pointwise. Practical running of this extender proves that this implementation is practicable and avoids repeating modeling work.

        Keywords:AutoCAD; ObjectARX; export; Glyph2

        猜你喜歡
        腳本圓弧命令
        酒駕
        只聽主人的命令
        淺析圓弧段高大模板支撐體系設(shè)計與應(yīng)用
        安奇奇與小cool 龍(第二回)
        外圓弧面銑削刀具
        數(shù)據(jù)庫系統(tǒng)shell腳本應(yīng)用
        電子測試(2018年14期)2018-09-26 06:04:24
        移防命令下達后
        快樂假期
        這是人民的命令
        數(shù)控車削圓弧螺紋程序編制與加工
        日日摸夜夜添夜夜添无码免费视频 | 伊人久久大香线蕉综合av | 国产精品无码一区二区三级| 国产 字幕 制服 中文 在线| 日韩在线看片| 蜜桃在线观看免费高清| 亚洲永久国产中文字幕| 免费人成视网站在线剧情 | 国产啪精品视频网站| 一区二区三区婷婷在线| 一区二区日本免费观看| 亚洲国产精品无码aaa片| 99精品国产综合久久久久五月天| 97在线视频免费| 口爆吞精美臀国产在线| 久久国产人妻一区二区| 毛片在线播放a| 4hu44四虎www在线影院麻豆 | 精品中文字幕制服中文| 伊人影院成人在线观看| 2018天天躁夜夜躁狠狠躁| 扒开双腿疯狂进出爽爽爽视频| 一个人免费观看在线视频播放| 91国产熟女自拍视频| 亚洲国产精品国自产拍久久蜜av| 最新系列国产专区|亚洲国产| 中文字幕无码av激情不卡| 日本少妇按摩高潮玩弄| 精品极品视频在线观看| 樱桃视频影院在线播放| 亚洲成a人片在线| 国产蜜臀精品一区二区三区 | 亚洲av久久久噜噜噜噜| 综合网自拍| 国产精品久久国产三级国| 新婚少妇无套内谢国语播放| 麻豆亚洲av永久无码精品久久| 国产在线看不卡一区二区| 美艳善良的丝袜高跟美腿| a级毛片免费完整视频| 久久精品国内一区二区三区|