国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于VB API和Auto CAD的圖紙批量換圖框軟件開發(fā)

2014-05-05 08:50:32李軍,焦志強(qiáng),高立程
機(jī)械管理開發(fā) 2014年2期
關(guān)鍵詞:圖框二次開發(fā)代號(hào)

引言

隨著產(chǎn)品數(shù)據(jù)管理系統(tǒng)(PDM)的引入,為了便于今后的產(chǎn)品設(shè)計(jì),豐富本地PDM的數(shù)據(jù)資源,需要將原先設(shè)計(jì)的產(chǎn)品圖紙輸入到本地零部件數(shù)據(jù)資源庫,而在輸入之前需要?jiǎng)h除每張圖紙中標(biāo)題欄和代號(hào)欄的內(nèi)容并更換PDM專用標(biāo)題欄和代號(hào)欄。為了避免重復(fù)性勞動(dòng),提高輸入效率,有必要編寫專用的軟件來代替手工的操作。通過Visual Basic對(duì)AutoCAD進(jìn)行二次開發(fā),成功編寫了適合本公司的圖紙批量換圖框軟件。

1 基于Visual Basic調(diào)用API函數(shù)的AutoCAD二次開發(fā)原理概述

Windows應(yīng)用程序接口,即API (Application programming interface),是一組用C語言編寫的函數(shù)庫,由操作系統(tǒng)調(diào)用來控制Windows的各個(gè)部件外觀和行為。Win32 API就是Windows32位平臺(tái)提供的應(yīng)用程序編程接口。在Visual Basic中,可以像調(diào)用普通過程一樣調(diào)用API中的函數(shù),實(shí)現(xiàn)所需要的操作。

1.1 查找指定對(duì)象

Windows環(huán)境中有很多對(duì)象,諸如窗口、組合框、文本框等,可以通過API函數(shù)以不同的形式對(duì)這些對(duì)象進(jìn)行操作。為此,必須以某種方法對(duì)這些對(duì)象進(jìn)行標(biāo)識(shí),并把它們以參數(shù)的形式傳送給函數(shù)。Windows用一個(gè)32位的整數(shù)對(duì)各種對(duì)象進(jìn)行標(biāo)識(shí),稱之為句柄。VB可以調(diào)用API函數(shù)FindWindow和FindWindowEx通過窗口標(biāo)題和類名來查找指定對(duì)象,并返回句柄。

1.2 給指定對(duì)象發(fā)送消息

在得到指定對(duì)象的句柄之后,可以通過消息函數(shù)SendMessage和PostMessage給指定對(duì)象發(fā)送消息。SendMessage函數(shù)有4個(gè)參數(shù),其中第一個(gè)參數(shù)(hwnd)是接收消息的窗口,即指定對(duì)象的句柄,第二個(gè)參數(shù)(wMsg)是消息編號(hào)(標(biāo)識(shí)符),第三、四個(gè)參數(shù)是消息的第一、第二個(gè)參數(shù)。后兩個(gè)參數(shù)wParam和lParam并不固定,隨對(duì)象和所發(fā)送的消息而不同。

2 針對(duì)圖紙自動(dòng)換圖框軟件的AutoCAD的二次開發(fā)

本公司的AutoCAD軟件集成了INTECAD程序,更換圖框時(shí)只需通過組合框選擇需要的標(biāo)題欄和代號(hào)欄即可,如下頁圖1所示。本程序的基本原理是當(dāng)標(biāo)題欄dwg文件打開時(shí),執(zhí)行更換標(biāo)題欄命令會(huì)刪除原有標(biāo)題欄中的數(shù)據(jù),隨后利用VB調(diào)用API消息函數(shù)SendMessage控制AUTOCAD選擇指定的標(biāo)題欄和代號(hào)欄,達(dá)到更換圖框的目的。

圖1 INTECAD程序定制圖幅界面

2.1 本軟件程序設(shè)計(jì)的流程

本軟件的主要功能是打開AUTOCAD圖紙,刪除每張圖紙中標(biāo)題欄和代號(hào)欄的內(nèi)容并更換PDM專用標(biāo)題欄和代號(hào)欄,程序流程圖見圖2。

2.2 建立VB交互式人機(jī)界面

通過VB編程將本軟件的各種數(shù)據(jù)信息,通過對(duì)話框的形式完全體現(xiàn)出來,建立人機(jī)交互界面,如圖3所示。

2.3 軟件功能結(jié)構(gòu)

