找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 4293|回复: 8

[每日一码] 【源码分享】 表达式计算器 for CAD2004

[复制链接]
发表于 2014-5-13 21:46:54 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
1、命令WWCAL ,  表达式的要求 同cal命令,计算后 结果直接发至剪切板(方便粘贴)
2、程序记录历史计算过程,双击某个历史就会把其内容 发至剪切板。
3、扩展性:我都快不会玩lsp了,做了个大概的框架,
                   各位需要的自行修改扩展程序(希望扩展后也能来此贴分享,集思广益)
                   我是想如果可以,应该扩展为可以自行增加表达式可计算的函数(目前程序可识别的函数同cal命令)。
                   那就最好了,这样可以把专业公式列进去。

本程序 由衷感谢 xshrimp 的分享。 基本是在其“图纸便签” 程序基础上 修改得来的。

表达式计算器演示.gif [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]

WWCAL.FAS表达式计算器.zip

3.95 KB, 阅读权限: 10, 下载次数: 126, 下载积分: D豆 -1 , 活跃度 1

评分

参与人数 1D豆 +5 收起 理由
xshrimp + 5 很给力!经验;技术要点;资料分享奖!

查看全部评分

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 604个

财富等级: 财运亨通

发表于 2014-5-13 21:52:27 来自手机 | 显示全部楼层
这个东西不能戒,戒了上班就不好玩了。你应该大喊—声,我回来了^_ ^

点评

该戒还是得戒啊。 回头还是把 xd 与mj 列到阻止网址里。 啥时候能视钱财如粪土的时候 才能大喊一声呀,哈哈!  详情 回复 发表于 2014-5-13 22:20
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-5-13 22:20:44 | 显示全部楼层
/db_自贡黄明儒_ 发表于 2014-5-13 21:52
这个东西不能戒,戒了上班就不好玩了。你应该大喊—声,我回来了^_ ^

该戒还是得戒啊。 回头还是把 xd  与mj 列到阻止网址里。
啥时候能视钱财如粪土的时候 才能大喊一声呀,哈哈!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 837个

财富等级: 财运亨通

发表于 2014-5-14 00:57:47 来自手机 | 显示全部楼层
现在散尽家财即可,呵呵
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 685个

财富等级: 财运亨通

发表于 2014-5-14 20:25:26 | 显示全部楼层
葛老也是个高手啊。。。别走啊。。。。
难道公司不能学习LISP??换一家吧
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 449个

财富等级: 日进斗金

发表于 2014-5-15 16:52:59 | 显示全部楼层
没有根号的!从我上晓东开始楼主一直都在的!怎么会要离开呢?希望楼主多多考虑下,玩了这么多年了突然不玩了真的值么?或者偶尔来上上也行嘛
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2017-7-21 14:21:54 | 显示全部楼层
这个计算器真好用 谢谢啦
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1个

财富等级: 恭喜发财

发表于 2019-9-14 17:26:33 | 显示全部楼层
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 756个

财富等级: 财运亨通

发表于 2021-9-23 12:04:53 | 显示全部楼层
感谢分享源码!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-4-27 09:23 , Processed in 0.441426 second(s), 53 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表