《計(jì)算機(jī)圖形學(xué)基礎(chǔ)與CAD開發(fā)》課件-第5章圖形庫管理系統(tǒng)的設(shè)計(jì)與開發(fā)_第1頁
《計(jì)算機(jī)圖形學(xué)基礎(chǔ)與CAD開發(fā)》課件-第5章圖形庫管理系統(tǒng)的設(shè)計(jì)與開發(fā)_第2頁
《計(jì)算機(jī)圖形學(xué)基礎(chǔ)與CAD開發(fā)》課件-第5章圖形庫管理系統(tǒng)的設(shè)計(jì)與開發(fā)_第3頁
《計(jì)算機(jī)圖形學(xué)基礎(chǔ)與CAD開發(fā)》課件-第5章圖形庫管理系統(tǒng)的設(shè)計(jì)與開發(fā)_第4頁
《計(jì)算機(jī)圖形學(xué)基礎(chǔ)與CAD開發(fā)》課件-第5章圖形庫管理系統(tǒng)的設(shè)計(jì)與開發(fā)_第5頁
已閱讀5頁,還剩109頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第5章AutoCAD圖形庫管理系統(tǒng)設(shè)計(jì)與開發(fā)5.1概述5.2AutoCAD的交互工作界面設(shè)計(jì)5.3AutoCAD的對(duì)話框設(shè)計(jì)5.4AutoCAD的圖形數(shù)據(jù)庫開發(fā)(自學(xué))5.1概述

意義:在工業(yè)設(shè)計(jì)與生產(chǎn)實(shí)踐中,很多企事業(yè)單位經(jīng)常需要使用到各類工程圖形,如標(biāo)準(zhǔn)件、常用件以及專用圖形、標(biāo)注符號(hào)等。因此為了提高設(shè)計(jì)效率和繪圖質(zhì)量、節(jié)省圖形文件的存儲(chǔ)空間,建立具有良好人機(jī)交互性和可視化功能的圖形庫管理系統(tǒng)是一項(xiàng)具有工程實(shí)用價(jià)值的工作。

功能:作為圖形庫管理系統(tǒng),應(yīng)具有實(shí)時(shí)查詢、瀏覽、添加、刪除、編輯和打印輸出圖形文件及其附屬信息的基本功能。5.1.1圖形庫管理系統(tǒng)的組成 1.用戶交互界面用戶交互界面是人與計(jì)算機(jī)之間傳遞、交換信息的媒介和對(duì)話接口,是計(jì)算機(jī)管理系統(tǒng)的重要組成部分,也是圖形庫管理系統(tǒng)的組成部分。用戶界面元素包括菜單、工具欄、狀態(tài)欄、圖標(biāo)、光標(biāo)、對(duì)話框等。本章學(xué)習(xí)常用的界面元素如菜單、工具欄以及對(duì)話框的設(shè)計(jì)開發(fā)方法。界面設(shè)計(jì)遵循原則以用戶為中心的基本設(shè)計(jì)原則順序原則功能原則一致性

頻率原則

重要性原則

面向?qū)ο笤瓌t

2.圖形庫圖形庫是工程CAD中必不可少的組成部分。除了專業(yè)CAD系統(tǒng)提供的標(biāo)準(zhǔn)圖形庫外,用戶常常需要建立適合自己的圖形庫作為CAD系統(tǒng)的補(bǔ)充,常見的圖形庫如各類標(biāo)準(zhǔn)件、常用件、專用圖形和標(biāo)注符號(hào)等。用戶將此類工作中常用的圖形保存在圖形庫管理系統(tǒng)中,一旦需要即可從圖庫中調(diào)用,省略了重畫圖形的過程,提高了工作效率。

根據(jù)不同需求以及圖形特點(diǎn),可采用不同的方法建立圖形庫。

1)固定圖形庫對(duì)于一些形狀固定的圖形,可用子圖或符號(hào)的形式形成固定的圖形庫。此類圖形可單獨(dú)直接調(diào)用。AutoCAD中的形和塊,相當(dāng)于此類圖形庫。

2)程序圖形庫

對(duì)于標(biāo)準(zhǔn)件和常用件等在形狀上相近的圖形,可以利用參數(shù)化繪圖方法編制相應(yīng)的圖形生成程序庫。第4章中基于AutoLISP設(shè)計(jì)的圖形繪制程序即屬于此類圖形庫。3)交互式參數(shù)化設(shè)計(jì)圖形庫

交互式參數(shù)化設(shè)計(jì)圖形庫是通過非編程方法建立圖形庫的方法,是比較先進(jìn)的建立方法之一,比如Pro/Engineering軟件的草圖繪制模塊和AutoCAD2010及更高版本都提供了參數(shù)化設(shè)計(jì)功能,用戶可通過交互式方法直接建立參數(shù)化圖形庫。這種方法通用性好、效率高,但專業(yè)性不足。目前創(chuàng)建和使用還不很方便。設(shè)計(jì)和創(chuàng)建圖形庫時(shí),恰當(dāng)?shù)剡M(jìn)行圖形庫分類是圖形庫管理的重要基礎(chǔ)。

為方便不同類型圖形的查找,同一個(gè)圖形庫可以按照不同性質(zhì)劃分,如機(jī)械零件按照形狀的不同可分為軸套類零件、叉架類零件等,按照功能的不同又可分為傳動(dòng)零件、支撐零件等。設(shè)計(jì)圖形庫時(shí)應(yīng)根據(jù)圖形庫的特點(diǎn)以及應(yīng)用場(chǎng)合來確定圖形庫分類標(biāo)準(zhǔn)。3.

數(shù)據(jù)庫數(shù)據(jù)庫是有一定邏輯聯(lián)系的信息集合,通常以類似于典型電子表格的形式出現(xiàn)。數(shù)據(jù)庫中的列稱為字段,行稱為記錄,數(shù)據(jù)表中的項(xiàng)目稱為元素。

序號(hào)規(guī)格d1d2h133.27.5244.39.8355.3101466.4121.6588.4161.661010.520271213242.58161730392021373102425444平墊圈尺寸表

數(shù)據(jù)庫管理系統(tǒng)(DatabaseManagementSystem,DBMS)是一個(gè)用于管理數(shù)據(jù)庫中數(shù)據(jù)的程序或程序集(軟件)。

常見的數(shù)據(jù)庫管理系統(tǒng)有MicrosoftAccess、dBase、Microsoftexcel、oracle、SQLServer、MicrosoftVisualForPro等,這些都可以與AutoCAD、Pro/Engineering等繪圖和建模系統(tǒng)鏈接,實(shí)現(xiàn)圖形庫管理系統(tǒng)中數(shù)據(jù)的增加、刪除、修改、查詢等管理。

相對(duì)于AutoCAD、Pro/Engineering等軟件系統(tǒng)而言,這些數(shù)據(jù)庫稱為外部數(shù)據(jù)庫。一個(gè)用于圖形庫管理系統(tǒng)的好的數(shù)據(jù)庫,應(yīng)具有冗余性少、數(shù)據(jù)完整性好、維護(hù)工作量低、數(shù)據(jù)添加便捷等特點(diǎn)。

