我想看一级黄色大片_久久亚洲国产精品一区二区_久久精品免视看国产明星_91久久青青青国产免费

您的位置:網站首頁 > CAD新聞

CAD中實現工程圖樣自動化轉換的研究

時間:2009-12-24 13:49:22 來源:
 工程技術人員在相互交流過程中因所使用的評議和標準不同,彼此傳遞 的圖樣必須經過轉換才能使用。其中絕大部分工作是對其中的標注和注釋進行 轉換,簡單說來就是把其中的文字做一 個替換。如果圖樣較多,人工操作很繁瑣,而且由于人工操作時個人水平和習 慣的不同,也會導致轉換結果不一致的問題。因此有必要開發一個圖樣轉換工具來替代人工操作。

  一、總體設計

  此圖形工具主要針對圖形中的文字做轉換,但涉及到圖形文字字體選擇和設置的問題。另外,為了達到準確一致的要求,還必須對替換的標準字典進行管理。因此,這個軟件的總體結構如圖1所示。主要功能模塊的定義如下。

  (1)圖形設置:通過樣式管理器、字體設置和標注設置這三種方式對圖形定義的字體和標注形式進行管理,以保 證圖樣能顯示中文、字體和標注符合相關標準。

  ( 2 ) 圖形轉換:實現對圖形中 文字的替換??蛇x擇不同的字典,按 字典中的條目對字字進行“翻譯”。

  (3)字典管理:用以創建、修改字典。用戶創建英漢字典、標準對照、材 料對照字典后,就可通過“圖形轉換” 操作對圖樣進行轉換。

  (4)系統設置:主要方便用戶對系統 相關文件的管理。

  此圖形工具插入到AutoCAD環境中, 用戶界面是在C A D中加入菜單(如圖2所 示),再通過對話框的形式進行操作。

  二、概要設計

  (1)圖形設置模塊;主要利用VBA與AutoCAD模型對象之間的良好接口,通過對話框的形式與用戶交互,方便實現圖形的文本樣式和標注樣式。按照總體設計規劃并結合用戶操作習慣設計出如下幾個對話框(見圖3),即可進入詳細設計階段。

  (2)文本轉換模塊:主要完成對圖形中所有文字的替換,如圖4所示。這些文字可能是單行文本、多行文本、屬性和標注文字,為了程序的結構清晰,設計Get Text和Set Text兩個通用過程處理。 另外,圖形中還含有塊參照且可能這些塊是嵌套的,因此將文本轉換設計為一個遞歸過程。

  (3)字典操作:是本程序的重頭,鑒于面向對象的優越性,通過構造一 個字典類來實現對數據的維護和操作, 從而把與字典有關的操作全部集中到字典類上。它包含以下內容:常數:

  dicmax——定義字典允許的最大的詞條數,根據運行效率、內存占用和實際需求設定其數值;屬性:Count——字典實際詞條數,data——詞條;方法:

  Clear——清空字典,Add——添加詞條,Update——更新詞條,Search——查找,Cov——實現文字翻譯,L o a d——裝入字典,Save——保存字典。

  (4)系統設置:主要指定系統工作路 徑、字體文件路徑、字典文件路徑,并 保存在Windows注冊表中。

  三、詳細設計

  詳細設計是對概要設計的內容進行編碼,具備有一定的編程能力且熟悉V B A 和AutoCAD模型對象就可順利完成,其中 字典類的代碼如下。

  ‘數據

  Const dicMAX = 1000 ‘ 定義最大詞條數,根據實際需要和系統性能定#p#分頁標題#e#

  Private DicData() As String ‘詞條數組

  Private dicCount As Integer ‘詞條總數

  ‘只讀屬性data

  Property Get data() As Variant data = DicData

  End Property

  ‘只讀屬性count

  Property Get count() As Integer count = dicCount

  End Property

  ‘A d d操作,成功返回T r u e,e n g— 原文,chn—譯文

  Function Add(eng As String, chn

  As String) As Boolean

  If dicCount >= dicMAX Then Add = False: Exit Function ‘如果詞條數超過 最大值則添加失敗

  R e D i m P r e s e r v e D i c D a t a ( 1 , dicCount) ‘重定義詞條數組大小

  DicData(0, dicCount) = eng DicData(1, dicCount) = chn dicCount = dicCount + 1

  Add = True

  End Function

  ‘ Update 操作,成功返回True,eng—原文,chn—譯文,Index—索引

  Function Update(index As Integer,

  eng As St ring, chn As St ring) As

  Boolean

  If index >= dicMAX Or index < 0

  Then Update = False: Exit Function DicData(index, 0) = eng DicData(index, 1) = chn

  Update = True

  End Function

  ‘Search操作,成功返回查到的詞 條索引,失敗返回0

  Function Search(eng AsString, ByRef chn As String) As Integer

  For i = 0 To dicCount – 1

  ‘通過一個循環逐條比較

  If DicData(i, 0) = eng Then

  If DicData(i, 1) = "" Then

  Search = 1 ‘ 查到原文,沒有對應譯文,返回1

  Else

  Search = 2 ‘ 查到原文且有對應譯文,返回2

  chn = DicData(i, 1) End If

  Exit Function

  End If

  Next

  Search = 0‘沒有查到原文,返回0

  End Function

  ‘內部過程MyReplace,是Cov的 主過程,提取出來方便以后修改或升級

  Private Function MyReplace(source As String, find As String, replace As String, op As Integer) As String

  ls = Len(source)

  lf = Len(find)

  Dim k As Integer

  k = I n S t r ( 1 , s o u r c e , f i n d , vbTextCompare) ‘在原文本中查找要查找的子串

  While (k > 0)

  Select Case op ‘ 按op的值

  替換查找的子串

  Case 1:

  MyReplace = Left(source, k - 1) &replace ‘直接替換 Case 2:

  MyReplace = Left(source, k - 1) &"(" & replace & ")"言之‘替換并在兩邊加 注括號

  Case 3:

  MyReplace = Left(source, k + lf - 1)& "(" & replace & ")" ‘保留原文并加括號 End Select

  source = Right(source, ls - k + 1 - lf)

  k= In Str(k+lf, source, find, vbTextCompare) 繼續查找下一處

  Wend

  MyReplace = MyReplace & source

  End Function

  ‘Cov操作,s—原文本,op—翻譯選 項;返回譯文,沒有翻譯時譯文=原文本

  Function Cov(s As String, op As

  Integer) As String

  Cov = s

  For i = 0 To dicCount - 1

  Cov = MyReplace(Cov, DicData(0, i), DicData(1, i), op)

  Next

  End Function

  ‘Load操作,讀入字典文件,fn— 字典文件的全路徑和名稱

  Function Load(fn As String) As

  Boolean

  On Error GoTo l1

  Open fn For Input As #1

  ‘打開文件

  Dim e As String, c As String

  While Not EOF(1)#p#分頁標題#e#

  Input #1, e, c‘讀入詞條 Add e, c ‘加入字典 Wend

  Close 1 ‘關閉文件 Load = True

  Exit Function l1:

  Load = False ‘如遇錯誤,返 回失敗

  End Function

  ‘S a v e操作,寫出字典文件,f n— 字典文件的全路徑和名稱

  Function Save(fn As String) As

  Boolean

  On Error GoTo l1

  Open fn For Output As #1

  ‘打開文件,準備寫入

  For i = 0 To dicCount - 1

  Write #1, DicData(0, i), DicData(1, i)

  ‘寫詞條 Next

  Close 1 關閉文件 Save = True

  Exit Function l1:

  Save = False ‘ 如 遇 錯 誤,返回失敗

  End Function

  ‘Clear操作,清空

  Sub Clear()

  dicCount = 0

  ‘詞條計數值勤0

  ReDim DicData(1, 0)

  ‘詞條數組清空 End Sub

  ‘ 初 始 操 作 , 將 dicCount值0,(在VB中 可省略)

  Private Sub Class_

  Initialize()

  dicCount = 0

  End Sub

  四、軟件測試

  這個軟件是筆者設計的一個小軟件,通過調試,軟件能正常運行實現工程圖樣轉換。

  五、結論

  軟件完成后,試用的效果實用、方便、快捷,維護方便。由此可以得出以下體會:

  ◎個人進行C A D二次開發來創建一 個簡單實用的圖形工具是完全能夠實 現的;

  ◎個人用V B A進行C A D二次開發效率 高,可維護性強,不存在與AutoCAD各版 本不兼容的問題;

  ◎通過對話框的形式實現軟件與用 戶的交互很直觀,也很方便。