亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么 action_tile 后面不能用 自定義函數(drawcircle)?

為什么 action_tile 后面不能用 自定義函數(drawcircle)?

慕雪6442864 2023-02-16 22:18:24
(action_tile "accept" "(getdata) (done_dialog 1)") ;getdata調用的函數(action_tile "cancel" "(done_dialog 0)");done_dialog 當點擊按鈕回傳一個值(setq std (start_dialog)) ;接收 action_tile回傳值(unload_dialog dlg_id) ;卸載對話框dcl(if (= std 1)(command "circle" (list x y) r))(defun getdata()(setq x (atof (get_tile "e_x"))) ;atof 字符串轉換成實型數字(setq y (atof (get_tile "e_y")))(setq r (atof (get_tile "e_r")))以上這樣正確,但是(ation_tile "accept" "(getdata) (drawcircle) (done_dialog 1)") (action_tile "cancel" (done_dialog 0))(setq std (start_dialog))(unload_dialog dlg_id);;;;這樣就錯誤 (defun drawcircle()(command "circle" (list x y) r))
查看完整描述

2 回答

?
波斯汪

TA貢獻1811條經驗 獲得超4個贊

action_title (done_dialog 0) 外面要加上雙引號。

查看完整回答
反對 回復 2023-02-20
?
狐的傳說

TA貢獻1804條經驗 獲得超3個贊

對話框文件是擴展名為.dcl的文本文件,符合dcl對話框控制語言的語法。但對話框文件本身并不能工作,還必須要用autolisp或ads應用程序調用。

對話框由主對話框和其內部的各種片型框組成,其結構為數狀。圖1.1為一對話框結構示例,樹葉是各種片型框,樹根為dialog;圖1.2為其在autocad中的顯示。
在可編程對話框pdb中已預定義了以下基本片型框:

:dialog 對話

:button 按鈕

:edit_box 編輯框

:list_box 列表框

:image_button 圖像按鈕

:popup_list 彈出表

:radio_button 單選按鈕

:slider 滾動條

:toggle 開關

每個片型框包含一系列的屬性,這些屬性的值確定了片型框的位置、大小、長度、高度和文件標識等,例如lable屬性確定了在片型框上顯示的文字。用戶可以根據dcl語法將這些基本的片型框組裝起來,形成更為復雜,功能更為詳盡的對話框,也可以定義與基本片型框無關的新片型框,并將其與基本片型框組合成新的片型框組。為了方便對話框的布局,可將一行或一列片型框當作一個新的片型框,并在其周圍畫上邊框。對話框的基本布局有以下幾種:

:column 列。定義,可以與行、列嵌套。

:row 行。片型框組按行平行分布,顯示順序同column,也可與行列嵌套。

:radio_column 單選列。包含一列單選片型框,同時只能選擇一個片型框。

:radio_row 單選行。包含一行單選片型框,同時只能選擇一個片型框。

:boxed_column 有界列。列的周圍畫上邊框。

:boxed_row 有界行。行的周圍畫上邊框。

:boxed_radio_column有界單選列。在單選列的周圍畫上邊框。

:boxed_radio_row 有界單選行。在單選行的周圍畫上邊框。

用戶可以定義自己的屬性,不過在一般情況下僅使用pdb預定義的屬性就可以滿足程序的要求了。當片型框中的屬性未被指定時,pdb將賦于其缺省值。沒片型框的預定義屬性也各不相同,但布局屬性和功能屬性則是所有有效片型框的公共屬性,這些公共屬性是:

aligment 片型框的定位方式;

width height 片型框的寬度和高度;

fixed_width fixed_height 其值為true時,片型框大小固定不變;

children_aligment 子片型框的定位屬性;

children_fixed_width 子片型框的寬度固定屬性;

children_fixed_height 子片型框的固定高度屬性;

label 顯示在片型框內或左上方的文字;

key 指定程序引用片型框的文本字符串,在指定的對話框中,每個key的值應該是唯一的;

value 片型框的初始值,為一字符串;

mnemonic 片型框內快捷鍵,即帶下劃線的字母;

is_enabled 值為false時,片型框不可選;

is_tab_stop 值為false時,片型框不接受tab聚焦;

action 指定片型框時,對應的autolisp程序進行的操作。

另外,片型框還包括圖像框image、文本框text和襯框spacer,這三種片型框只是起修飾作用和加強視覺效果,不能引起任何操作。

dcl文件采用c語言的風格,每個分號表示一名,每個片型框的定義用一對大括號括起來;注釋在單行時用//,多行時可采用/*注釋語句*/的形式。

下面以一個簡單的例子說明dcl的編程,圖2是調用example.dcl的顯示。

//example.dcl對話框示例文件

test:dialog{

label="dialog example";

:text{//文本片型框

label="this is aexample.";

}

:button{//按鈕片型框

key="accept";

//關鍵字key為accept

label="ok";//標號為ok

mnemonic="o";

//按alt_o鍵可以選擇ok按鈕

fixed_width=true;

//按鈕的寬度固定不變

aligment=centered;

//按鈕以中心對齊

is_default=true;

}

}

pdb在base.dcl中還提供了一組標準的按鈕群,在我們自己的dcl文件中可以直接使用:

:ok_only單個ok按鈕;

:lk_cancel ok按鈕和cancel兩個按鈕;

:ok_cncel_help ok、cancel和help…三個按鈕;

:ok_cncel_help_info ok、cancel、help…和info…四個按鈕。

文本文件的對話框文件自身本身不能工作,需要用autolisp或ads應用程序調用對話框文件才行,ads的效率比較高,但掌握起來要困難一些,autolisp程序較為煩瑣,但比較容易掌握。autolisp提供了一組管理對話框的函數包,處理用戶與對話框之間的交互。下面是最重要的幾個函數:

(load_dialog dclfile)用與裝入一個dcl文件,返回一個整數標識。

(unload_dialog dcl_id)卸載標識為dcl_id的dcl文件。

(new_dialog dialog_name dcl_id)初始化對話框,并在屏幕顯示對話框,其中dialog_name是在對話框文件中定義的對話框名稱。

(start_dialog)啟動對話框,并接受用戶的輸入信息。

(done_dialog)終止對話框信息的輸入,并且停止顯示對話框。

(action_tile key action_express)處理用戶的選擇,將片型框與應用程序中的對應操作聯系起來,key是片型框的關鍵字。

下面的autolisp程序就是對上面的example.dcl對話框文件的管理:

;;;example.dcl管理example.dcl對話框文件的autolisp程序

(defun c:showdcl(/dcl_id)

(setq dcl_id (load_dialog"example.dcl"))

(if(not(new_dialog"test"dcl_id))

(exit))

(action_tile

"accept"

"(done_dialog)")

(start_dialog)

(unload_dialog dcl_id)

)

在autocad中顯示圖2對話框的過程如下:

command:(load"example.lsp")

c:showdcl

command:showdel


查看完整回答
反對 回復 2023-02-20
  • 2 回答
  • 0 關注
  • 111 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號