亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于SolidWorks尺寸驅(qū)動建模的二次開發(fā)

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

        摘 要: 闡述了SolidWorks二次開發(fā)原理,提出了基于零件尺寸遍歷的尺寸驅(qū)動建模二次開發(fā)方法并詳細(xì)論述了開發(fā)思路。以VBA為開發(fā)工具,運用SolidWorks API技術(shù),實現(xiàn)了此方法在SolidWorks中的應(yīng)用。該方法對傳統(tǒng)的尺寸驅(qū)動建模進(jìn)行了改進(jìn),使尺寸驅(qū)動建模具有普遍適用性,可大大提高產(chǎn)品設(shè)計效率。

        關(guān)鍵詞: 尺寸遍歷; 尺寸驅(qū)動; VBA; 二次開發(fā)

        中圖分類號:TP391 文獻(xiàn)標(biāo)志碼: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是一款優(yōu)秀的三維工程軟件,因其操作簡單、功能強(qiáng)大、具有很好的開放性和兼容性而為廣大機(jī)械設(shè)計工程師所接受。但SolidWorks畢竟是國外軟件,與我國國家標(biāo)準(zhǔn)在很多方面有所不同,多年來,針對SolidWorks軟件的二次開發(fā)工作從未間斷。

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

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

        1 開發(fā)原理

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

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

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

        2 開發(fā)思路

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

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

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

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

        3 開發(fā)示例

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

        ⑵ 主程序關(guān)鍵代碼。

        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

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

        If Not swApp Is Nothing Then

        Set swmodel=swApp.ActiveDoc‘獲得當(dāng)前活動文檔。

        If swmodel=Nothing Then

        ‘判斷是否有文檔被打開

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

        Exit Sub

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

        End If

        str=swmodel.GetTitle

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

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

        Set swFeature=swmodel.FirstFeature

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

        While Not swFeature Is Nothing

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

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

        If Featname=\"原點\" Then

        bltz=True

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

        GoTo tiaozhuan

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

        End If

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

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

        If bltz=True Then

        While bl ‘bl值為true時,即尺寸存在時循環(huán)。

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

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

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

        0.015427,0.03894,0.006118,F(xiàn)alse,0,Nothing,0)

        ‘當(dāng)尺寸被選擇,即尺寸存在時,bl值為true,進(jìn)行下一次遍歷。

        i=i+1

        Wend

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

        體中還原尺寸名稱。

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

        驅(qū)動窗體中還原尺寸名稱。

        j=j+1

        End If

        tiaozhuan:

        Set swFeature=swFeature.GetNextFeature

        ‘獲得下一個特征。

        Wend

        End If

        For i=1 To j-1

        k=k+a(i)

        ‘獲得尺寸數(shù)目的總數(shù)。

        Next

        Frm1.Show 0

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

        End If

        End Sub

        ⑶ 尺寸驅(qū)動窗體代碼。

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

        ……

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

        For i=30 To k+1 Step-1

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

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

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

        Next

        n=1

        For i=1 To j-1

        For m=1 To a(i)

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

        ‘使用標(biāo)簽顯示尺寸名稱。

        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

        ‘在文本框中顯示相應(yīng)的尺寸數(shù)值,供用戶輸入新數(shù)值時參照。

        Next

        End Sub

        Private Sub Cmd1_Click()

        ……‘省略聲明部分。

        For i=1 To k

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

        ‘獲得尺寸名稱并賦值于數(shù)組。

        Next

        For i=1 To k

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

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

        ‘將相應(yīng)文本框中的數(shù)值賦值于相應(yīng)尺寸。

        Next

        swmodel.EditRebuild

        ‘重建模型。

        Set swmodel=Nothing

        ‘釋放對象型變量。

        Set swApp=Nothing

        Unload Frm1 ‘卸載窗體。

        End Sub

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

        4 結(jié)束語

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

        參考文獻(xiàn):

        [1] 張莉.基于solidworks平臺的二次開發(fā)技術(shù)[J].計算機(jī)時代,2003.10:31-32

        [2] 江有永,曾忠,范衛(wèi)高,曹志全.標(biāo)準(zhǔn)件庫的表格化制作[J].機(jī)械制造,2003.41(464):26-27

        [3] 徐國權(quán),黃志超.基于SolidWorks的參數(shù)化設(shè)計二次開發(fā)研究[J].機(jī)械設(shè)計與研究,2007.23(1):68-70

        [4] Solidworks公司.Solidworks API二次開發(fā)[M].機(jī)械工業(yè)出版社,2005.

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

        国产一区二区一级黄色片| 亚洲av纯肉无码精品动漫| 亚洲中文字幕乱码| 亚洲色图视频在线播放| 亚洲最大av在线精品国产| 亚洲av中文无码乱人伦下载| 亚洲av综合色区无码一二三区| 国产v综合v亚洲欧美大天堂 | 免费在线观看视频播放| 男女深夜视频网站入口| 熟女一区二区中文字幕| 欧美精品videosex极品| 麻豆av传媒蜜桃天美传媒| 成在线人免费无码高潮喷水| 亚洲成人一区二区三区不卡| 亚洲欧美中文字幕5发布| 痉挛高潮喷水av无码免费| 亚洲欧美日韩专区一| 精品国产97av一区二区三区| 亚洲三级视频一区二区三区 | 亚洲无码性爱视频在线观看| 日本淫片一区二区三区| 激情综合色五月丁香六月欧美| 亚洲人成网7777777国产| 2022精品久久久久久中文字幕| 国产91精品一区二区麻豆亚洲 | 在线观看午夜视频一区二区| 人妻少妇久久久久久97人妻 | 亚洲精品中文字幕乱码三区| 成全视频高清免费| 中文字幕日本人妻一区| 亚洲日本精品一区二区三区 | 国产乱人伦av在线麻豆a| 日本熟妇色xxxxx欧美老妇| 粗大挺进尤物人妻一区二区| 亚洲中文字幕有综合久久| 澳门蜜桃av成人av| 亚洲精品无码久久久久牙蜜区| 在线观看无码一区二区台湾| 国产精品久久国产精麻豆| 精品乱人伦一区二区三区|