通常數(shù)據(jù)庫設(shè)計(jì)分為概念結(jié)構(gòu)設(shè)計(jì)、邏輯結(jié)構(gòu)設(shè)計(jì)和物理結(jié)構(gòu)設(shè)計(jì)三個(gè)階段。5.1.2AutoCAD的圖形庫管理系統(tǒng)AutoCAD是目前使用最為廣泛的二維CAD軟件,良好的開放性是其得到廣泛應(yīng)用的重要因素。AutoCAD集成了VisualLISP、AutoCADVBA、ObjectARX、NETAPI等多種二次開發(fā)工具,這些為創(chuàng)建和管理CAD圖形庫提供了豐富的手段。1.AutoCAD界面二次開發(fā)在AutoCAD環(huán)境下,設(shè)計(jì)者可以根據(jù)自身需求重新定義繪圖系統(tǒng)的工作界面、功能區(qū)面板、工具欄和菜單(詳見5.2節(jié)),還可以利用VisualLISP、AutoCADVBA、ObjectARX、NETAPI等等開發(fā)工具,開發(fā)基于對(duì)話框的交互界面(詳見5.3、5.4節(jié))。

2.AutoCAD圖形庫創(chuàng)建在AutoCAD環(huán)境下,創(chuàng)建圖形庫的方法很多。創(chuàng)建時(shí)應(yīng)根據(jù)具體問題中圖形庫的應(yīng)用方式選擇適當(dāng)?shù)慕◣旆椒?。?chuàng)建圖形庫方法1)用塊命令(Block)建立2)用形文件(.shp)建立3)用命令組文件(.scr)建立4)用AutoLISP文件(.lsp)建立5)用圖形交換文件(.dxf、.dxb等)建立6)用ADS文件(.exp)建立7)用ARX開發(fā)圖形庫8)用VBA開發(fā)圖形庫

3.AutoCAD的圖形數(shù)據(jù)庫AutoCAD軟件包帶有記錄系統(tǒng)本身和用戶定義的所有函數(shù)和變量的內(nèi)部數(shù)據(jù)庫,該內(nèi)部數(shù)據(jù)庫是按一定結(jié)構(gòu)組織的AutoCAD圖形數(shù)據(jù)的集合,每一個(gè)圖形中最基本的圖形元素都是以實(shí)體數(shù)據(jù)和符號(hào)存在其圖形數(shù)據(jù)庫中,用戶可提取、更新圖形數(shù)據(jù)庫的內(nèi)容。AutoCAD還可以訪問外部數(shù)據(jù)庫中的數(shù)據(jù),將其與AutoCAD的圖形對(duì)象聯(lián)系。AutoCAD提供了以下與外部數(shù)據(jù)庫的連通工具:(1)數(shù)據(jù)庫連接管理器(dbConnectManager):能將各種數(shù)據(jù)庫對(duì)象與AutoCAD圖形聯(lián)系在一起。(2)外部配置功能(ExternalConfigurationUtility):使AutoCAD可以從一個(gè)數(shù)據(jù)庫系統(tǒng)中獲得數(shù)據(jù)。(3)數(shù)據(jù)視圖窗口(DataViewWindow):可在AutoCAD系統(tǒng)中顯示一個(gè)數(shù)據(jù)庫的記錄。(4)查詢編輯器(QureyEditor):用戶可構(gòu)造、保存和執(zhí)行SQL查詢。(5)鏈接選擇操作(LinkSelectOperation):可建立基于查詢和圖形對(duì)象的重復(fù)選擇集。5.2AutoCAD的交互工作界面設(shè)計(jì)

AutoCAD為用戶提供了菜單、功能區(qū)選項(xiàng)卡、工具欄等多種交互工作界面形式,使用戶可方便地使用軟件的各種功能,如圖5.1所示。同時(shí),還為用戶提供了根據(jù)需要自行設(shè)計(jì)交互工作界面的接口,為圖形庫管理系統(tǒng)提供了的必要的交互手段。

本節(jié)主要介紹菜單和工具欄兩種常用的交互工作界面設(shè)計(jì)方法。菜單欄功能區(qū)工具欄面板選項(xiàng)卡圖5.1AutoCAD的工作界面5.2.1AutoCAD菜單文件設(shè)計(jì)菜單是標(biāo)準(zhǔn)的Windows應(yīng)用程序不可缺少的組成部分,它以分組的形式組織多個(gè)命令或操作,為用戶靈活操作應(yīng)用程序提供了便捷的手段。下拉式菜單是使用非常普遍的一種菜單交互方式。AutoCAD下拉菜單出現(xiàn)在應(yīng)用程序窗口標(biāo)題欄下的菜單欄中,它由主菜單、子菜單以及子菜單中的菜單項(xiàng)和菜單項(xiàng)分隔條組成。主菜單子菜單項(xiàng)菜單項(xiàng)分組分割線菜單快捷鍵主菜單項(xiàng)圖5.2菜單界面示例

設(shè)計(jì)下拉式菜單通常應(yīng)遵循以下原則:1)根據(jù)用戶任務(wù)或需求組織菜單。2)給每個(gè)菜單和菜單選項(xiàng)設(shè)置一個(gè)意義明了的標(biāo)題。3)按照估計(jì)的菜單項(xiàng)使用頻率、邏輯順序或字母順序組織菜單項(xiàng)。4)在菜單項(xiàng)的邏輯組之間放置分隔線。5)如有必要給每個(gè)菜單和菜單選項(xiàng)設(shè)置熱鍵或鍵盤快捷鍵。6)將菜單上菜單項(xiàng)的數(shù)目限制在一個(gè)屏幕之內(nèi),如果超過了一屏,則應(yīng)為其中一些菜單項(xiàng)創(chuàng)建子菜單。

1.菜單文件AutoCAD的菜單文件共有6種類型,包括“.MNS”--原始菜單文件,“.MNC”--菜單編譯文件,“.MNU”--主菜單樣本文件,“.MUR”--菜單資源文件,“.mnl”--LISP菜單文件,“.mnd”--菜單定義文件。最常見的是MNU菜單文件。AutoCAD軟件包自身帶有一個(gè)標(biāo)準(zhǔn)菜單文件"acad.mnu"。當(dāng)啟動(dòng)AutoCAD時(shí),該標(biāo)準(zhǔn)菜單文件自動(dòng)被加載并顯示在AutoCAD的用戶界面中。用戶也可以建立自己的菜單文件。

2.

菜單文件的結(jié)構(gòu)和語法

AutoCAD采用層次結(jié)構(gòu)來管理菜單文件。

1)區(qū)域標(biāo)簽

菜單文件可以劃分多個(gè)區(qū)域,每個(gè)區(qū)域有一個(gè)特定、唯一的區(qū)域標(biāo)簽來區(qū)分和定義不同的交互形式。菜單文件的區(qū)域標(biāo)簽由三個(gè)星號(hào)“***”和一個(gè)區(qū)域標(biāo)簽名組成,其格式為:

***section_name

(注:***代表區(qū)域標(biāo)簽的標(biāo)識(shí)符;section_name代表區(qū)域標(biāo)簽名)

