找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1477|回复: 7

[求助] 字高改为由对话框设定

[复制链接]

已领礼包: 3199个

财富等级: 富可敌国

发表于 2014-4-17 01:39:56 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 lucas3 于 2014-4-17 01:43 编辑

请求大师帮忙将字高改为由对话框设定,现在对话框中已经添加了,请帮忙在程序中做相应改动,谢谢!
  1.      "\n  :edit_box{ label = \"文字高:\"; key = \"tx_hig\"; value = \"2.5\"; edit_width = 4; }"

  (defun bz (/ *error* name1 name2 name3)
  (defun *error* (msg) ;将描述错误的字符串存入变量msg
    (entdel name1) (entdel name2) (if name3 (entdel name3))
    (princ "错误: ")(princ msg)) ;打印错误信息
  (setq ty (getvar "TEXTSTYLE"))
  (setq kd1 (caadr (textbox (list '(0 . "text")(cons 1 txt1)(cons 40 300)(cons 41 0.7)(cons 7 ty)))))
   ;字高300,字宽高比0.7,可以自己设置,字体为当前字体
  (setq kd2 (caadr (textbox (list '(0 . "text")(cons 1 txt2)(cons 40 300)(cons 41 0.7)(cons 7 ty)))))
   ;字高300,字宽高比0.7,可以自己设置,字体为当前字体
  (setq kd (max kd1 kd2) kd (+ kd 50))
  (setq p (getpoint "\n输入基点:"))
  (setq pd t)
  (while pd
    (setq gr (grread t 4 1) mode (car gr) pt (cadr gr))
    (if (= kd3 0) (setq kd kd1))
    (if (and (listp pt) (>= (car pt) (car p))) (progn
      (setq p0 (polar pt 0 kd))
      (setq p1 (polar pt 0 (/ (- kd kd1) 2)) p1 (polar p1 (angtof "90") 50))
      (setq p2 (polar pt 0 (/ (- kd kd2) 2)) p2 (polar p2 (angtof "270") 350))))
    (if (and (listp pt) (< (car pt) (car p))) (progn
      (setq p0 (polar pt pi kd))
      (setq p1 (polar p0 0 (/ (- kd kd1) 2)) p1 (polar p1 (angtof "90") 50))
      (setq p2 (polar p0 0 (/ (- kd kd2) 2)) p2 (polar p2 (angtof "270") 350))))
    (if (= mode 5) (progn
      (if name1 (entdel name1))
      (entmake (list '(0 . "LWPOLYLINE")'(100 . "AcDbEntity")'(100 . "AcDbPolyline")'(90 . 3)
        (cons 10 p)(cons 10 pt)(cons 10 p0)))
      (setq name1 (entlast))
      (if name2 (entdel name2))
      (entmake (list '(0 . "text")(cons 1 txt1)(cons 40 300)(cons 41 0.7)(cons 10 p1)(cons 7 ty)))
      ;字高300,字宽高比0.7,可以自己设置,字体为当前字体
      (setq name2 (entlast))
      (if name3 (entdel name3))
      (if (= kd3 1) (entmake (list '(0 . "text")(cons 1 txt2)(cons 40 300)(cons 41 0.7)(cons 10 p2)(cons 7 ty))))
      ;字高300,字宽高比0.7,可以自己设置,字体为当前字体
      (if (= kd3 1) (setq name3 (entlast)))))
    (if (= mode 3) (setq pd nil))
    (if (or (= mode 2) (= mode 25)) (progn (setq pd nil) (entdel name1) (entdel name2) (if name3 (entdel name3)))))
  (princ))

(defun getdata ()
  (setq txt1 (get_tile "a1"))
  (setq txt2 (get_tile "a2"))
  (if (= (get_tile "a3") "0") (setq kd3 0) (setq kd3 1)))

(defun c:yxbz ()
  ;(步骤1)建立临时对话框
  (setq tempname (vl-filename-mktemp "temp.dcl") filen (open tempname "w"))
  (foreach stream
    '("yxbz:dialog{"
      "\n  label = "动态引线标注";"
      "\n  :edit_box {key = \"a1\"; label = \"线上文字:\"; width = 40 ;}"
      "\n  :toggle {key = \"a3\"; label = \"增加线下文字\"; value = "0";}"
      "\n  :edit_box {key = \"a2\"; label = \"线下文字:\"; width = 40; is_enabled = false;}"           "\n  :edit_box{ label = \"文字高:\"; key = \"tx_hig\"; value = \"2.5\"; edit_width = 4; }"
      "\n  ok_cancel;}")
  (princ stream filen))
  (close filen)
  (setq dclname tempname)
  ;(步骤2)加载并显示对话框
  (setq dcl_re (load_dialog dclname))
  (if (not (new_dialog "yxbz" dcl_re)) (exit))
  ;(步骤3)定义对话框控件(运用set_tile、action_tile、mode_tile、get_tile等函数)
  (if txt1 (set_tile "a1" txt1) (set_tile "a1" "动态标注"))
  (if txt2 (set_tile "a2" txt2) (set_tile "a2" "动态标注"))
  (if kd3 (set_tile "a3" (rtos kd3))) ;注意set_tile函数中赋值均为字符串(带双引号),就连关键词也要加上双引号。
  (if (= kd3 0) (mode_tile "a2" 1))
  (if (= kd3 1) (mode_tile "a2" 0))
  (action_tile "a3" "(if (= (get_tile \"a3\") \"0\") (mode_tile \"a2\" 1) (mode_tile \"a2\" 0))") ;点击时才起作用
  (action_tile "accept" "(getdata)(done_dialog 1)")
  (action_tile "cancel" "(done_dialog)")
  ;(步骤4)激活并卸载对话框,并进行对话框隐藏后的操作。
  (setq std (start_dialog))
  (unload_dialog dcl_re)
  (vl-file-delete dclname)
  (if (= std 1) (bz))
  (princ)






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

已领礼包: 10247个

财富等级: 富甲天下

发表于 2014-4-17 08:56:03 | 显示全部楼层
本帖最后由 zxq0220 于 2014-4-17 09:00 编辑

  1. <P>(defun bz (/ *error* name1 name2 name3)
  2.   (defun *error* (msg) ;将描述错误的字符串存入变量msg
  3.     (entdel name1) (entdel name2) (if name3 (entdel name3))
  4.     (princ "错误: ")(princ msg)) ;打印错误信息
  5.   (setq ty (getvar "TEXTSTYLE"))
  6.   (setq kd1 (caadr (textbox (list '(0 . "text")(cons 1 txt1)(cons 40 th)(cons 41 0.7)(cons 7 ty)))))
  7.    ;字高th,字宽高比0.7,可以自己设置,字体为当前字体
  8.   (setq kd2 (caadr (textbox (list '(0 . "text")(cons 1 txt2)(cons 40 th)(cons 41 0.7)(cons 7 ty)))))
  9.    ;字高th,字宽高比0.7,可以自己设置,字体为当前字体
  10.   (setq kd (max kd1 kd2) kd (+ kd 50))
  11.   (setq p (getpoint "\n输入基点:"))
  12.   (setq pd t)
  13.   (while pd
  14.     (setq gr (grread t 4 1) mode (car gr) pt (cadr gr))
  15.     (if (= kd3 0) (setq kd kd1))
  16.     (if (and (listp pt) (>= (car pt) (car p))) (progn
  17.       (setq p0 (polar pt 0 kd))
  18.       (setq p1 (polar pt 0 (/ (- kd kd1) 2)) p1 (polar p1 (angtof "90") 50))
  19.       (setq p2 (polar pt 0 (/ (- kd kd2) 2)) p2 (polar p2 (angtof "270") 350))))
  20.     (if (and (listp pt) (< (car pt) (car p))) (progn
  21.       (setq p0 (polar pt pi kd))
  22.       (setq p1 (polar p0 0 (/ (- kd kd1) 2)) p1 (polar p1 (angtof "90") 50))
  23.       (setq p2 (polar p0 0 (/ (- kd kd2) 2)) p2 (polar p2 (angtof "270") 350))))
  24.     (if (= mode 5) (progn
  25.       (if name1 (entdel name1))
  26.       (entmake (list '(0 . "LWPOLYLINE")'(100 . "AcDbEntity")'(100 . "AcDbPolyline")'(90 . 3)
  27.         (cons 10 p)(cons 10 pt)(cons 10 p0)))
  28.       (setq name1 (entlast))
  29.       (if name2 (entdel name2))
  30.       (entmake (list '(0 . "text")(cons 1 txt1)(cons 40 th)(cons 41 0.7)(cons 10 p1)(cons 7 ty)))
  31.       ;字高th,字宽高比0.7,可以自己设置,字体为当前字体
  32.       (setq name2 (entlast))
  33.       (if name3 (entdel name3))
  34.       (if (= kd3 1) (entmake (list '(0 . "text")(cons 1 txt2)(cons 40 th)(cons 41 0.7)(cons 10 p2)(cons 7 ty))))
  35.       ;字高th,字宽高比0.7,可以自己设置,字体为当前字体
  36.       (if (= kd3 1) (setq name3 (entlast)))))
  37.     (if (= mode 3) (setq pd nil))
  38.     (if (or (= mode 2) (= mode 25)) (progn (setq pd nil) (entdel name1) (entdel name2) (if name3 (entdel name3)))))
  39.   (princ))</P>
  40. <P>(defun getdata ()
  41.   (setq txt1 (get_tile "a1"))
  42.   (setq txt2 (get_tile "a2"))
  43.   (setq kd3 (get_tile "a3"))
  44.   (setq th (read(get_tile "tx_hig")))
  45. )
  46. (defun c:yxbz ()
  47.   ;(步骤1)建立临时对话框
  48.   (setq tempname (vl-filename-mktemp "temp.dcl") filen (open tempname "w"))
  49.   (foreach stream
  50.     '("yxbz:dialog{"
  51.       "\n  label="动态引线标注";"
  52.       "\n  :edit_box {key="a1"; label="线上文字:"; width=40 ;}"
  53.       "\n  :toggle {key="a3"; label="增加线下文字"; value="0";}"
  54.       "\n  :edit_box {key="a2"; label="线下文字:"; width=40; is_enabled = false;}"
  55.       "\n  :edit_box{label="文字高:"; key="tx_hig"; value="2.5"; edit_width = 4; }"
  56.       "\n  ok_cancel;}")
  57.   (princ stream filen))
  58.   (close filen)
  59.   (setq dclname tempname)
  60.   ;(步骤2)加载并显示对话框
  61.   (setq dcl_re (load_dialog dclname))
  62.   (if (not (new_dialog "yxbz" dcl_re)) (exit))
  63.   ;(步骤3)定义对话框控件(运用set_tile、action_tile、mode_tile、get_tile等函数)
  64.   (if txt1 (set_tile "a1" txt1) (set_tile "a1" "动态标注"))
  65.   (if txt2 (set_tile "a2" txt2) (set_tile "a2" "动态标注"))
  66.   (if kd3 (set_tile "a3" (rtos kd3))) ;注意set_tile函数中赋值均为字符串(带双引号),就连关键词也要加上双引号。
  67.   (if (= kd3 0) (mode_tile "a2" 1))
  68.   (if (= kd3 1) (mode_tile "a2" 0))
  69.   (action_tile "a3" "(if (= (get_tile "a3") "0") (mode_tile "a2" 1) (mode_tile "a2" 0))") ;点击时才起作用
  70.   (action_tile "accept" "(getdata)(done_dialog 1)")
  71.   (action_tile "cancel" "(done_dialog)")
  72.   ;(步骤4)激活并卸载对话框,并进行对话框隐藏后的操作。
  73.   (setq std (start_dialog))
  74.   (unload_dialog dcl_re)
  75.   (vl-file-delete dclname)
  76.   (if (= std 1) (bz))
  77.   (princ)
  78. </P>

点评

不行了,运行一次,再次运行就出现: Command: YXBZ ; error: bad argument type: numberp: "1"  详情 回复 发表于 2014-4-17 09:09
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 3199个

财富等级: 富可敌国

 楼主| 发表于 2014-4-17 09:09:34 | 显示全部楼层
本帖最后由 lucas3 于 2014-4-17 09:11 编辑

不行了,运行一次,再次运行就出现:
Command:  YXBZ ; error: bad argument type: numberp: "1"

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2014-4-17 09:31:01 | 显示全部楼层
为什么不学用OPENDCL呢?

点评

openDCL做出的对话框是很漂亮,但对使用者 没那么方便呀,  详情 回复 发表于 2014-4-17 09:33
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 3199个

财富等级: 富可敌国

 楼主| 发表于 2014-4-17 09:33:30 | 显示全部楼层
newer 发表于 2014-4-17 09:31
为什么不学用OPENDCL呢?

openDCL做出的对话框是很漂亮,但对使用者 没那么方便呀,

点评

对使用者有什么不方便的? 对用的人是否方便都是开发人决定的。  详情 回复 发表于 2014-4-17 09:38
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2014-4-17 09:38:45 | 显示全部楼层
lucas3 发表于 2014-4-17 09:33
openDCL做出的对话框是很漂亮,但对使用者 没那么方便呀,

对使用者有什么不方便的?
对用的人是否方便都是开发人决定的。

点评

对开发人员也许方便些,但对使用者,还需要确定opendcl版本,需要安装opendcl 版主,能否帮看下一楼的代码,就想将字高由对话框上设定。  详情 回复 发表于 2014-4-17 09:49
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 3199个

财富等级: 富可敌国

 楼主| 发表于 2014-4-17 09:49:00 | 显示全部楼层
newer 发表于 2014-4-17 09:38
对使用者有什么不方便的?
对用的人是否方便都是开发人决定的。

对开发人员也许方便些,但对使用者,还需要确定opendcl版本,需要安装opendcl
版主,能否帮看下一楼的代码,就想将字高由对话框上设定。

点评

装OPENDCL都是开发人员做的。其实也不是装OPENDCL了,把需要的ARX和你的程序打包一起给使用者就OK了。  详情 回复 发表于 2014-4-17 10:18
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2014-4-17 10:18:18 | 显示全部楼层
lucas3 发表于 2014-4-17 09:49
对开发人员也许方便些,但对使用者,还需要确定opendcl版本,需要安装opendcl
版主,能否帮看下一楼的代 ...

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-24 22:38 , Processed in 0.294607 second(s), 50 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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