• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

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

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

      羅小美

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

      ?

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

      羅小美

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

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

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

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

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

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

      1Glyph2腳本概念

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

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

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

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

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

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

      2Pointwise中的實(shí)體

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

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

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

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

      第一行是:

      package require PWI_Glyph

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

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

      set oneDatabaseObj [pw::Application begin Create]

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

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

      set oneDatabaseObjSeg [pw::SegmentSpline create]

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

      第四行和第五行為這個(gè)SegmentSpline對(duì)象添加兩個(gè)定義點(diǎn):

      兩個(gè)定義點(diǎn)的添加順序是:起點(diǎn)、終點(diǎn)。注意點(diǎn)坐標(biāo)表達(dá)格式,它們是list函數(shù)的參數(shù)。

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

      set oneDatabaseObjCurve [pw::Curve create]

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

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

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

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

      pw::Display resetView; # Zoom to geometry

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

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

      Exit; # END SCRIPT

      以上就是一個(gè)最簡(jiǎn)單的創(chuàng)建直線型Database Curve對(duì)象的腳本的全部?jī)?nèi)容。

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

      set oneDatabaseObjSeg [pw::SegmentCircle create]

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

      然后用setCenterPoint命令添加圓弧的圓心點(diǎn)和圓弧的法向矢量。

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

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

      AutoCAD的二次開發(fā)可以選擇原生語言C++、.NET語言C#和VB.NET、腳本語言VBA和Visual Lisp。這里選擇了C#語言,因?yàn)樗诠δ芎碗y度之間比較平衡。

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

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

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

      static public void GenerateGlyphScript()

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

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

      1)選擇對(duì)象;

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

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

      因?yàn)橹晦D(zhuǎn)換AutoCAD直線段和圓弧,所以構(gòu)建一個(gè)選擇過濾器[5]。首先創(chuàng)建一個(gè)PromptSelectionOptions對(duì)象:

      PromptSelectionOptions pso = new PromptSelectionOptions();

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

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

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

      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對(duì)象和SelectionFilter對(duì)象作為參數(shù),讓Editor對(duì)象執(zhí)行選擇交互:

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

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

      SelectionSet ss = psr.Value;

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

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

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

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

      psfo.DeriveInitialFilenameFromDrawingName = true;

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

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

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

      psfo.FilterIndex = 0;

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

      PromptFileNameResult pfnr = ed.GetFileNameForSave(psfo);

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

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

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

      StreamWriter sw = new StreamWriter(fs);

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

      sw.WriteLine("package require PWI_Glyph");

      再把前面選擇的對(duì)象逐個(gè)翻譯成Glyph2腳本語句并寫入腳本文件。因?yàn)樾枰獙懭攵鄠€(gè)AutoCAD實(shí)體對(duì)象對(duì)應(yīng)的腳本語句,所以creation mode的命名需要改為隨機(jī)字符串。

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

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

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

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

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

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

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

      sw.Close();

      fs.Close();

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

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

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

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

      5結(jié)語

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

      參考文獻(xiàn)

      [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ǔ)與實(shí)例教程(第二版)[M].北京:中國(guó)電力出版社,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.

      中圖分類號(hào):TH12;TP39

      文獻(xiàn)標(biāo)識(shí)碼:B

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

      作者簡(jiǎn)介:羅小美(1977-),女,機(jī)械工程師,就職于杜爾涂裝系統(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è)計(jì)與應(yīng)用
      安奇奇與小cool 龍(第二回)
      外圓弧面銑削刀具
      數(shù)據(jù)庫(kù)系統(tǒng)shell腳本應(yīng)用
      移防命令下達(dá)后
      快樂假期
      這是人民的命令
      數(shù)控車削圓弧螺紋程序編制與加工
      祁连县| 阿合奇县| 南陵县| 漳州市| 曲周县| 香港| 清水县| 白城市| 象州县| 汨罗市| 呼图壁县| 纳雍县| 喀喇沁旗| 九江县| 大悟县| 哈巴河县| 温泉县| 略阳县| 织金县| 江山市| 许昌县| 黄梅县| 吉首市| 雷州市| 清镇市| 钟祥市| 来凤县| 渑池县| 鹿邑县| 将乐县| 苍梧县| 清远市| 青州市| 太原市| 丰原市| 上栗县| 蕲春县| 德江县| 翁牛特旗| 红桥区| 志丹县|