標(biāo)簽區(qū)域定義標(biāo)簽區(qū)域定義***MENUGROUP菜單文件組名***TOOLBARS工具欄***SCREEN屏幕菜單***POPn下拉式菜單***IMAGE圖像菜單***ACCELERATORS快捷菜單***HELPSTRINGS幫助文字串和工具欄提示***BUTTONSn定點(diǎn)設(shè)備的按鍵菜單表5.1部分區(qū)域標(biāo)簽及說明

2)子菜單

菜單文件中的第二層結(jié)構(gòu)即子菜單,用兩個(gè)星號(hào)“**”和名稱來標(biāo)識(shí),每個(gè)菜單區(qū)域可由一個(gè)或多個(gè)部分定義組成。每個(gè)部分包括與菜單選項(xiàng)有關(guān)的標(biāo)簽和指示,其格式如下:**subname(注:**代表子菜單區(qū)域標(biāo)簽的標(biāo)識(shí)符;subname代表子菜單區(qū)域標(biāo)簽名))

3)菜單項(xiàng)的定義菜單項(xiàng)的作用是,當(dāng)用戶拾取菜單項(xiàng)時(shí),該菜單項(xiàng)的內(nèi)容(除菜單標(biāo)題外)作為當(dāng)前輸入。一個(gè)完整的菜單項(xiàng)包括三部分:標(biāo)簽標(biāo)識(shí)符、標(biāo)簽和命令宏。

例:繪制直線的菜單項(xiàng):ID_Line[&Line]^C^C_lineID_Line是菜單項(xiàng)的標(biāo)簽標(biāo)識(shí)符;標(biāo)簽標(biāo)識(shí)符可以省略;[&Line]是顯示在屏幕菜單中的標(biāo)簽內(nèi)容;^C^C_line是當(dāng)用戶拾取該菜單項(xiàng)時(shí)所執(zhí)行的命令宏。其中,^C^C表示取消當(dāng)前的命令兩次;_line表示直線命令,拾取該菜單項(xiàng)后會(huì)執(zhí)行繪制直線的命令。命令宏可以給出具體的輸入值,輸入項(xiàng)用空格或分號(hào)隔開。例:[A3]^C^CLIMITS0,0420,297ZOOMA該菜單項(xiàng)是定義了一個(gè)繪圖界面為A3圖幅、視圖縮放模式為A的菜單項(xiàng)。其中,[A3]是在屏幕菜單中的標(biāo)簽內(nèi)容,^C^CLIMITS0,0420,297ZOOMA為命令宏,表示取消當(dāng)前的命令兩次,執(zhí)行LIMITS命令,設(shè)定其繪圖界限左下角點(diǎn)0,0和右上角點(diǎn)420,297,執(zhí)行ZOOM命令,輸入A,把繪制的整個(gè)圖形全部顯示在繪圖區(qū)內(nèi)。[Exit]^C該菜單項(xiàng)是定義了一個(gè)退出命令。其中,[Exit]是在屏幕菜單中的標(biāo)簽內(nèi)容,命令宏^C表示取消當(dāng)前的命令。

3.用戶自定義菜單的編寫用戶自定義菜單文件的擴(kuò)展名是*.mnu,可以使用任何文字編輯器編寫。編寫菜單文件之前需要進(jìn)行菜單設(shè)計(jì),使其對(duì)應(yīng)的命令組按照所要求的布局方式排列?!纠?.1】按照?qǐng)D5.3,編寫AutoCAD下拉式菜單。下面是圖5.3對(duì)應(yīng)的下拉菜單文件源程序:(菜單文件中,“//”后面文字表示說明)****MENUGROUP=MYMENU //定義菜單文件名為MYMENU***POP1 //第一個(gè)區(qū)域標(biāo)簽(下拉式菜單區(qū)域)**曲線 //定義曲線子菜單ID_CURVW[&曲線]

//曲線菜單標(biāo)簽[->正弦曲線] //正弦曲線是一個(gè)層疊子菜單

[單條曲線]^C^CSSIN //單條正弦曲線

[<-多條曲線]^C^CMSIN //多條正弦曲線[橢圓]^C^CECLIPSE //曲線菜單下的橢圓[阿基米德螺旋線]^C^C_ARCHIMEDEAN//曲線菜單下的阿基米德螺旋線[->玫瑰線] //玫瑰線是一個(gè)層疊子菜單

[單條玫瑰線]^C^CROSE //單條玫瑰線

[<-多條玫瑰線]^C^CMROSE //多條玫瑰線[->自由曲線] //自由曲線是一個(gè)層疊子菜單

[二次B樣條曲線]^C^CBCURVE2

[三次B樣條曲線]^C^CBCURVE3[二次BEZIER曲線]^C^CBCURVE2[<-二次BEZIER曲線]^C^CBCURVE3[--]***POP2 //第二個(gè)區(qū)域標(biāo)簽**標(biāo)準(zhǔn)件 //定義標(biāo)準(zhǔn)件子菜單ID_STW[&標(biāo)準(zhǔn)件] //標(biāo)準(zhǔn)件菜單標(biāo)簽[螺栓]^C^C^DRAWSCREW1

//螺栓[->螺釘] //螺釘是一個(gè)層疊子菜單

[開槽圓柱頭螺釘]^C^CDRAWSCREW21[<-沉頭螺釘]^C^CDRAWSCREW22[雙頭螺栓]^C^C^DRAWSCREW3 //雙頭螺柱[螺母]^C^CDRAWNUT //螺母[墊圈]^C^CDRAWFWASHER //墊圈[鍵]^C^CDRAWFKEY //鍵[滾動(dòng)軸承]^C^CDRAWBEARING //鍵

4.加載/卸載菜單文件菜單文件的加載分為基本菜單加載和局部菜單加載兩種情況。

基本菜單是菜單界面的基礎(chǔ),如果用戶將某個(gè)菜單文件作為基本菜單加載,則系統(tǒng)自動(dòng)取消原有的菜單文件,即新的基本菜單替換原來的菜單。基本菜單加載可用AutoCAD的Menu命令全局加載。AutoCAD還提供了Menuload命令,它是從基本菜單中裝載/卸載局部菜單,該命令保證基本菜單和新增加的菜單同時(shí)存在,而不會(huì)卸載所有菜單。圖5.4加載/卸載菜單對(duì)話框

圖5.5菜單局部加載后界面顯示5.2.2AutoCAD自定義用戶界面設(shè)計(jì)AutoCAD的自定義工作界面可通過自定義用戶界面(CUI)編輯器來實(shí)現(xiàn),如圖5.6所示,從AutoCAD中打開自定義用戶界面,就可自定義菜單、工作空間、功能區(qū)選項(xiàng)卡、工具欄,還可以創(chuàng)建與自定義命令關(guān)聯(lián)的菜單項(xiàng)、工具欄。基于XML的CUIx文件取代了AutoCAD2010之前版本中的自定義文件和菜單文件,使得工作界面的定義更加直觀、方便。圖5.6AutoCAD自定義用戶界面

1 菜單欄自定義設(shè)計(jì)2. 功能區(qū)選項(xiàng)卡設(shè)計(jì)系統(tǒng)功能區(qū)由三個(gè)部分組成,分別是功能區(qū)選項(xiàng)卡、功能區(qū)面板、功能區(qū)圖標(biāo)命令

圖5.8功能區(qū)下的選項(xiàng)卡圖5.9新建“繪圖”功能區(qū)選項(xiàng)卡圖5.10新建功能區(qū)面板圖5.11新建面板的布局圖5.12面板移入功能區(qū)選項(xiàng)卡圖5.13打開工作空間圖5.14選擇顯示項(xiàng)目圖5.15繪圖功能區(qū)及其選項(xiàng)卡的顯示結(jié)果3. 工具欄設(shè)計(jì)在設(shè)計(jì)過程中,設(shè)計(jì)人員常常需要足夠的繪圖區(qū)域進(jìn)行設(shè)計(jì),所以常常將功能區(qū)面板和菜單欄隱藏,采用活動(dòng)工具欄來顯示需要使用的繪圖或功能菜單。圖5.16新建工具欄圖5.17添加“繪圖工具欄”的命令圖5.18工具欄顯示結(jié)果5.3AutoCAD的對(duì)話框設(shè)計(jì)5.3.1對(duì)話框特點(diǎn)與組成5.3.2對(duì)話框定義文件5.3.3對(duì)話框控件及屬性5.3.4對(duì)話框驅(qū)動(dòng)程序設(shè)計(jì)

5.3.1對(duì)話框特點(diǎn)與組成1.特點(diǎn)設(shè)計(jì)和使用均較容易。只能供AutoCAD應(yīng)用程序所使用,功能和機(jī)制上不如Windows對(duì)話框。PDB對(duì)話框由對(duì)話框定義文件和驅(qū)動(dòng)程序兩部分組成。其中,對(duì)話框定義文件用于定義對(duì)話框的外觀,包括對(duì)話框的風(fēng)格、位置、尺寸、內(nèi)部控件及控件初值等;對(duì)話框驅(qū)動(dòng)程序用于管理對(duì)話框的顯示、與用戶的交互、關(guān)閉以及獲取對(duì)話框中控件值。2.對(duì)話框的組成圖5.19標(biāo)準(zhǔn)AutoCAD對(duì)話框

5.3.2對(duì)話框定義文件

對(duì)話框定義文件是一個(gè)文本文件,其后綴為“.dcl”。它是采用對(duì)話框控制語言(DialogControlLanguage,簡(jiǎn)稱DCL)實(shí)現(xiàn)。

1.對(duì)話框文件分類

不可更改的系統(tǒng)DCL文件acad.dcl——存放AutoCAD系統(tǒng)定義的對(duì)話框base.dcl——存放為用戶預(yù)定義的常用對(duì)話框控件信息,其它所有DCL文件加載時(shí)都要自動(dòng)引用用戶自定義DCL文件,其組成包括:對(duì)話框的定義引用其他DCL文件典型控件及行、列組合控件的定義2.DCL語法

DCL語法包括了定義控件、引用控件、屬性賦值以及注釋。1)定義控件定義控件的基本格式如下:name:item1[:item2:item3…]{attribute1=value1;attribute2=value2;

…;

}注意:1)區(qū)分字母大小寫。2)新定義的控件名稱只能由字母、數(shù)字或下劃線組成,并且必須以字母開始?!纠?.2】如圖5.20所示,用DCL定義