圖紙自動(dòng)換圖框軟件主要由主控制程序、選擇標(biāo)題欄和代號(hào)欄子程序組成。

2.3.1 主控制程序

主控制程序?qū)崿F(xiàn)的功能是循環(huán)打開文件列表框中的AUTOCAD圖紙,判斷圖紙為零件還是部件,根據(jù)選項(xiàng)判斷是否進(jìn)行刪除標(biāo)題欄和代號(hào)欄操作,利用注冊(cè)表將標(biāo)題欄和代號(hào)欄名稱傳送給選擇標(biāo)題欄和代號(hào)欄子程序,給AUTOCAD發(fā)送打開定制圖幅命令,執(zhí)行后見圖1,再通過調(diào)用選擇標(biāo)題欄和代號(hào)欄子程序達(dá)到更換指定圖框的目的。具體代碼如下:

圖2 程序流程圖

圖3 程序主界面

For I = 0 To File1.ListCount - 1

Set acaddoc = acadapp.Documents.Open(astr &File1.List(I))

'利用文件名判斷圖紙為零件還是部件

Number = Split(File1.List(I), ".")

numbercount = UBound(Number)

If InStr(Number(numbercount - 1), "00") > 0 Then

headstr = headtext2

codestr = codetext2

Else

headstr = headtext1

codestr = codetext1

End If

'利用注冊(cè)表傳遞headstr和codestr

SaveSetting "通信小程序", "自定義通訊", "通訊1",headstr

SaveSetting "通信小程序", "自定義通訊", "通訊2",codestr

If Option1.Value = True Then

Call openhead(headbpath, headb)

Shell (App.Path & "headb.exe")

acaddoc.SendCommand ("tf" & vbCr)

acadapp.Documents(1).Close

End If

Shell (App.Path & "headpdm.exe")

acaddoc.SendCommand ("tf" & vbCr)

acaddoc.SendCommand ("qsave" & vbCr)

acaddoc.SendCommand ("close" & vbCr)

Set acaddoc = Nothing

Next I

2.3.2 選擇標(biāo)題欄和代號(hào)欄子程序

首先從注冊(cè)表中取出主程序存入的標(biāo)題欄和代號(hào)欄名稱,賦值給變量并清空數(shù)據(jù)。定義子函數(shù), 以標(biāo)題欄和代號(hào)欄名稱為變量。第一步通過API函數(shù)FindWindow查找“定制圖幅”窗口,再通過類名找到標(biāo)題欄代號(hào)欄組合框控件,利用消息函數(shù)SendMessage發(fā)送組合框字符串查找消息CB_FINDSTRING來獲得標(biāo)題欄和代號(hào)欄在組合框中的位置序號(hào),再發(fā)送組合框選擇消息CB_SETCURSEL通過剛才獲取的序號(hào)選擇選項(xiàng)。最后找到“確定(Y)”按鈕,通過消息函數(shù)PostMessage 發(fā)送按下Y鍵的消息,完成選擇標(biāo)題欄和代號(hào)欄操作。具體代碼如下:

headtext = GetSetting("通信小程序", "自定義通訊","通訊1")

codetext = GetSetting("通信小程序", "自定義通訊","通訊2")

DeleteSetting "通信小程序", "自定義通訊", "通訊1"

DeleteSetting "通信小程序", "自定義通訊", "通訊2"

Private Function pdm(ByVal headtext As String,ByVal codetext As String)

alsAnsi = StrConv(headtext, vbFromUnicode)

blsAnsi = StrConv(codetext, vbFromUnicode)

Dim starttime,count As Single

starttime = Timer

Do Until ahwnd11 Or count > 10

count = Timer - starttime

Sleep (50)

ahwnd1 = FindWindow(vbNullString, "定制圖幅")

ahwnd2 = FindWindowEx(ahwnd1, 0, "ComboBox",vbNullString)

ahwnd3 = FindWindow Ex(ahwnd1, ahwnd2,"ComboBox", vbNullString)

ahwnd4 = FindWindow Ex(ahwnd1, ahwnd3,"ComboBox", vbNullString)

ahwnd5 = Find Window Ex(ahwnd1, ahwnd4,"ComboBox", vbNullString)

ahwnd6 = FindWindow Ex(ahwnd1, ahwnd5,"ComboBox", vbNullString) '找到標(biāo)題欄

ahwnd7 = FindWindow Ex(ahwnd1, ahwnd6,"ComboBox", vbNullString)

