久久国产色av_国产人妻777人伦精品hd_欧美 国产 日本_好吊色欧美一区二区三区

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

選擇AutoLISP還是VBA

時間:2010-01-11 09:50:05 來源:

  我聽到許多關于這樣的問題。AutoLISPVBA有什么不同呢?我要學習怎樣二次開發AutoCAD,但我不能確定先學哪一個工具。哪一個工具更好呢?

  簡潔的回答是他們都好,你應當兩者都學。分析我的回答,你可以知道這不是最快的解決辦法,但在你做出一個完整的決定前,一個完整的回答需要時間和更多的問題。舉個例子:你懂BASIC嗎?如果你懂,那么VBA學起來會更快一些;如不懂BASIC,那么你學過其它的編程語言嗎?如果你學的正好是FORTRAN或PASCAL的話,那也很好。因為如果你已掌握了這兩種語言,則VBA的學習將十分簡單。如果你一點兒也不懂程序設計語言,那么AutoLISP將會是適合你學習的語言。
  如果你正好沒有程序設計的知識和經驗,那么在AutoCAD里你應當學習什么語言?這個問題很難回答。這取決于你希望完成什么樣的工作?每種語言都有其優點和缺點,AutoLISP擅長建立新命令和產生已有命令的連接。VBA擅長執行包括在其他應用程序中的組件,如Microsoft的Excel和Access。AutoLISP是基于表處理的編程體系,它允許程序員隨意地存儲和操作傳送信息,然而VBA部件包括數據和對復雜情況的各種有效操作,這就是問題變得復雜的地方,除非你已真正懂得這些工具的好處,否則,很難回答你應該選擇哪一個,但你應當知道你想完成什么和允許完成什么,因為它將引導你向正確的解決方法前進。
  稍后,你會發現這一簡潔的回答是恰當的,你將會學習兩種語言,你要做的一些事,可以在AutoLISP中用十分簡單的幾行代碼來解決。另一方面,你會發現VBA提供了一些最簡捷的應用程序解決方案。例如,建立一個復雜的包括許多對話框的應用,AutoLISP支持對話框,但是不如VBA支持的程度強,同時,在AutoCAD中一個任務的情況下,VBA提供在對象級別上訪問AutoCAD系統,但它對AutoCAD的一些基本命令的支持性并不是很好,而AutoLISP在這一點上卻做的很好。
  這兩種語言不具有很好的兼容性,這種情況是必然的,就是說,你不能把在AutoLISP中寫的東西放到VBA中隨意使用,反之亦然。我并不是說這種情況不可能的,但卻是很難以實現。最低限度是,一但你選擇了一種語言來設計程序,你就不可能中途又用另一種語言來解決程序中的問題,你不得不繼續使用你最初選擇的語言。
  建立個詞匯表
  那么,讓我們從學術角度討論一些兩種語言間的不同之處。前面提到的AutoLISP是綜合了邏輯結構與傳統AutoLISP命令的一個完美工具,你能組合AutoCAD命令并放在一個有條件的邏輯腳本里,而產生強有力的自定義命令,這些命令能被用于自動操作通常的任務,也能解決計算問題而得到一個結果。基于命令種類的思想比目標角度的思想更簡單,一個清楚直接指出不同點的例子:在一個多義線對象里打斷編輯方法。如果你要打斷一條多義線,你必須先計算并重新更新這個物體,Extend和Trim命令也一樣。這些命令現在還并不包含在AutoCAD對象系統的實體對象編輯方法中。在不久它們會隨時出現,這就是對象的好處。
  在許多情況下,對象級的處理比命令方式更高級。當你執行一個命令時,你有可能可以也有可能不可以直接操作你所選取的對象。因為你必須依賴于AutoCAD的對象選擇機制。對象不是模糊不清的。當你專門指定一個對象時,對你要操作的對象,它是很清楚的。
  對象級別的處理在VisualLISP也可實現。使用VisualLISP中的(VL)擴展,你能改變對象的參數且在需要時調用對象的方法。你不得不使用對象引用,它可以從已有的實體名或直接產生的對象中生成,在大多數情況下,一個有經驗的AutoLISP程序員不需要使用這些對象,但遲早它們會派上用場。
  VisualLISP的另一優點是比VBA更接近AutoCAD系統。VBA不是由AutoCAD產生的,它是在其它的環境下同樣工作的一個附加的語言,象Microsoft的Word和Excel一樣。它也類似于在AutoCAD中用VB(Visualbasic)語言編制程序的方法。VisualLISP僅在AutoCAD里運行,它的優勢是軟件間有著密切的工作關系。當在命令行里提示用戶時,你能發現一個不同點的例子。在VisualLISP里,你可以使用PROMPT或PRINT語句。在VBA里,你必須使用Prompt方法,這是優化對象的一部分,也是繪制對象的一部分,下面的幾行代碼將對AutoCAD命令行發出一個提示。第一行為VisualLISP語言;第二行用的是VBA。
  (Prompt“nstarting.”)#p#分頁標題#e#
  thisDrawing.Utility.PromptCh$(10)&“starting”
  有兩件事顯而易見,在VisualLISP里,在命令行窗口中,“n”使光標跳到新的一行。VBA使用Chr$(10)功能,必需把它放在使用“&”操作符的提示字符串前才可以運行。其次是當類型數量相對實用對象的提示方法接近時,才會使用這個。
  在AutoLISP中,可使用PRINT語句,在生成值前,“n”使順序轉到新的一行開始。PRINT的另一個特點是可以輸出任何數據類型,而PROMPT功能只能處理字符串。
  在VBA里,對于優化對象的方法和AutoLISP里的“GET×××”函數一樣,你必須一直使用字符串。AutoLISP包括幾種不同的把你要使用的數據類型轉化成字符串型的函數。RTOS把數值型轉化成字符串型;ITOA把數值型轉化成整數型。VBA提供兩個數據轉換函數:STR和FORMAT。當轉化一個非負數時,STR函數返回一個精確的字符串,即在字符串前加上一個空格。這就是,str(-1.1)返回字符串“-1.1”,str(1.1)結果是“1.1”。FORMAT允許你設立特別的轉換格式。對正在學習VBA的人,可利用在線幫助查看有關該函數的幫助,它提供了大量的例子來演示數據是怎樣被轉化產生的。
  衡量的尺度
  對于AutoCAD的定制來說,由于AutoLISP語言是以命令的標準建立的,這促進了偏向于支持AutoLISP的尺度。你能使用AutoLISP中帶“C:”作為新命令名稱的頭兩個字符的方式來定義函數,該命令就像AutoCAD命令一樣使用。“C:”函數被叫做“命令函數”。VBA有宏,你必須從程序管理器里運行宏。從命令提示(或普通的macro菜單)里運行不了宏,這就存在著一個重要問題。用戶可以使用AutoLISP啟動VBA程序管理,然后以相同的方式執行宏。使用命令行語句時,你應該確信在語句前加了“-”,格式如下:
  command“-VBALOAD”“mymacros”“-VBARUN”“mymacro”
  如果你未用此負號,將會出現一個對話框,提示用戶裝載VBA和運行宏。在多數情況下用戶并不想出現這個對話框。取而代之的是在命令行裝載宏并用一個VBA模塊來運行它,這樣,首先出現的是在AutoLISP中很強列關注的東西,不再僅僅只是一個傾向。一但一個錯誤和漏洞發生,就會有其他相關問題出現,這在編程中并不尋常。
  另外一點,VBA允許一個經由AutoLISP啟動的過程,VBA還有一個反應繪圖及同時處理多個圖形的優良機制。在VisualLISP里,你能做這些工作,但在VBA里就不是如此容易了。其反應的事物與圖形連系在一起,甚至嵌入圖形模板中,有多種原因允許你所編程繪制圖形。VisualLISP沒有一些靈活的運行程序或操作菜單,因此它沒有這些能力。VBA與VisualLISP爭奪的另一領域為數據種類。VBA的數據種類多于VisualLISP,它包括了一些有用的如Date、Time的數據類型。在VisualLISP里日期和時間是用字符串或是數值存儲的。在一張圖形里,當你通過系統變量存取系統日期信息時,你會得到純數字而不是日歷天數。
  在VBA中操作日期和時間是非常容易的,Format函數可以產生幾乎任一種描述的格式,你可以用基本的數值來完成比較和區別。你能以某種自定義的格式存儲或操作時間信息,方法簡單。我聽說頑固的AutoLISP程序員聲稱VBA不支持表處理而LISP支持,這是事實。但VBA不支持Variants類型,Variants與LISP庫中的一些數據種類標志十分相似。Variants允許VBA使用不同類型的數據和結構,但不如LISP中的表處理功能強大。表能存儲許多種類型的數據且用幾行基于MAPCAR、FOREACH、APPLY的代碼就可以快速操作它們。但是這些程序設計體系需要時間去掌握,許多程序設計的新手在使用VBA時,將不會遺漏結構的存取。
  坦白的說,表處理進程并不像對象操作那樣令人感興趣。在VBA(和VisualLISP)中你能連接其它系統支持的對象。對程序員而言,ActiveX是面向Windows的一個面向對象的過程到過程的通信編程系統,它允許你的VBA程序運行在AutoCAD里,并且可借用Excel或其它一些支持自動操作的程序。因為Excel支持VBA,所以你能在一個Excel工作表中驅動AutoCAD。當你試著思考它時,多自動進程處理有著某些讓人敬畏的潛力。
  在下載部分的鏈接里,你會發現兩個程序:
  一個是在VBA(帶有DVB擴展)里的,另一個在VisualLISP(帶有LSP擴展)里,這些函數完成相同的事:他們提示用戶輸入一些定義一個銑槽的參數,并畫出這個銑槽,這個銑槽可以放在任何角落且有一個90°的圓角或一個完整的半圓帽。這些例子表明了VBA與VisualLISP運行程序的風格的幾個不同點,或許這就是最明顯的產生lightweight多義線的的方法,在VBA里,該對象由一系列點確定,雛形產生后,拐點也相應產生了,VisualLISP的例子簡單使用PLINE命令去產生點和弧,因為他們可以從命令行提示中配置。從運行程序這一點而言,VisualLISP版本很容易產生,因為你不必知道任何拐點和他們怎樣在多義線中使用,在VisualLISP我用EntMake語句,在一個實體列表中確定拐點,這個版本的基本命令很容易編譯代碼。如果你更深入地學習,你會發現VisualLISP和VBA是十分平衡的,這個的弱項正是另一個的強項。然而VBA支持一些新的理論,對于AutoLISP程序員而然,他的缺點是把一個簡單問題復雜化。在大多數情況下,我傾向于VisualLISP,因為它提供了更多的自由度。對于AutoCAD的定制我有許多經驗,但有些時候,根據客戶需求,我會用VBA,因為對客戶而言,其更容易維護。它提供了一些面向自動生成的模板。我的許多客戶在定制AutoCAD時,并沒有廣博的經驗,但他們有Basic語言基礎,因為這點,他們使用我推薦的VBA。對于不久將需改變的元素的操作,他們感到很輕松。#p#分頁標題#e#
  上面所有的原因,就是我為什么推薦VisualLISP和VBA二者都學的緣故。話又說回來,這還要依據你所使用的工具而定,學會其一,已可以了,但你會錯過向另一個方向發展的時間,這是必然的沖突。第一步,你可能從VBA中學習怎樣運行LISP語句或者從VisualLISP中學習運行傳統VBA的方法。誰知道下一個將會是什么?
  從哪里開始
  為了決定先學哪一個語言,讓我們做一些自我評價:如果你很好地了解了AutoCAD的命令并希望自動使用它們,那么VisualLISP將是你的首選;如果你不懂AutoCAD,但你是一名知道對象是如何工作的計算機程序員,你可以學習VBA;如果你是一名C++程序員,你可以通過學習VBA而了解對象集是怎么結合在一起的,然后花一點時間學習ObjectARX(一個DLLs結構的C++庫,運行于AutoCAD自身相同的內存映像),在這篇文章中沒有討論ObjectARX,是因為你必須使用外部的C++編譯器,且必須從Autodesk公司獲得開發工具包,而AutoCAD2000中直接配有VisualLISP和VBA編譯器。
  給想學習AutoCAD的人最后一點建議:
  尋找那些有范例的書和雜志。
  上網查詢這些內容,甚至是例子。VisualLISP和VBA的在線幫助常令初學者感到困惑,因為一些函數從VBA中引證,而另一些從VisualLISP中引證。無論你使用哪一個語言,你都有可能有從其它語言里偶然得到幫助的好機遇,因為它們是相關的。因此我強烈推薦看一本或兩本書。你有大量選擇的自由,多存些好書。
  [編者注:有關這些內容推薦兩本好書,BillKramer的《AutoLispTreasureChest》;BillKramerJohnGibb的《UsingVisualBasicwithAutoCAD》(第二版)]
  存在著許多選擇,每一個都有其優點。無論你先學什么,在某一時間你應當學習所有的東西,為了去追尋更多的知識,這就意味著要不停的編制程序。BillCramer——有著二十多年的運用CAD/CAM/CAE系統的經驗,對于代碼的更新,可到下載處下載。