一個(gè)顯示“Helloworld!”的對(duì)話框。

其對(duì)應(yīng)的DCL源代碼如下:

sample:dialog{//定義名字為sample的對(duì)話框

label=“第一個(gè)對(duì)話框?qū)嵗?//定義對(duì)話框標(biāo)題

:text{

//引用文本控件

label=“Helloworld!”;//定義文本框的標(biāo)簽

alignment=centered;//按鈕控件居中對(duì)齊

} //文本控件定義結(jié)束

ok_only; //引用確定控件

} //對(duì)話框定義結(jié)束2)引用控件引用控件就是引用已定義的控件類型。在引用控件過程中可以改變或增加控件的屬性,但不必列出不想改變的屬性,由于DCL可繼承屬性,因此在建立DCL文件時(shí),絕大多數(shù)情況下是引用預(yù)定義的控件。格式1:只指定名稱。常常是指對(duì)base.dcl文件中定義的ok_cancel、ok_only、spacer等組件的引用。例如【例5.2】中的“ok_only;”,引用確定控件。2)引用控件格式2:引用已定義的控件,可以添加新定義的屬性或?qū)^承控件的屬性重新賦值。如引用text、button、edit_box等控件時(shí)常采用這種格式。:text{label="Helloworld!";alignment=centered;}3)屬性賦值

在控件定義或引用的大括號(hào)中,給屬性賦值。

屬性賦值的格式為:attribute=value;其中,attribute是屬性名,value為賦給屬性的值,分號(hào)“;”表示賦值結(jié)束。賦值時(shí)必須注意屬性值的類型,例如:label="第一個(gè)對(duì)話框?qū)嵗?;4)注釋適用于單行的代碼注釋。

形式為://注釋文字

其中“//”至行尾的部分為注釋部分,如【例5.2】。適用于行內(nèi)或多行的注釋

形式為:/*注釋文字*/其中/*與*/之間為注釋部分。編譯時(shí)系統(tǒng)忽略注釋部分。3.對(duì)話框文件的編寫和顯示DCL定義的對(duì)話框文件可以在VisualLISP文本編輯器中編寫和顯示。1)編寫對(duì)話框文件在VisualLISP中“文件”→“新建文件”命令來新建一個(gè)空白文件,代碼編寫好后將其保存為DCL文件?;蛘哌x擇“文件”→“打開文件”命令來打開已有的DCL文件進(jìn)行編輯。2)顯示對(duì)話框在VisualLISP中選擇“工具”→“界面工具”→“預(yù)覽編輯器中的DCL”命令,可顯示編輯器中定義的對(duì)話框。DCL文件中有多個(gè)對(duì)話框定義時(shí),可以在圖5.21(a)所示的下拉列表框中選擇要預(yù)覽的對(duì)話框名稱,圖5.21對(duì)話框的顯示(a)

(b)5.3.3對(duì)話框控件及屬性1.控件類型類型組成控件預(yù)定義動(dòng)作行為的控件button、edit_box、image_button、list_box、popup_list、radio_button、slider、toggle組合類控件column、boxed_column、radio_column、boxed_radio_column、row、boxed_row、radio_row、boxed_radio_row、dialog裝飾性和信息類控件image、text、text_part、concatenation、paragraph、spacer預(yù)定義標(biāo)準(zhǔn)控件ok_only、ok_cance、errtile、ok_cancel_help、ok_cancel、help_errtile、ok_cancel_help_info2.控件的屬性控件的外觀和功能由該控件的屬性確定。每一個(gè)控件有多個(gè)屬性,每個(gè)屬性都有一個(gè)屬性名和值。多數(shù)的屬性有它的默認(rèn)值??丶念愋筒煌浒膶傩约皩傩缘臄?shù)量也不同。AutoCAD為用戶預(yù)定義了35個(gè)屬性。

