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

基于SolidWorks尺寸驅動建模的二次開發

2013-01-01 00:00:00吳志林張凱還
計算機時代 2013年1期

摘 要: 闡述了SolidWorks二次開發原理,提出了基于零件尺寸遍歷的尺寸驅動建模二次開發方法并詳細論述了開發思路。以VBA為開發工具,運用SolidWorks API技術,實現了此方法在SolidWorks中的應用。該方法對傳統的尺寸驅動建模進行了改進,使尺寸驅動建模具有普遍適用性,可大大提高產品設計效率。

關鍵詞: 尺寸遍歷; 尺寸驅動; VBA; 二次開發

中圖分類號:TP391 文獻標志碼:A 文章編號:1006-8228(2013)01-14-03

Secondary development of dimension-driven model construction based on Solidworks

Wu Zhilin, Zhang Kaihuan

(School of Mechanical Engineering, Nanjing University of Science and Technology, Nanjing, Jiangsu 210094, China)

Abstract: The basic principles of secondary development of SolidWorks are introduced. A dimension-driven and dimension-traversal method of building models is proposed. Using VBA as the development tool,this method is achieved based on SolidWorks API technology. The traditional secondary development of SolidWorks is improved based on dimension-driven model which makes the modeling process easier and improves the efficiency of product design.

Key words: dimension-driven; dimension- traversal; VBA; secondary development

0 引言

SolidWorks是一款優秀的三維工程軟件,因其操作簡單、功能強大、具有很好的開放性和兼容性而為廣大機械設計工程師所接受。但SolidWorks畢竟是國外軟件,與我國國家標準在很多方面有所不同,多年來,針對SolidWorks軟件的二次開發工作從未間斷。

在系列零件設計及形狀相似的模型建模方面,傳統的SolidWorks的二次開發主要有兩種:一是使用系列零件設計表;二是定制尺寸驅動窗體[1-2]。這兩種方法都有其不足之處:系列零件設計表需要設計者先輸入大量特定的尺寸數據,使用時若表中沒有需要的系列,仍需要對模型進行重新建模;定制尺寸驅動窗體只針對某特定形狀的零件,不具有普遍性,例如,定制的平鍵尺寸驅動窗體只能在平鍵建模時使用,螺栓建模時將無法使用。

本文以SolidWorks自帶的VBA為開發工具,提出了基于SolidWorks尺寸驅動建模的二次開發方法,該方法與定制尺寸驅動窗體有相似之處,但在模型針對性方面做了改進,使尺寸驅動建模具有普遍性。任何在設計時標注了尺寸的模型,都可以使用該方法輕松快速地實現模型尺寸數據更改,從而幫助設計者大大提高工作效率。

1 開發原理

SolidWorks二次開發主要通過其內嵌的API(Application Programming Interface,應用程序接口)進行,任何基于Windows系統,支持OLE(Object Linking and Embedding,對象鏈接與嵌入)技術的編程軟件,如VB、Delphi、VBA、C、Visual C++等都可以對SolidWorks進行二次開發[3]。API就像一個暗盒,設計者只需要在程序中為API提供相應的參數,API函數就能輸出相應的結果,而無需理會API內部的工作方式。開發時,開發者要找到完成所需功能的API函數,了解該函數的參數含義,從而完成二次開發。

Solidworks API對象是一個自上而下的多層次的樹形網絡。如圖1所示[4],Sldworks是根目錄對象,位于應用程序的底層,是訪問Solidworks API所有對象的入口程序。接口對Solidworks API的調用實行逐級尋訪,先調用能實現所需功能對象的父對象,然后調用與父對象相關的子對象,如果子對象所封裝的屬性和方法不能實現所需要的功能,則繼續調用該子對象的下級子對象,如此逐級遍歷,直到結束[5]。So1idworks API父對象與子對象是包含關系,不是繼承關系,父對象包含子對象的屬性和方法,子對象自身不帶有該屬性和方法。二次開發中,如果沒有按規則進行API逐級調用,將無法實現所需功能。

本文所做二次開發主要用到了ModelDoc2對象的特征管理子對象Feature對象和尺寸管理子對象Parameter對象。

