批量CAD圖樣的快速本地化方法

2013-08-09  by:廣州機械cad設(shè)計  來源:仿真在線

批量CAD圖樣的快速本地化方法

 

一、引言

隨著經(jīng)濟全球化的發(fā)展,外向型企業(yè)越來越多,磁懸浮、C919大型客機等各類國際招投標(biāo)和國際合作項目也迅速增加,CAD圖樣作為工程師的語言,無論在工廠或項目中無疑都扮演著舉足輕重的作用。一個項目或產(chǎn)品,少則數(shù)十張,多則上千張的外文CAD圖樣,要求所有需要用到圖樣的人員都能很好地理解圖樣上的外文文字,顯然是不可能的。那么如何快速準(zhǔn)確地進行圖樣本地化,將其翻譯成目標(biāo)語言,就成了項目實施必須首先解決的問題。

以俄羅斯某石油管道招標(biāo)工程為例,工程的技術(shù)說明共附了3000多個CAD圖樣文件,參與投標(biāo)的公司要在一周內(nèi)根據(jù)這些圖樣判斷自己是否有能力參與這個工程的投標(biāo)。然而3000多個CAD文件是一個很龐大的工作量,讓翻譯人員在圖樣中對原有的大量文字進行逐個編輯,效率很低,也很容易出錯,在要求的時間內(nèi)根本無法完成。

筆者受某翻譯公司的委托,使用VB.NET設(shè)計開發(fā)了CAD圖樣的快速本地化軟件,自動批量讀取CAD文件中的所有文字,過濾所有重復(fù)后通過GOOGLE的自動翻譯API做初步翻譯,然后生成EXCEL對照文件,供翻譯人員進行審核,審核完成后再批量寫回CAD文件。在軟件的幫助下,僅用三天時間就完成整套工程圖樣的翻譯工作,幫助客戶順利完成了投標(biāo)。本文對實現(xiàn)的思路和方法進行詳細的說明,并給出了關(guān)鍵代碼和實際效果的圖示。

二、CAD文字的批量提取

1.獲取所有CAD文件列表

獲取所有文件列表有很多方法,其中遍歷子目錄是最常用的方法,也有很多成熟的算法,但程序比較繁瑣。本文通過調(diào)用cmd.exe進程的DIR功能直接獲取文件名列表,簡潔有效。

DimmyProcessAsProcess=NewProcess()

myProcess.StartInfo.Arguments=“cmd.exe/cdir“””&destDirName&fType&“””/a/s/b>”””&

OutFileName&“””&&exit”

myProcess.Start()

myProcess.Close()

2.提取CAD文件字符串信息

獲取了所有CAD文件的全路徑名之后,就可以通過逐個讀取CAD文檔的方法,抽取CAD的字符串內(nèi)容??梢允褂米畛S玫腁ctiveX方法連接VB.NET和AutoCAD,然后讀取AutoCAD的文檔。

AutoCAD文檔結(jié)構(gòu)并不復(fù)雜,主要分為應(yīng)用程序Application、當(dāng)前文檔ThisDrawing、模型空間ModelSpace和具體圖元Entities這幾個層次。文字信息一般就包含在AcadText和AcadMtext兩類實體中,有些特殊情況下也會使用圖塊的屬性來保存文字信息。

在具體的應(yīng)用中,要有效地抽取所需要的文字信息,并按照正常的閱讀順序組織起來,并不是簡單地遍歷模型空間就可以實現(xiàn),主要需要考慮以下幾個方面的問題。

實際工程圖樣中大量應(yīng)用圖塊,而圖塊中文本是不會被識別為文本實體的。如果只遍歷文本實體來獲取字符串,會造成大量數(shù)據(jù)丟失。

AutoCAD中的圖塊,在整個文檔的數(shù)據(jù)組織中扮演中重要的作用。最基本的模型空間和圖樣空間,都是作為圖塊來工作的,其塊名以“_space”結(jié)尾。這樣問題就有了解決的方法:首先在圖塊集合中判斷,哪些塊在圖樣空間和模型空間中進行了引用;然后在實際進行引用的圖塊中,通過遞歸調(diào)用的方法,讀取圖塊中的所有文本。關(guān)鍵代碼如下:

ForBlockI=0ToThisDrawing.Blocks.Count-1

‘只判斷在圖樣空間和模型空間中進行引用的塊名,跳過其他塊

IfInStr(1,LCase(ThisDrawing.Blocks.Item(BlockI).Name),"_space")=0Then

GoTonextBlockI1

EndIf

記錄在SPACE中直接使用的塊名

ForEachobjInThisDrawing.Blocks.Item(BlockI)

Ifobj.ObjectName="AcDbBlockReference"Then

If(proNoVisible=FalseAndLayers(obj.Layer).Freeze

=False)OrproNoVisible=TrueThen

'記錄塊名,然后再進行操作AddtoBlockListobj.NameEndIf

EndIf

Nextobj

nextBlockI1:NextBlockI

AutoCAD的數(shù)據(jù)庫中,文本信息的存儲次序和文本閱讀次序是完全不同的,如果不加任何處理地把字符串讀取出來,呈現(xiàn)在文字處理人員面前的,只能是難以理解甚至毫無意義的文字羅列。

實際工程應(yīng)用的圖樣上,會有大量的文本信息以不同格式分散在圖樣的各處。這些信息,在有圖、線配合時,不會造成閱讀上的歧義。而從CAD圖形文檔中挖掘出來的純文本的信息,組織過程中就必須考慮到如何消除歧義,便于閱讀。由于在圖樣的實際繪制過程中,不同的繪圖人員會有不同的排版、斷句習(xí)慣,所以要解決各種情況下的數(shù)據(jù)識別和組織問題,主要通過規(guī)則庫(固有規(guī)則+自定規(guī)則)的方法來實現(xiàn)。