常見的控件屬性label指定顯示在控件中的文字。該屬性為帶引號(hào)的字符串。edit_limit指定在編輯框中允許輸入的最大字符數(shù),默認(rèn)為132。edit_width以平均字符寬度為單位指定可以在編輯框中編輯或輸入的文本寬度。height指定控件的最小高度,數(shù)值類型是整數(shù)型或?qū)崝?shù)型。width指定控件的最小寬度。key指定一個(gè)ascii碼名稱,其值為字符串,區(qū)分大小寫,沒有默認(rèn)值。對(duì)話框中各控件的key值必須唯一,因?yàn)閼?yīng)用程序通過該屬性引用指定的控件。value指定控件的初始狀態(tài)值。aspect_radio指定圖像的寬高比,若值為0,則默認(rèn)圖形占據(jù)整個(gè)控件。

3.常見的對(duì)話框控件設(shè)計(jì)1)對(duì)話框設(shè)計(jì)(dialog)對(duì)話框本身也可以看作是一種控件,它是對(duì)話框的主體,不能單獨(dú)使用,且至少要有一個(gè)確認(rèn)(OK)或取消(Cancel)按鈕。它的類型是dialog,有initial_focus、label、value三個(gè)屬性。標(biāo)簽是對(duì)話框的標(biāo)題,屬性value也可以作為標(biāo)題,這樣的標(biāo)題在程序運(yùn)行時(shí)可以被改變。initial_focus用于指定初始聚焦的控件。

【例5.1】是一個(gè)典型的對(duì)話框?qū)嵗?)按鈕設(shè)計(jì)(button)按鈕適用于立即產(chǎn)生可視的操作,如退出對(duì)話框、彈出子對(duì)話框及其它特定操作。每個(gè)對(duì)話框至少包含一個(gè)OK按鈕(或功能相當(dāng)?shù)目丶?。按鈕的類型是button,具有action、alignment、fixed_height、fixed_width、height、is_cancel、is_default、is_enabled、is_tab_stop、key、label、mnemonic、width共13個(gè)屬性。它的標(biāo)簽(label)顯示在按鈕上。若要?jiǎng)?chuàng)建與OK等價(jià)的控件,其關(guān)鍵字必須為"accept",并將其屬性is_default設(shè)定為true(真)。dia_btn:dialog{label="按鈕對(duì)話框";:button{ //引用按鈕控件

label="按鈕"; //定義按鈕的標(biāo)簽

key="ok"; //定義應(yīng)用程序時(shí)使用控件名

is_default=true;//當(dāng)按接收鍵(如Enter鍵)時(shí)默認(rèn)激活

alignment=centred; //按鈕控件居中對(duì)齊

}ok_cancel;} //按鈕控件定義結(jié)束3)編輯框設(shè)計(jì)(edit_box)編輯框用于輸入字符串。編輯框的標(biāo)簽顯示在該框的左邊,它的默認(rèn)寬度為12個(gè)字符,當(dāng)輸入的字符多于12時(shí),文本自動(dòng)向左滾動(dòng),框內(nèi)的字符串即為編輯框的值(value)。dia_ed:dialog{label="編輯對(duì)話框";:edit_box{label="直徑D:";edit_width=10;value=100;key="p_d";}ok_cancel;}4)圖像按鈕設(shè)計(jì)(ImageButton)圖像按鈕將圖像顯示在按鈕上。圖像由AutoLISP程序確定,它的類型是image_button。有action、alignment、allow_accept、aspect_ratio、color、fixed_height、fixed_width、height、is_enabled、is_tab_stop、key、mnemonic、width13個(gè)屬性。dia_imb:dialog{label="圖像按鈕";:image_button{key="test_image_button";width=10;aspect_ratio=1.5;}ok_cancel;}ok_cancel;}5)列表框設(shè)計(jì)(ListBbox)列表框的類型是list_box,具有action、alignment、allow_accept、fixed_height、fixed_width、height、is_enabled、is_tab_stop、key、label、list、mnemonic、multiple_select、tabs、value、width16個(gè)屬性。列表的標(biāo)簽顯示在列表框的上方作為文字說明。列表的值是被選中的文本行的序號(hào),序號(hào)從0開始列表的標(biāo)簽顯示在列表框的上方作為文字說明。列表的值是被選中的文本行的序號(hào),序號(hào)從0開始。屬性multiple_select為true時(shí),允許同時(shí)選取框內(nèi)的多行文本。屬性multiple_select為true時(shí),允許同時(shí)選取框內(nèi)的多行文本。dia_lb:dialog{label="列表框按鈕";:list_box{label="單位";list="m\ncm\nmm\nnm\ninch\n";//“\n”表示換行。

value="2";key="unit_list";height=8;}ok_cancel;}6)下拉列表框設(shè)計(jì)(PopupList)下拉列表的類型是popup_list,具有action、alignment、edit_width、fixed_height、fixed_width、height、is_enabled、is_tab_stop、key、label、list、mnemonic、tabs、value、width15個(gè)屬性。下拉列表具有編輯框和列表框的兩個(gè)特點(diǎn),初始狀態(tài)類似于一個(gè)編輯框,標(biāo)簽顯示在框的左邊,框內(nèi)只有一行字符和一個(gè)向下的箭頭。單擊框內(nèi)箭頭,將彈出一個(gè)列表。選取表內(nèi)文本之后,列表自動(dòng)關(guān)閉,在編輯框內(nèi)顯示選中的內(nèi)容。下拉列表的值是被選中的文本行的序號(hào)。dia_pl:dialog{spacer_1;label="下拉列表按鈕";:popup_list{label="單位";list="m\ncm\nmm\nnm\ninch\n";key="unit_list";width=20;}ok_cancel;}7)單選按鈕(RadioButton)單選按鈕的類型是radio_button,具有action、alignment、fixed_height、fixed_width、height、is_enabled、is_tab_stop、key、label、mnemonic、value、width12個(gè)屬性。單選按鈕不能單獨(dú)使用,必須由多個(gè)這樣的按鈕以行或列的形式組成一組,同組的按鈕之間是互鎖的,只能從中選取一個(gè)。單選按鈕的標(biāo)簽顯示在按鈕的右邊。dia_rbtn:dialog{spacer_1;label="單選按鈕對(duì)話框";:radio_button{key="unit_mm";label="毫米";}:radio_button{key="unit_inch";label="英寸";}ok_cancel;}8)組合控件設(shè)計(jì)組合類控件可以將相關(guān)的控件組合在起,使得對(duì)話框的布局更加美觀、合理,操作更加方便。控件的行或列稱為控件組。形成列控件組的有列、加框列、互鎖列和互鎖加框列;形成行控件組的有行、加框行、互鎖列和互鎖加框列。列組件的源程序代碼如下::column{:edit_box{label="x=";width=12;key="x";mnemonic="x";value=0.0;}:edit_box{label="y=";width=12;key="y";mnemonic="y";value=0.0;}:button{label="光標(biāo)拾取<";key="pick";

}}行組件、加框列和加框行只需將代碼中column改為row、boxed_column和boxed_row即可?;ユi列的源程序代碼如下::radio_column{:radio_button{key="unit_mm";label="毫米";value=1;}:radio_button{key="unit_inch";label="英寸";}:radio_button{key="unit_m";label="米";}}互鎖行、加框互鎖列和加框互鎖行只需將代碼中radio_column改為radio_row、boxed_radio_column和boxed_radio_row即可。9)預(yù)定義標(biāo)準(zhǔn)控件(1)確定按鈕(ok_only)。單個(gè)的確定按鈕,關(guān)鍵字為"accept",用于確認(rèn)施加在對(duì)話框上的操作,如圖5.21(b)所示的按鈕。(2)確認(rèn)和取消按鈕(ok_cancel)。確認(rèn)和取消兩個(gè)按鈕組成一行,確定按鈕的關(guān)鍵字同前,取消按鈕的關(guān)鍵字為"cancel"。確定按鈕用于放棄施加在對(duì)話框上的操作。如圖5.28各圖中的確定和取消按鈕顯示。(3)確認(rèn)、取消和幫助控件(ok_cancel_help)。確認(rèn)、取消和幫助三個(gè)按鈕組成的行,確認(rèn)、取消按鈕的關(guān)鍵字同前,幫助按鈕的關(guān)鍵字為"help"。(4)出錯(cuò)信息控件(errtile)。屬于文本類型的控件,其標(biāo)簽為空,關(guān)鍵字為"error"。顯示該控件屬性value的內(nèi)容。屬性value的值由AutoLISP程序確定。(5)確認(rèn)、取消、幫助和出錯(cuò)控件(ok_cancel_help_errtile)確認(rèn)、取消、幫助和出錯(cuò)四個(gè)按鈕組成的行,出錯(cuò)新的屬性value的值同樣由AutoLISP程序確定,寫在該行的下面。出錯(cuò)控件及確定按鈕的源代碼如下:error:dialog{label="出錯(cuò)信息";

errtile;

ok_only;

}其中,對(duì)話框中顯示的文本“長(zhǎng)度必須大于0!”是AutoLISP驅(qū)動(dòng)對(duì)話框程序中用set_tile函數(shù)為其屬性value賦值,即:(set_tile"error""長(zhǎng)度必須大于0!")。ok_cancel_help_errtile中的出錯(cuò)信息也是這樣賦值。4.對(duì)話框控件設(shè)計(jì)實(shí)例設(shè)計(jì)一個(gè)對(duì)話框不僅要考慮它的功能是否滿足要求,還應(yīng)該滿足交互設(shè)計(jì)的相關(guān)準(zhǔn)則,如美觀性、便于操作?!纠?.3】為圖5.30(a)所示鍵槽的斷面圖添加參數(shù)數(shù)據(jù)輸入對(duì)話框(如圖5.30(b)所示),并編寫對(duì)應(yīng)的對(duì)話框程序。(b)(a)圖5.30鍵槽斷面圖及參數(shù)數(shù)據(jù)輸入對(duì)話框解:其對(duì)話框的程序如下:

