999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

AutoCAD實體導出Glyph2腳本的實現

2016-07-21 06:12:16羅小美
現代機械 2016年3期

羅小美

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

?

AutoCAD實體導出Glyph2腳本的實現

羅小美

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

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

關鍵詞:AutoCADObjectARX導出Glyph2

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

CFD網格劃分領域最流行的是采用自頂向下方法的ICEM和采用自底向上方法的Pointwise。Pointwise嚴格按照點、線、面、體的方式來生成網格,學習曲線平坦[1]。每個網格分區里的網格可以做詳細的調整,網格質量很好,支持最復雜、網格質量最苛刻的模型,這是ICEM難以比擬的。

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

1Glyph2腳本概念

Pointwise的腳本語言Glyph2是通用解釋型腳本語言Tcl/Tk的擴展。它提供了一個基于文本、面向對象的過程化接口。Pointwise讀取Glyph2腳本后,依次執行其中的命令,不容錯。

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

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

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

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

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

2Pointwise中的實體

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

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

3簡單Glyph2腳本的結構

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

第一行是:

package require PWI_Glyph

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

第二行開始創建Database[3]:

set oneDatabaseObj [pw::Application begin Create]

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

第三行創建一個Segment對象:

set oneDatabaseObjSeg [pw::SegmentSpline create]

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

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

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

第六行創建一個Curve對象:

set oneDatabaseObjCurve [pw::Curve create]

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

第七行向Curve對象添加前面創建的Segment對象:

第八行結束當前的Creation Mode:

第九行是重置圖形區:

pw::Display resetView; # Zoom to geometry

Database對象創建之后,其大小和圖形區的大小經常是不匹配的。重置圖形區本質上是最大化顯示。

第十行,也是最后一行,結束腳本:

Exit; # END SCRIPT

以上就是一個最簡單的創建直線型Database Curve對象的腳本的全部內容。

創建圓弧型Database對象的時候,需要創建的Segment對象應該是SegmentCircle類型的:

set oneDatabaseObjSeg [pw::SegmentCircle create]

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

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

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

4程序實現

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

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

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

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

static public void GenerateGlyphScript()

此處方法名稱是GenerateGlyphScript,調用的命令是縮寫"GENGLPH"。

方法在執行過程中要執行三個任務:

1)選擇對象;

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

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

因為只轉換AutoCAD直線段和圓弧,所以構建一個選擇過濾器[5]。首先創建一個PromptSelectionOptions對象:

PromptSelectionOptions pso = new PromptSelectionOptions();

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

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

創建使用邏輯運算符的過濾器選擇多個類型的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對象作為參數,讓Editor對象執行選擇交互:

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

創建一個SelectionSet對象保存選擇集:

SelectionSet ss = psr.Value;

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

創建一個PromptSaveFileOptions對象,它用于設置文件保存對話框:

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

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

psfo.DeriveInitialFilenameFromDrawingName = true;

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

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

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

psfo.FilterIndex = 0;

然后把PromptSaveFileOptions對象作為參數,讓Editor對象執行交互:

PromptFileNameResult pfnr = ed.GetFileNameForSave(psfo);

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

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

接著創建一個StreamWriter對象執行寫入操作:

StreamWriter sw = new StreamWriter(fs);

現在讓StreamWriter對象寫入任何Glyph2腳本的統一的首行[6]:

sw.WriteLine("package require PWI_Glyph");

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

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

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

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

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

接下來按照前述Creation mode結構模板調用StreamWriter對象的WriteLine()方法寫入這個AutoCAD直線段對應的Glyph2語句。

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

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

sw.Close();

fs.Close();

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

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

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

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

5結語

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

參考文獻

[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開發基礎與實例教程(第二版)[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#入門經典(第5版) [M]. 齊立波,譯. 北京:清華大學出版社,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-),女,機械工程師,就職于杜爾涂裝系統工程(上海)有限公司。

收稿日期: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

主站蜘蛛池模板: 人妻少妇久久久久久97人妻| 国产精品手机在线播放| 青青热久麻豆精品视频在线观看| 亚洲人成网站日本片| 大香网伊人久久综合网2020| 日本免费高清一区| 国产精品亚洲天堂| 中日无码在线观看| 中文字幕无码av专区久久| 免费人成在线观看成人片| 亚洲欧美一区二区三区图片| 日韩av资源在线| 99久久性生片| 精品国产自| 天天综合天天综合| 久久亚洲AⅤ无码精品午夜麻豆| 久久美女精品国产精品亚洲| 国产男女免费视频| 日韩精品毛片| 久久久久无码精品国产免费| 亚洲天堂成人在线观看| 免费jizz在线播放| 性色一区| 亚洲午夜天堂| 亚洲有无码中文网| 欧美一级片在线| 国产美女免费网站| 欧美黑人欧美精品刺激| 一本久道久久综合多人| 最新国产麻豆aⅴ精品无| 色首页AV在线| 人人看人人鲁狠狠高清| 思思热在线视频精品| 青青草欧美| 婷婷亚洲综合五月天在线| 欧类av怡春院| 亚洲av无码人妻| 97se亚洲综合| 亚洲婷婷六月| 久久婷婷人人澡人人爱91| 精品伊人久久大香线蕉网站| 欧美日韩激情在线| 国产成人乱无码视频| 国产区免费| 国产亚洲日韩av在线| 国产精品va| 精品亚洲国产成人AV| 成人噜噜噜视频在线观看| 99精品影院| 亚洲天堂在线免费| 色综合综合网| 人妻精品久久无码区| 中字无码精油按摩中出视频| 欧美日本在线一区二区三区| 亚洲午夜18| 婷婷午夜天| 伊伊人成亚洲综合人网7777| 日本高清有码人妻| 国产噜噜噜| 免费福利视频网站| 蝌蚪国产精品视频第一页| 国产永久在线观看| 在线观看亚洲人成网站| 国产一区二区三区精品欧美日韩| 中文字幕有乳无码| www欧美在线观看| 国模在线视频一区二区三区| 自拍偷拍欧美| 国产丝袜无码精品| 97se亚洲综合在线| 亚洲日韩日本中文在线| 欧美日本一区二区三区免费| 欧美色视频在线| 国产精品视频999| 美女潮喷出白浆在线观看视频| 欧美成人午夜在线全部免费| 欧洲精品视频在线观看| 国产精品白浆无码流出在线看| 欧美在线伊人| 色欲综合久久中文字幕网| 亚洲色成人www在线观看| 欧美成人免费一区在线播放|