2 開發思路

用戶在SolidWorks建模過程中標注的尺寸,SolidWorks會自動為其生成在該零件中惟一的尺寸名稱。特征樹中零件特征分為二維特征“草圖x”和三維特征“拉伸x/切除x/旋轉x等”兩類(x為數字,下同)。每次執行由二維草圖生成三維特征的操作時, SolidWorks通常僅自動生成一個三維尺寸名稱,一般為“D1@拉伸1”、“D1@旋轉1”的形式;二維草圖中的尺寸數量則由設計者標注的多少決定,例如用戶在“草圖2”中標注了三個尺寸,則SolidWorks為三個尺寸生成的名稱分別為“D1@草圖2”、“D2@草圖2”和“D3@草圖2”。因此,通過遍歷零件特征讀取各個特征包含的尺寸數目,就可以在程序中還原尺寸數據名稱,然后為各個尺寸賦值,重建模型。

尺寸驅動建模開發流程如圖2所示,啟動SolidWorks后,判斷是否有零件被打開。如果有,則獲得當前零件的名稱,供遍歷特征及尺寸驅動建模時使用;如果沒有,提示用戶打開零件。程序獲得零件名稱之后,開始對零件的特征樹進行遍歷。因為特征樹中“備注”、“注解”、“光源”、“材質”、視圖基準面、“原點”等特征不具備尺寸特征,API遍歷特征樹的順序又為從上到下依次進行,且零件特征緊接“原點”特征之下,所以遍歷過程中判斷當前特征是否為“原點”,如果為“原點”,則在下一次的遍歷中開始遍歷零件的各個特征及特征所包含的尺寸數目。

遍歷特征并判斷該特征包含尺寸數目時,通過判斷“選擇尺寸時返回值是否為真”來實現。例如,零件模型特征樹中有“草圖1”,“草圖1”中含有x個用戶標注的尺寸,程序通過循環,從選擇“D1@草圖1”開始判斷選擇 “Dy@草圖1”時返回值的真假,當1≤y≤x時,返回值為真,說明尺寸存在,當y=x+1時返回值為假,說明尺寸不存在,并停止在“草圖1”特征的尺寸遍歷,從而獲得“草圖1”包含的尺寸數目。

遍歷出各個特征所包含的尺寸數目之后,分別將其存儲于數組,然后根據各個特征的名稱及所包含的尺寸數目,動態加載尺寸驅動窗體,并在窗體上顯示每個尺寸名稱及相應的尺寸數據輸入框。用戶輸入相應尺寸的數值并確定,程序即可通過調用Solidworks API函數,自動完成尺寸驅動建模。

3 開發示例

⑴ 建立尺寸驅動窗體,如圖3所示。需指出的是,本文是在VBA環境下進行的二次開發,VBA不支持控件數組,所以要事先在窗體中建立足夠多的控件,程序運行時再由尺寸數量決定顯示多少組控件。當然,VBA與VB極其相似,用戶還可以在VB環境中進行二次開發,或者在VBA環境中編寫類模塊實現控件數組功能,但這些不是本文重點,在此不再贅述。

⑵ 主程序關鍵代碼。

Public swApp As SldWorks.SldWorks

Public swmodel As SldWorks.ModelD-oc2

Public k As Integer

Sub main() ‘主程序過程

Dim swFeature As SldWorks.Feature

…… ‘省略一般變量聲明

j=1

Set swApp=Application.SldWorks ‘建立SolidWorks對象

swApp.SetUserPreferenceToggle swShowDimensionNames, True

‘在零件模型中點擊草圖時,顯示尺寸名稱。這樣做是為了在草圖尺寸數目較多的情況下,方便用戶查閱尺寸名稱所對應的零件特征尺寸。

If Not swApp Is Nothing Then

Set swmodel=swApp.ActiveDoc‘獲得當前活動文檔。

If swmodel=Nothing Then

‘判斷是否有文檔被打開

MsgBox \"請先打開零件。\"

Exit Sub

‘如果沒有零件被打開,跳出過程。

End If