section:dialog{label="繪制鍵槽軸斷面圖形";:row{ //行控件

:boxed_column{ //加框列控件

label="定型尺寸:";:edit_box{ //編輯框控件

label="直徑D:";edit_width=8;mnemonic="D";key="p_dia";}:edit_box{label="鍵槽寬W:";mnemonic="W";edit_width=8;key="p_w";}:edit_box{label="鍵槽深t:";mnemonic="W";edit_width=8;key="p_t";}}:boxed_column{label="定位尺寸:";:edit_box{label="橫坐標(biāo)X:";edit_width=8;mnemonic="X";key="p_x";}

:edit_box{label="縱坐標(biāo)Y:";mnemonic="Y";edit_width=8;key="p_y";}:button{//按鈕控件

label="拾取點(diǎn)>";key="p_p";}:edit_box{label="旋轉(zhuǎn)角a:";edit_width=8;value=0;//旋轉(zhuǎn)角默認(rèn)值為0mnemonic="a";key="p_angle";}}}ok_cancel;//確定取消控件

}5.3.4對(duì)話框驅(qū)動(dòng)程序設(shè)計(jì)對(duì)話框文件僅描述了對(duì)話框的結(jié)構(gòu)和外觀,要使對(duì)話框發(fā)揮作用則必須利用驅(qū)動(dòng)程序。驅(qū)動(dòng)程序一般由主調(diào)用函數(shù)和回調(diào)函數(shù)組成。主調(diào)用函數(shù)用于對(duì)話框的裝入、顯示、交互及清除,回調(diào)函數(shù)一般用于對(duì)對(duì)話框中各控件的值的提取等操作。AutoCAD的對(duì)話框驅(qū)動(dòng)程序可由AutoLISP、AutoCADVBA、ObjectARX、NETAPI等方式完成。1.對(duì)話框主調(diào)用函數(shù)設(shè)計(jì)對(duì)話框驅(qū)動(dòng)程序的流程圖

表5.3列出了對(duì)話框的主調(diào)用功能函數(shù)。函數(shù)名稱功能闡述load_dialog加載一個(gè)對(duì)話框文件new_dialog將對(duì)話框顯示到屏幕上action_tile指定控件的相應(yīng)動(dòng)作start_dialog激活由new_dialog函數(shù)顯示的對(duì)話框,等待并接

受用戶的操作done_dialog隱藏對(duì)話框unload_dialog卸載一個(gè)與參數(shù)相關(guān)聯(lián)的對(duì)話框文件,釋放該對(duì)話框所占存儲(chǔ)空間

(1)(load_dialogdclfilename)加載一個(gè)對(duì)話框文件。參數(shù)dclfilename為對(duì)話框文件名(可省略擴(kuò)展名.dcl),若未指定文件路徑,該函數(shù)默認(rèn)AutoCAD的搜索路徑。若加載成功返回一個(gè)大于零的整數(shù)。例如:(setqdcl_id(load_dialog"d:\\user\\test.dcl"))若返回值大于0,表示加載成功;否則,加載失敗。返回值類似于文件標(biāo)識(shí)號(hào),是顯示對(duì)話框、卸載對(duì)話框文件的主要參數(shù),應(yīng)該將其賦給一個(gè)變量dcl_id,作為其它函數(shù)調(diào)用的參數(shù)。

(2)(unload_dialogdcl_id)卸載一個(gè)與dcl_id相關(guān)聯(lián)的對(duì)話框文件,釋放該對(duì)話框所占存儲(chǔ)空間。參數(shù)dcl_id為load_dialog函數(shù)的返回值。不論卸載是否成功,返回值均為nil。例如:(unload_dialogdcl_id)(3)(new_dialogdlgnamedcl_id[action[screen_pt]])

將對(duì)話框顯示到屏幕上。參數(shù)dlgname是對(duì)話框的名字,dcl_id存放了加載對(duì)話框文件成功時(shí)的返回值,action是該對(duì)話框的動(dòng)作,screen_pt是確定對(duì)話框左上角在屏幕上位置的二維點(diǎn)(以象素為單位)。Action和screen_pt都是可選項(xiàng),但不能只選后者。對(duì)話框在屏幕上的默認(rèn)位置是在屏幕的中央。如果調(diào)用成功,則返回T。

例如:下面表達(dá)式將名字為"yuan"的對(duì)話框顯示在屏幕的中央,參數(shù)dcl_id為load_dialog函數(shù)的返回值。(new_dialog"yuan"dcl_id)

例如:下面表達(dá)式將名字為"rect"的對(duì)話框顯示在屏幕的左上角,并執(zhí)行設(shè)置變量a的值為1的活動(dòng),參數(shù)dcl_id為load_dialog函數(shù)的返回值。(new_dialog"rect"dcl_id"(setqa1)"‘(00))(4)(start_dialog)

激活由new_dialog函數(shù)顯示的對(duì)話框,等待并接受用戶的操作。此后對(duì)話框一直保持著激活狀態(tài)。如果某一動(dòng)作表達(dá)式調(diào)用了done_dialog函數(shù),該函數(shù)才返回done_dialog函數(shù)的狀態(tài)值。在調(diào)用start_dialog之前一定要檢測(cè)new_dialog的返回值是否為T,否則會(huì)發(fā)生不可預(yù)料的結(jié)果。

(5)(done_dialog[status])

隱藏對(duì)話框,參數(shù)status是一個(gè)整數(shù),是提供給start_dialog函數(shù)的返回值。該函數(shù)的返回值為一個(gè)二維表表示的點(diǎn)的坐標(biāo)。該坐標(biāo)為對(duì)話框的左上角相對(duì)于屏幕左上角的位置(以像素為單位)。

(6)(action_tilekeyaction_expression)指定控件的相應(yīng)動(dòng)作。參數(shù)key為控件的關(guān)鍵字,action_expression為控件的動(dòng)作表達(dá)式,動(dòng)作表達(dá)式可不止一個(gè)。例如:(action_tile"accept"""(usrt_function)(done_dialog1)")此例定義"確認(rèn)"按鈕的活動(dòng)是調(diào)用usrt_function函數(shù)、以1為狀態(tài)值關(guān)閉對(duì)話框。usrt_function是用戶自定義的函數(shù)。注意,該函數(shù)只是為具有活動(dòng)(action)屬性的控件與代表動(dòng)作的表達(dá)式或函數(shù)建立聯(lián)系,至于動(dòng)作的具體內(nèi)容是由應(yīng)用程序確定的。由于動(dòng)作是因?yàn)檫x擇了控件之后而引發(fā)的,所以代表動(dòng)作的表達(dá)式或函數(shù)通常被稱為回調(diào)函數(shù)。【例5.4】用AutoLISP編寫驅(qū)動(dòng)Helloworld!對(duì)話框的應(yīng)用程序。(a)解:其對(duì)話框驅(qū)動(dòng)程序如下:(defunC:hello()(setqdcl_id(load_dialog"D:\\AutoLISP\\helloworld\\hello.dcl"));加載DCL文件

(if(not(new_dialog"hello"dcl_id));初始化名為hello的DCL(progn;如果失敗,執(zhí)行以下操作

(princ"\nCannotloadhello.dcl");屏幕打印出信息

(exit);退出

))(action_tile"accept""(done_dialog)");初始化成功后,點(diǎn)擊“確定”按鈕,執(zhí)行關(guān)閉對(duì)話框操作

(start_dialog);啟動(dòng)顯示對(duì)話框

(unload_dialogdcl_id);卸載對(duì)話框

(princ);靜默退出)(a)(b)圖5.31驅(qū)動(dòng)對(duì)話框的顯示結(jié)果在VisualLISP環(huán)境下,將上述代碼輸入并存儲(chǔ)為“hello.lsp”,按照第4章方法加載成功后,從AutoCAD命令行輸入hello,若初始化成功,就會(huì)出現(xiàn)如圖5.31(a)所示的對(duì)話框,點(diǎn)擊“確定”按鈕,對(duì)話框就會(huì)關(guān)閉;若初始化失敗,此時(shí)dcd_id小于0,屏幕出現(xiàn)“Cannotloadhello.dcl”的提示信息,如圖5.31(b)所示。2.對(duì)話框控件驅(qū)動(dòng)設(shè)計(jì)對(duì)話框本身并不具備向應(yīng)用程序傳遞數(shù)據(jù)的功能。用戶的輸入數(shù)據(jù)或操作作為屬性的值存放到對(duì)話框的控件中,應(yīng)用程序須從對(duì)話框的一些控件屬性中獲取數(shù)據(jù)。獲取與設(shè)定控件屬性值的功能函數(shù)如表5.4所示。函數(shù)名稱功能闡述get_attr獲取關(guān)鍵字為key控件的相應(yīng)屬性的值get_tile獲取關(guān)鍵字為key的控件的值set_tile設(shè)置關(guān)鍵字為key的控件的值(1)(get_attrkeyattribute)獲取關(guān)鍵字為key控件的相應(yīng)屬性的值,attribute表示需返回的屬性名稱。例如:(setqw(get_attr"img""width"));其含義是獲取關(guān)鍵字為img控件的寬度屬性值并賦給變量w。

(2)(get_tilekey)

獲取關(guān)鍵字為key的控件的值,即獲取該關(guān)鍵字控件的value屬性的值。例如:

(setqw1(get_tile"k_width"));

獲取key屬性為”k_width”控件的當(dāng)前值,并將其賦給變量w1。

(3)

(set_tilekeyvalue)

設(shè)置關(guān)鍵字為key的控件的值。例如:(set_tile"""50.0");設(shè)置關(guān)鍵字為edt1的控件的值為"50.0"。

2.對(duì)話框控件驅(qū)動(dòng)設(shè)計(jì)用戶通過對(duì)話框界面向AutoLISP程序傳遞數(shù)據(jù),需要定義下列兩類功能函數(shù):1)定義獲取數(shù)據(jù)的lsp函數(shù),如getdata,利用get_tile函數(shù)獲取控件key值。2)定義對(duì)話框功能操作函數(shù)或命令,實(shí)現(xiàn)對(duì)話框的加載、新建、其動(dòng)作定義以及啟動(dòng)、卸載?!纠?.5】實(shí)現(xiàn)圖5.30的參數(shù)數(shù)據(jù)輸入及對(duì)話框程序驅(qū)動(dòng)

實(shí)現(xiàn)對(duì)話框功能操作

從編輯框獲取數(shù)據(jù)

繪制帶鍵槽的軸斷面圖

對(duì)話框定義(a)解:

(1)實(shí)現(xiàn)對(duì)話框功能操作(自定義命令shaft)(defunC:shaft()(setqdcl_id(load_dialog"D:\\AutoLISP\\draw\\key.dcl"));裝入對(duì)話框

(if(<dcl_id0)(exit));載入失敗退出

(if(not(new_dialog"section"dcl_id));新建對(duì)話框的失敗處理

(progn(princ"\nCannotloadkey.dcl")(setqdialogLoadednil)(exit)))(action_tile"accept""(getdata)(done_dialog1)");當(dāng)觸發(fā)“確定”按鈕時(shí),執(zhí)行獲取數(shù)據(jù)的函數(shù)和關(guān)閉對(duì)話框動(dòng)作,并將對(duì)話框狀態(tài)賦值為1(setqsign(start_dialog));啟動(dòng)對(duì)話框

(if(=sign1)(shasexydwhang);對(duì)話框的狀態(tài)值為1時(shí),執(zhí)行shase自定義函數(shù),繪制圖形

)(unload_dialogdcl_id);從內(nèi)存中卸載對(duì)話框文件

(princ))(2)實(shí)現(xiàn)從編輯框獲取d、w、h、x、y數(shù)據(jù)(自定義函數(shù)getdata)(defungetdata()(setqd(atof(get_tile"p_dia")))

(setqw(atof(get_tile"p_w")))

(setqh(atof(get_tile"p_t")))

(setqx(atof(get_tile"p_x")))(setqy(atof(get_tile"p_y")))(setqang(atof(get_tile"p_angle"))))(a)(3)繪制帶鍵槽的軸斷面圖(自定義函數(shù)shase)(defunshase(x0y0dwha)(setqosnap_mode(getvar"ODSMOD"));獲取目標(biāo)捕捉狀態(tài)

(setvar"OSMODE"0);關(guān)閉目標(biāo)捕捉

(setqr(/d2.0)w1(/w2.0))(command"linetype""s""center""");定義線型為中心線,名稱為"center"(command"lweight"0) ;定義線寬為0(command"color"1) ;定義顏色為紅色,1為紅色對(duì)應(yīng)的自然數(shù)。

(command"line"(list(-x0r3)y0)(list(+x0r3)y0)"")(command"line"(listx0(-y0r3))(listx0(+y0r3))"")(command"linetype""s""continuous""");定義線型為實(shí)線,名稱為"continuous"(command"lweight"0.5) ;定義線寬為0.5(command"color"7) ;定義顏色為黑色,7為紅色對(duì)應(yīng)的自然數(shù)。(a)

(setqp3(list(-(+x0h)r)(+y0w1)))(setqp4(list(+x0(sqrt(-(*rr)(*w1w1))))(cadrp3)))(setqp2(list(carp3)(-y0w1)))(setqp1(list(carp4)(cadrp2)))(command"pline"p1"w"0.4""p2p3p4"a""ce"(listx0y0)p1"")(command"hatch""ansi31"0.8(-a45)"l""")(command"redraw")(setvar"OSMODE"osnap_mode);恢復(fù)目標(biāo)捕捉狀態(tài)

)

在VisualLISP環(huán)境下,將上述代碼輸入并存儲(chǔ)為以.lsp后綴的文件,加載成功后,在AutoCAD命令行下輸入自定義命令shaft,則會(huì)在屏幕上顯示圖5.30(b)的對(duì)話框,輸入對(duì)應(yīng)參數(shù)數(shù)據(jù),即可繪制出相應(yīng)的圖形?!纠?.5】實(shí)現(xiàn)圖5.30的參數(shù)數(shù)據(jù)輸入及對(duì)話框程序驅(qū)動(dòng)(a)(1)實(shí)現(xiàn)對(duì)話框功能操作(自定義命令shaft)(defunC:shaft()(setqdcl_id(load_dialog"D:\\AutoLISP\\draw\\key.dcl"));裝入對(duì)話框

(if(<dcl_id0)(exit));載入失敗退出

(if(not(new_dialog"section"dcl_id));新建對(duì)話框的失敗處理

(progn(princ"\nCannotloadkey.dcl")(setqdialogLoadednil)(exit)))(action_tile"accept""(getdata)(done_dialog1)");當(dāng)觸發(fā)“確定”按鈕時(shí),執(zhí)行獲取數(shù)據(jù)的函數(shù)和關(guān)閉對(duì)話框動(dòng)作,并將對(duì)話框狀態(tài)賦值為1

4.圖像按鈕控件設(shè)計(jì)圖像控件的大小和位置在DCL文件中定義,而圖像的顯示由編寫的AutoLISP驅(qū)動(dòng)對(duì)話框程序?qū)崿F(xiàn)。在DCL設(shè)計(jì)中,運(yùn)用“image_button”建立圖像按鈕控件,其中需定義控件的寬或者高,以及控件的寬高比。默認(rèn)情況下,其寬高比為0.66.插入圖像控件和圖像按鈕控件中的圖像為幻燈片文件(*.sld)。表5.5圖像控件處理函數(shù)函數(shù)名稱功能簡(jiǎn)述start_image打開指定的圖像控件,開始處理圖像框顯示dimx_tile返回圖像控件的寬度,以像素為單位dimy_tile返回圖像控件的寬度,以像素為單位vector_image在圖像控件內(nèi)繪制向量直線fill_image在圖像控件內(nèi)填滿指定的顏色塊slide_image在圖像控件內(nèi)顯示SLD幻燈片end_image結(jié)束圖像控件的處理(1)

(start_imagekey)打開key指定的圖像控件,開始對(duì)其操作。這是圖像操作必須用到的,而且是首先調(diào)用的函數(shù)。(2)(vector_imagex1y1x2y2color)在當(dāng)前打開的圖像控件上以x1、y1為起點(diǎn),以x2、y2為終點(diǎn),以color為顏色繪制矢量。參數(shù)x1、y1、x2、y2為整數(shù)表示的坐標(biāo),坐標(biāo)的原點(diǎn)為圖像控件的左上角(0,0)。圖像控件的寬和高,可分別通過(dimx_tile)及(dimy_tile)函數(shù)獲取。Color表示圖像的背景色,可以是AutoCAD定義的標(biāo)準(zhǔn)顏色名、顏色號(hào),也可以是預(yù)定義的顏色,即-2是AutoCAD圖形屏幕當(dāng)前背景色,-15是對(duì)話框背景色,-16是當(dāng)前對(duì)話框前景色,-18是當(dāng)前對(duì)話框線的顏色。(3)

(fill_imagex1y1x2y2color)在當(dāng)前打開的圖像控件上畫一個(gè)填充的矩形塊。參數(shù)x1、y1、x2、y2、color的含義同vector_image函數(shù)。(x1,y1)與(x2,y2)是矩形的對(duì)角點(diǎn)。(4)

(slide_imagex1y1x2y2sldname)在當(dāng)前打開的圖像控件上顯示一幅幻燈片,可以是獨(dú)立幻燈片文件(.sld),也可是某個(gè)幻燈庫中的某一幻燈片(.slb)。參數(shù)x1、y1、x2、y2的含義同vector_image函數(shù)。(x1,y1)、(x2,y2)為確定幻燈片位置的對(duì)角點(diǎn)坐標(biāo)?;脽羝募窃贏utoCAD環(huán)境下用mslide命令建立的。如果幻燈片文件不在當(dāng)前目錄,參數(shù)sldname應(yīng)包含完整的路徑。(5)

(end_image)結(jié)束對(duì)當(dāng)前圖像控件的處理。這是圖像操作必須用到的,而且是最后調(diào)用的函數(shù)。(6)(dimx_tilekey)返回關(guān)鍵字為key的控件(多用于圖像類控件)的寬度,以像素為單位。(7)(dimy_tilekey)返回關(guān)鍵字為key的控件(多用于圖像類控件)的高度,以像素為單位?!纠?.6】按照?qǐng)D5.33所示,設(shè)計(jì)繪制阿基米德螺旋線的對(duì)話框和驅(qū)動(dòng)程序。圖5.33阿基米德螺旋線數(shù)據(jù)輸入對(duì)話框

實(shí)現(xiàn)對(duì)話框功能操作

從編輯框獲取數(shù)據(jù)

繪制帶鍵槽的軸斷面圖

對(duì)話框定義幻燈片制作幻燈片制作在AutoCAD中調(diào)用事先編寫好的AutoLIS

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論