ahwnd8 = FindWindow Ex(ahwnd1, ahwnd7,"ComboBox", vbNullString) '找到代號(hào)欄

If ahwnd6 And ahwnd8 Then

Do Until (a <> -1 And b <> -1) Or count > 10

count = Timer - starttime

a = SendMessage(ahwnd6, CB_FINDSTRING, -1,ByVal StrPtr(alsAnsi)) '找到標(biāo)題欄位置序號(hào)

b = SendMessage(ahwnd8, CB_FINDSTRING, -1,ByVal StrPtr(blsAnsi)) '找到代號(hào)欄位置序號(hào)

Loop

SendMessage ahwnd6, CB_SETCURSEL, a, 0 '選擇第a個(gè)選項(xiàng)

SendMessage ahwnd8, CB_SETCURSEL, b, 0 '選擇第b個(gè)選項(xiàng)

ahwnd9 = FindWindowEx(ahwnd1, 0, vbNullString,"確定(&Y)") '找確定鍵

PostMessage ahwnd9, WM_KEYDOWN, vbKeyY, 0'按下確定鍵

End If

DoEvents

ahwnd10 = FindWindow(vbNullString, "填寫欄框")

If ahwnd10 Then

ahwnd11 = Find Window Ex(ahwnd10, 0,vbNullString, "確定(&Y)")

PostMessage ahwnd11, WM_KEYDOWN, vbKeyY, 0

End If

Loop

End

End Function

3 結(jié)語

本應(yīng)用程序是在VB API和AutoCAD相結(jié)合的基礎(chǔ)上,實(shí)現(xiàn)了批量刪除圖紙中標(biāo)題欄和代號(hào)欄的內(nèi)容并更換圖框的功能,把原本商品化、通用化的AutoCAD系統(tǒng)用戶化、本地化。本文主要介紹了利用VB API作為開發(fā)工具的二次開發(fā)方法和關(guān)鍵問題,為開發(fā)其他適合用戶特定需要的專業(yè)化軟件提供了一種手段,同時(shí)也對(duì)致力于AUTOCAD二次開發(fā)的人員具有一定得參考價(jià)值。

[1] 劉炳文,李鳳華.Visual Basic 6.0 Win32 API程序設(shè)計(jì)[M].北京:清華大學(xué)出版社,2001.

[2] 張晉西.Visual Basic與AutoCAD二次開發(fā)[M].北京:清華大學(xué)出版社,2002.

[3] 尚雅玲.基于VB API的Pro/E二次開發(fā)探討[J].現(xiàn)代機(jī)械,2009(4):46-47.

[4] 高山,楊卓,張濤.Visual Basic中操作指針的技術(shù)及應(yīng)用[J].計(jì)算機(jī)工程與設(shè)計(jì),2009(24):5 722-5 725.

[5] 羅彬,劉獨(dú)玉.基于VB調(diào)用Windows API函數(shù)的參數(shù)傳遞研究[J].計(jì)算機(jī)應(yīng)用,2001(8):264-266.

猜你喜歡
圖框二次開發(fā)代號(hào)
《中獸醫(yī)學(xué)雜志》
《中獸醫(yī)學(xué)雜志》
演習(xí)代號(hào):圍城計(jì)劃
代號(hào)“凌凌漆”
淺談基于Revit平臺(tái)的二次開發(fā)
甘肅科技(2020年20期)2020-04-13 00:30:02
淺談Mastercam后處理器的二次開發(fā)
模具制造(2019年3期)2019-06-06 02:11:02
基于Lisp的自動(dòng)圖框繪制和輸出管理技術(shù)研究
西門子Easy Screen對(duì)倒棱機(jī)床界面二次開發(fā)
基于Microstation V8 XM圖紙批量打印的實(shí)現(xiàn)
析SP3D軟件的ISO出圖模板定制
新兴县| 登封市| 习水县| 越西县| 遂昌县| 沐川县| 阿巴嘎旗| 凤冈县| 库伦旗| 溆浦县| 甘孜县| 高雄县| 顺平县| 五常市| 上虞市| 庆元县| 如东县| 宁武县| 扎鲁特旗| 赞皇县| 怀安县| 库尔勒市| 日喀则市| 荆州市| 普兰店市| 林芝县| 嵊州市| 渝北区| 常熟市| 哈密市| 澄迈县| 屏边| 曲沃县| 微山县| 新龙县| 六盘水市| 朝阳市| 哈尔滨市| 阳泉市| 昆明市| 上饶县|