str=swmodel.GetTitle

‘獲得當前活動文檔的零件名稱,尺寸驅動建模時會用到該字符串變量。

If Not swmodel Is Nothing Then ‘如果當前有文檔被打開,開始遍歷。

Set swFeature=swmodel.FirstFeature

‘獲得特征樹中的第一個特征。

While Not swFeature Is Nothing

‘如果特征存在,判斷特征類型。

Featname=swFeature.Name ‘獲得特征名稱。

If Featname=\"原點\" Then

bltz=True

‘只有bltz為true時,才會遍歷特征所包含的尺寸數。

GoTo tiaozhuan

‘“原點”特征無尺寸,可以直接遍歷下一特征。

End If

i=1 ‘從“D1@特征x”開始遍歷。

bl=True ‘為選擇尺寸的返回值賦初始值,啟動循環。

If bltz=True Then

While bl ‘bl值為true時,即尺寸存在時循環。

str1=\"D\" i ‘生成尺寸名稱字符串。

bl=swmodel.Extension.SelectByID2(str1 \"@\"

Featname \"@\"str\".SL-DPRT\",\"DIMENSION\",

0.015427,0.03894,0.006118,False,0,Nothing,0)

‘當尺寸被選擇,即尺寸存在時,bl值為true,進行下一次遍歷。

i=i+1

Wend

a(j)=i-2 ‘記錄第j個特征包含尺寸數目,便于在尺寸驅動窗

體中還原尺寸名稱。

b(j)=Featname ‘記錄第j個特征的特征名稱,便于在尺寸

驅動窗體中還原尺寸名稱。

j=j+1

End If

tiaozhuan:

Set swFeature=swFeature.GetNextFeature

‘獲得下一個特征。

Wend

End If

For i=1 To j-1

k=k+a(i)

‘獲得尺寸數目的總數。

Next

Frm1.Show 0

‘加載非模態的窗體。當模型的尺寸較多時,只有當尺寸驅動窗體為非模態,用戶才可以查看尺寸名稱對應的模型特征;若窗體為模態的,窗體將顯示在Solidworks界面的最前端,且在窗體卸載之前,SolidWorks無法響應窗體以外的任何操作。

End If

End Sub

⑶ 尺寸驅動窗體代碼。

Private Sub UserForm_Initialize() ‘窗體初始化。

……

‘省略變量聲明聲明及控件位置調整部分,該部分用戶可根據控件大小自行調整。

For i=30 To k+1 Step-1