對于一些常見的數(shù)據(jù)塊形式,如表格、技術(shù)說明等,可以通過固有規(guī)則進行識別。主要的識別依據(jù)是通過字體、字高、字符間距、指定區(qū)域內(nèi)文字數(shù)目、文本間是否有間隔線等信息進行相鄰句判斷。

對于一些不常見的數(shù)據(jù)形式,如用單字表達并且字符間距很大的詞語,異常斷句等,允許用戶通過設(shè)定自定義規(guī)則進行過濾。

經(jīng)過雙重規(guī)則的過濾之后,由于圖樣數(shù)據(jù)的復(fù)雜性,仍然可能會有部分孤立數(shù)據(jù)無法識別,這部分只能標(biāo)注之后通過人工的方式進行特別處理。有了完善的規(guī)則庫,需要人工干預(yù)部分的比例,是很低的。

規(guī)則過濾前后的文本數(shù)據(jù)對比示意。

處理后字符串列表中,斷句的后續(xù)部分將自動合并到首字符串,并以##標(biāo)記,為后續(xù)數(shù)據(jù)寫回CAD提供依據(jù)。

AutoCAD中大量使用轉(zhuǎn)義字符,如小語種(非英語)字符全部是用UNICODE代碼來表示的,這部分也需要進行轉(zhuǎn)換操作才有可讀性。

AutoCAD的文本數(shù)據(jù)中,使用了轉(zhuǎn)義字符的,均用“\U+”開頭,UNICODE和ASCⅡ有固定的對應(yīng)關(guān)系,所以通過數(shù)據(jù)庫查表的方式,替換對應(yīng)字符串即可實現(xiàn)。圖2是俄語字符串的轉(zhuǎn)換實際效果示意。

三、翻譯模塊

文本數(shù)據(jù)從CAD文檔中抽取后,可以人工進行翻譯,也可以調(diào)用GOOGLE、BING等自動翻譯API進行。人工翻譯比較準(zhǔn)確,但成本較高,自動翻譯比較快速,但質(zhì)量相對較低。本文采用的是GOOGLE的自動翻譯API接口。GOOGLE在技術(shù)文字的翻譯這塊已經(jīng)取得了巨大的進展,雖然翻譯的質(zhì)量還達不到人工翻譯的要求,但是可以滿足基本的閱讀需要,而且在專業(yè)術(shù)語翻譯部分,由于有GOOGLE海量數(shù)據(jù)庫的支持,正確率較高。GOOGLE的自動翻譯接口需要FRAMEWORK3.5的支持。

具體實現(xiàn)的代碼很簡潔:

‘引用GoogleTranslateAPI;

sourceLan=Google.API.Language.ChineseSimplified

‘設(shè)定源語言類別

targetLan=Google.API.Language.English‘設(shè)定目標(biāo)語言類別

SearchByEnginee=Translator.Translate(temps,sourceLan,targetLan)‘調(diào)用translate函數(shù)實現(xiàn)自動翻譯,返回的字符串,就是自動翻譯的結(jié)果。

自動翻譯的結(jié)果在人工校核之后,再寫回CAD,以提高翻譯的準(zhǔn)確性。

四、文字的寫回

翻譯后文本信息的寫回,可以用查表的方法替換CAD中的文字,也可以將翻譯完成的文字,采用讀取文字完全相同的次序?qū)懭隒AD。本文采取的是后一種方法,即根據(jù)所提取字符串的次序,產(chǎn)生目的語言字符串列表,然后直接將所得的字符串列表逐個寫入原CAD文檔中。

在文字的排版上,按照以下規(guī)則確定:字高根據(jù)原文字高決定,長寬比則根據(jù)原有文字的寬度來決定,可以選擇雙語混排或直接替換為目的語言。文字統(tǒng)一放入新層中便于管理。主要代碼如下:

‘添加層,設(shè)置層的屬性ThisDrawing.Layers.Add“test”

ThisDrawing.TextStyles.Add“ew”

ThisDrawing.TextStyles(ThisDrawing.TextStyles.Count-1).SetFont“宋體”,False,False,134,2

IfTrim(curS)<>“##”Then

SettempTxt=ThisDrawing.Blocks.Item(BlockI).AddText(curS,newPoint,obj.Height)

tempTxt.Rotation=obj.Rotation

OriJd=tempTxt.RotationtempTxt.Alignment=acAlignmentFittempTxt.TextAlignmentPoint=b

EndIf

tempTxt.Layer=“test”tempTxt.StyleName=“ew”ThisDrawing.Save‘保存文檔。


開放分享:優(yōu)質(zhì)有限元技術(shù)文章,助你自學(xué)成才

相關(guān)標(biāo)簽搜索:批量CAD圖樣的快速本地化方法 批量CAD圖樣的快速本地化方法 AutoCAD培訓(xùn) AutoCAD培訓(xùn)課程 AutoCAD圖紙設(shè)計 AutoCAD在線視頻 AutoCAD技術(shù)學(xué)習(xí)教程 AutoCAD軟件教程 AutoCAD資料下載 Fluent、CFX流體分析 HFSS電磁分析 Ansys培訓(xùn) Abaqus培訓(xùn) 

編輯
在線報名:
  • 客服在線請直接聯(lián)系我們的客服,您也可以通過下面的方式進行在線報名,我們會及時給您回復(fù)電話,謝謝!
驗證碼

全國服務(wù)熱線

1358-032-9919

廣州公司:
廣州市環(huán)市中路306號金鷹大廈3800
電話:13580329919
          135-8032-9919
培訓(xùn)QQ咨詢:點擊咨詢 點擊咨詢
項目QQ咨詢:點擊咨詢
email:kf@1cae.com