久久国产色av_国产人妻777人伦精品hd_欧美 国产 日本_好吊色欧美一区二区三区
久久久免费精品| 欧美精品免费播放| 国产精品亚洲аv天堂网| 国产欧美精品在线播放| 国产欧美一区二区视频| 国产伦精品一区二区三区照片| 国产嫩草一区二区三区在线观看| 国产乱淫av片杨贵妃| 国产精品一区=区| 91九色极品视频| 日韩亚洲在线观看| 久久亚洲精品成人| 亚洲欧洲精品在线观看| 亚洲xxxx视频| 男女视频一区二区三区| 国产日韩欧美在线观看| 99久久精品免费看国产一区二区三区 | 国产精品一区二区三区久久久 | 欧美在线亚洲一区| 欧美成人免费在线观看| 在线播放豆国产99亚洲| 日韩视频免费在线播放| 高清不卡一区二区三区| 久久久久久网站| 欧美区二区三区| 青草青草久热精品视频在线网站| 国产美女久久精品| 国产精品视频不卡| 五月天在线免费视频| 国产玖玖精品视频| 久久99精品久久久久久青青日本| 中文字幕欧美日韩一区二区三区| 色综合久久久久久中文网| 久久久久久亚洲| 天堂√在线观看一区二区| 国产女教师bbwbbwbbw| www.色综合| 青青草久久网络| 久久久久久国产精品一区| 少妇大叫太大太粗太爽了a片小说| 美女主播视频一区| 久久福利电影| 午夜精品久久久久久久白皮肤| 美乳视频一区二区| 久久夜精品va视频免费观看| 日韩精品一区二区三区外面| 97色伦亚洲国产| 午夜精品短视频| 久久久噜噜噜久噜久久| 日韩资源av在线| 国产成人精品视| 日本精品一区二区三区高清 久久| 81精品国产乱码久久久久久| 日本在线播放不卡| 久久免费国产视频| 欧洲精品亚洲精品| 久久精品电影网站| 精品一区二区不卡| 91精品国产精品| 国产精品裸体一区二区三区| 奇米精品一区二区三区| 国产成人精品在线视频| 狠狠噜天天噜日日噜| 久久五月情影视| 国产精品一区二区在线| 亚洲一二三区精品| 777精品久无码人妻蜜桃| 一区二区视频在线播放| 91久久精品久久国产性色也91| 午夜精品在线观看| 久久精品99久久久久久久久| 国产一区二区片| 色综合久久av| 日韩中文字在线| 成人伊人精品色xxxx视频| 亚洲人成77777| 久久精品国产清自在天天线| 免费观看国产精品视频| 三年中国中文在线观看免费播放| 国产精品视频网址| 91国自产精品中文字幕亚洲| 精品一区久久久| 日韩av免费网站| 欧美激情一区二区三区高清视频| 色阁综合伊人av| 国产高清自拍一区| 国产欧美精品一区二区三区-老狼| 日本欧美一级片| 中文字幕成人一区| 日韩中文字幕国产精品| 国产免费一区二区三区| 精品欧美日韩| 欧美亚洲日本黄色| 日本精品久久久久久久久久| 亚洲一区二区三区免费看| 欧美精品在线视频观看| 国产精品偷伦一区二区| 久久久国产一区| 久久久久久久网站| 国产精品91一区| 91传媒免费视频| 国产精品av电影| 亚洲精品国产精品久久| 久久精品国产v日韩v亚洲| 久久久久久久久久久久久久一区| 白嫩少妇丰满一区二区| 国产日韩精品一区二区| 国产日韩亚洲欧美| 韩国成人一区| 免费高清一区二区三区| 国产一区免费在线| 国产免费黄视频| 国产精品av一区| 久久波多野结衣| 久久国产精品免费一区| 三级精品视频久久久久| 国产精品久久久久av| 在线不卡日本| 婷婷五月色综合| 欧美有码在线视频| 青青久久av北条麻妃黑人| 欧美日韩国产精品一区二区 | 国产精品久久久久久久久粉嫩av | 国产精品美女在线播放| 中文一区一区三区免费| 欧美日韩国产二区| 色中文字幕在线观看| 欧美资源一区| 国产精品一区久久久| 8090成年在线看片午夜| 日韩色av导航| 亚洲一区中文字幕| 欧美极品欧美精品欧美| 99精品人妻少妇一区二区| 久久精品国产亚洲| 亚洲国产欧美不卡在线观看| 欧美一级电影久久| 精品网站在线看| 114国产精品久久免费观看| 国产精品视频免费在线观看| 亚洲欧美日韩不卡一区二区三区| 欧美少妇在线观看| 91精品国产成人| 欧美区二区三区| 男女午夜激情视频| 国内一区二区在线视频观看| 国产精品一区二区三区在线观| 久久国产精品99久久久久久丝袜| 欧美激情视频一区二区三区不卡| 日韩欧美精品在线不卡| av天堂永久资源网| 国产精品久久久久久久天堂第1集| 日日橹狠狠爱欧美超碰| 国产精品夜色7777狼人| 国产精品国产精品国产专区蜜臀ah | 成人精品视频99在线观看免费| 国产精品福利观看| 欧美有码在线视频| 久久av喷吹av高潮av| 涩涩日韩在线| 国产福利视频一区二区| 日韩av电影中文字幕| 国产极品jizzhd欧美| 欧美一区二区三区电影在线观看| 久久久人人爽| 色大师av一区二区三区| 国产传媒一区| 欧美日韩另类综合| 国产精品视频地址| 国产一区免费| 一级做a爰片久久| 久久一区二区精品| 日韩av在线播放不卡| 日韩中文字幕精品视频| 国内成人精品视频| 国产精品久久久久久超碰| 国产精品午夜视频| 欧美一区二区三区四区在线观看地址| 久久香蕉综合色| 每日在线更新av| 亚洲精品天堂成人片av在线播放| 久久久亚洲国产| 精品一区二区三区国产| 亚洲一区二区三区久久| 色视频www在线播放国产成人| 国产情侣第一页| 日韩偷拍一区二区| 国产精品久久久久久久小唯西川 | 日韩中文字幕在线精品| 欧美日韩性生活片| 天天综合五月天| 国产a∨精品一区二区三区不卡| 8090成年在线看片午夜| 精品无人区一区二区三区 | 欧美激情综合色| 91精品国产综合久久男男| 黄色动漫网站入口| 亚洲第一精品区| 操91在线视频| 国产精品视频一区二区高潮|