Frm1.Controls(\"label\" i).Visible=False

Frm1.Controls(\"textbox\" i).Visible=False

‘根據尺寸的總數目決定顯示多少組標簽及文本框,本程序預置了30組,用戶可以根據需要增加或減少。

Next

n=1

For i=1 To j-1

For m=1 To a(i)

Frm1.Controls(\"label\" n).Caption=\"D\" m \"@\" b(i)

‘使用標簽顯示尺寸名稱。

n=n+1

Next

Next

For i=1 To k

strb(i)=Frm1.Controls(\"label\" i).C-aption

sng(i)=swmodel.Parameter(strb(i) \"@\" str).SystemValue

Frm1.Controls(\"textbox\" i).Text=sng(i)*1000

‘在文本框中顯示相應的尺寸數值,供用戶輸入新數值時參照。

Next

End Sub

Private Sub Cmd1_Click()

……‘省略聲明部分。

For i=1 To k

strb(i)= Frm1.Controls(\"label\" i).C-aption

‘獲得尺寸名稱并賦值于數組。

Next

For i=1 To k

swmodel.Parameter(strb(i) \"@\" str).SystemValue=

Val(Frm1.Controls(\"text-box\" i).Text)/1000

‘將相應文本框中的數值賦值于相應尺寸。

Next

swmodel.EditRebuild

‘重建模型。

Set swmodel=Nothing

‘釋放對象型變量。

Set swApp=Nothing

Unload Frm1 ‘卸載窗體。

End Sub

⑷ 程序運行示例如圖4所示。對比程序運行前界面圖3可以看出,程序運行時,會根據零件的特征樹(圖4上部分)自動生成相應的尺寸驅動窗體(圖4下部分),使用戶對模型的更改變得非常方便。

4 結束語

本文指出了傳統的基于SolidWorks對系列零件及形狀相似、尺寸不同的零件模型二次開發方面存在的不足,提出了基于SolidWorks尺寸遍歷的尺寸驅動建模二次開發方法。運用SolidWorks API技術,以SolidWorks自帶VBA為開發工具,實現了該方法在SolidWorks中的應用,使得尺寸驅動建模能夠針對任何模型方便地進行尺寸數據的更改,適用性得到了極大的提高,這對提高產品設計效率,縮短產品設計周期具有重要意義。

參考文獻:

[1] 張莉.基于solidworks平臺的二次開發技術[J].計算機時代,2003.10:31-32

[2] 江有永,曾忠,范衛高,曹志全.標準件庫的表格化制作[J].機械制造,2003.41(464):26-27

[3] 徐國權,黃志超.基于SolidWorks的參數化設計二次開發研究[J].機械設計與研究,2007.23(1):68-70

[4] Solidworks公司.Solidworks API二次開發[M].機械工業出版社,2005.

[5] 呂曉燕,賈海英,張曉鐘.基于VB對SolidWorks二次開發方法的研究[J].機械設計與制造,2005.3:114-116

主站蜘蛛池模板: 亚洲91在线精品| 成年人视频一区二区| 91亚洲精品国产自在现线| 亚洲高清在线天堂精品| 亚洲男人天堂网址| 亚洲无码免费黄色网址| 国产女人在线视频| 欧美人在线一区二区三区| 久久男人视频| 中文字幕天无码久久精品视频免费| 国产福利免费视频| 久久精品亚洲热综合一区二区| 久久久久久尹人网香蕉 | lhav亚洲精品| 午夜视频日本| 欧美精品v日韩精品v国产精品| 亚洲国产天堂久久九九九| 国内精品视频| 精品99在线观看| 国产丝袜啪啪| 人人91人人澡人人妻人人爽| 在线观看无码av五月花| 亚洲网综合| 国产精品页| 久久综合成人| jijzzizz老师出水喷水喷出| 亚洲欧美成人影院| 凹凸精品免费精品视频| 色婷婷色丁香| 国产成人综合在线观看| 国产波多野结衣中文在线播放| 99久久免费精品特色大片| 2021国产精品自产拍在线观看| 国产成人免费| 色老二精品视频在线观看| 国产乱子伦精品视频| 亚洲精品自拍区在线观看| 国产男女XX00免费观看| 综合久久五月天| 国产69精品久久久久孕妇大杂乱 | 精品一区二区无码av| 久久精品亚洲热综合一区二区| 久久久久亚洲av成人网人人软件| 国产欧美日韩免费| 亚洲综合色婷婷中文字幕| 国产另类视频| 国产精品久久自在自2021| 国产日本一线在线观看免费| 国产精品久久久久久久久| 久久窝窝国产精品午夜看片| 久草性视频| 亚洲成人在线免费观看| 成人午夜免费观看| 国产香蕉国产精品偷在线观看| 色欲国产一区二区日韩欧美| 四虎影视8848永久精品| 久久国产亚洲欧美日韩精品| 人妻中文久热无码丝袜| 国产不卡一级毛片视频| 国产美女一级毛片| 欧美成在线视频| 日韩欧美综合在线制服| 天堂成人av| 国产第八页| 在线观看无码av免费不卡网站 | 啦啦啦网站在线观看a毛片| 国产成人无码播放| 亚洲妓女综合网995久久| 一区二区影院| 亚洲AⅤ波多系列中文字幕| 亚洲无码A视频在线| 国产毛片高清一级国语 | 免费Aⅴ片在线观看蜜芽Tⅴ| 欧美区一区二区三| 国产成人精品三级| 亚洲欧美日韩中文字幕在线| 丝袜亚洲综合| 亚洲美女一级毛片| 毛片国产精品完整版| 99久久国产自偷自偷免费一区| 国产一区二区网站| 久久综合九色综合97网|