- UID
- 563789
- 积分
- 1462
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2007-9-14
- 最后登录
- 1970-1-1
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
1、命令WWCAL , 表达式的要求 同cal命令,计算后 结果直接发至剪切板(方便粘贴)
2、程序记录历史计算过程,双击某个历史就会把其内容 发至剪切板。
3、扩展性:我都快不会玩lsp了,做了个大概的框架,
各位需要的自行修改扩展程序(希望扩展后也能来此贴分享,集思广益)
我是想如果可以,应该扩展为可以自行增加表达式可计算的函数(目前程序可识别的函数同cal命令)。
那就最好了,这样可以把专业公式列进去。
本程序 由衷感谢 xshrimp 的分享。 基本是在其“图纸便签” 程序基础上 修改得来的。
[sell];;;表达式计算器
(prompt "\n >>>欢迎使用表达式计算器,命令: wwcalc <<<")
(defun c:wwcal ( / oldch1)
(vl-load-com)
(if (member "geomcal.arx" (arx)) nil
(arxload "geomcal.arx" nil)
)
;;; 灰显控件
(defun gps->dcl-disablectrls (keylist / key)
(foreach key keylist (mode_tile key 1))
)
;;;激活控件
(defun gps->dcl-enablectrls (keylist / key)
(foreach key keylist (mode_tile key 0))
)
;;;设置剪切板
(defun gxl-copytoclipboard(text / clip_board)
(setq clip_board (vlax-get-property (vlax-get (vlax-create-object "htmlfile") 'parentwindow) 'clipboarddata))
(vlax-invoke clip_board 'setdata "text" text)
(vlax-release-object clip_board)
text
)
;;;关于
(defun note_about ()
(alert
(strcat
"────────────────────────────\n"
"表达式计算器 V1.0 for AutoCAD2004\n"
"wowan1314 ,2014年5月13日\n"
"────────────────────────────\n"
"程序简介<表达式写法参考cal命令>:\n"
"1.表达式计算器,并将计算过程存在图形文件中.方便查看.\n"
"2.作者尽力将本程序做得完善,但不会因本软件的错失\n"
" 而造成的损失承担任何责任。\n"
"3.程序还无法增加自定义函数,等待您的参与"
)
)
)
;;;计算
(defun note_add( / note time mmm)
(if (/= (setq note (get_tile "edit")) "")
(progn
(setq mmm (vl-catch-all-apply 'c:cal (list note)))
(if
(null mmm)
(progn (mode_tile "edit" 2)(alert "表达式错误!请检查!"))
(progn
(setq time (menucmd "M=$(edtime,$(getvar,date),YYYY_MODD_HHMMSS)"))
(setq mmm (vl-princ-to-string mmm))
(vlax-ldata-put "#wwcalc#" time (strcat note "=" mmm))
(gxl-copytoclipboard mmm)
(setq oldch1 mmm)
(note_fill_lst)
)
)
)
(progn
(mode_tile "edit" 2)
(alert "输入计算表达式!")
)
)
)
;;;dcl赋值
(defun note_fill_lst( / n)
(setq #notedataall(vlax-ldata-list "#wwcalc#") #notedata (mapcar 'cdr #notedataall))
(if oldch1 (set_tile "edit" oldch1))
(start_list "list")
(if #notedataall
(progn
(foreach n #notedataall
(add_list (cdr n))
)
(gps->dcl-enablectrls '("sdel" "alldel"))
)
(gps->dcl-disablectrls '("sdel" "alldel"))
)
(end_list)
(set_tile "list" "0")
(mode_tile "edit" 2)
)
;;;单删
(defun note_lst_sdel( / get n)
(if (and #notedataall (/= "" (setq get (get_tile "list"))))
(progn
(setq n (nth (atoi get) #notedataall))
(vlax-ldata-delete "#wwcalc#" (car n))
(note_fill_lst)
)
)
)
;;;全删
(defun note_lst_alldel( / n)
(foreach n #notedataall (vlax-ldata-delete "#wwcalc#" (car n)))
(note_fill_lst)
)
;;;双击list.
(defun note_ok( / get n)
(if (/= "" (setq get (get_tile "list")))
(progn
(setq n (nth (atoi get) #notedataall))
(gxl-copytoclipboard (cdr n))
(set_tile "edit" (cdr n))(mode_tile "edit" 2)
)
)
)
;;拾取内容
(defun shiqua (/ ent1 ent2 entdata tmlist entlist textzs)
(while (null (setq ent1 (nentsel ))))
(if ent1
(progn(setq oldch1 (cdr(assoc 1(entget(car ent1)))))
(caldhk))
)
)
;end shiqu1
;;;
(defun caldhk ( / #notedata #notedataall dclid dclname filen fn get n note stream tempname time re)
(setq dclname
(cond
((setq tempname (vl-filename-mktemp "gps-dcl-tmp.dcl") filen (open tempname "w"))
(foreach stream
'(
"ibutton:button{width=12;fixed_width=true;}\n"
"wwcalc:dialog{label=\"表达式计算器 v1.0----by wowan1314 \";\n"
" :boxed_row{label=\"输入计算表达式\";\n"
" :edit_box{key=\"edit\"; allow_accept=true;}\n"
" :ibutton{label=\"计算\";key=\"add\";is_default = true;}\n"
" }\n"
" :boxed_column{label=\"历史记录\";\n"
" :list_box{key=\"list\";}\n"
" }\n"
":image {color = 194 ;height = 0.1 ;}\n"
" :row{\n"
" :ibutton{label=\"拾取\";key=\"txtin\";}\n"
" :ibutton{label=\"单删\";key=\"sdel\";}\n"
" :ibutton{label=\"全删\";key=\"alldel\";}\n"
" :ibutton{is_cancel=true;label=\"取消\";}\n"
" :ibutton{label=\"预留扩展\";key=\"about\";}\n"
" }\n"
"}\n"
)
(princ stream filen)
)
(close filen)
tempname
)
)
)
(setq dclid (load_dialog dclname))
(if (not(new_dialog "wwcalc" dclid))
(progn (alert "dcl对话框加载失败.")(exit))
)
(note_fill_lst)
(action_tile "add" "(note_add)")
(action_tile "list" "(if(= $reason 4)(note_ok))")
(action_tile "cancel" "(done_dialog 0)")
(action_tile "sdel" "(note_lst_sdel)")
(action_tile "alldel" "(note_lst_alldel)")
(action_tile "about" "(note_about)")
(action_tile "txtin" "(done_dialog 1)")
(action_tile "txtout" "(note_out)")
(setq re (start_dialog))
(if (= re 1) (shiqua))
(unload_dialog dclid)
(vl-file-delete dclname)
(prin1)
)
(caldhk)
)[/sell]
|
评分
-
查看全部评分
|