找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

楼主: lucas3

[已解决] 判断线型的问题

[复制链接]
发表于 2015-1-9 19:30:50 | 显示全部楼层
lucas3 发表于 2015-1-9 18:20
大师,重新使用28楼的程序,并将29楼处的替换掉,问题还存在,还是参数太少, 点取消还是要选择对象

  1. (defun c:tt (/ ss dcl fn id klst)
  2.   (defun _make
  3.          (e / r pcen dis lst str xk mr cel p1 p2 p3 p4 cir ln1 ln2)
  4.     (setq lst '((2.5 "M3" 0.06 1.5)
  5.                 (3.3 "M4" 0.08 1.5)
  6.                 (4.2 "M5" 0.1 2.5)
  7.                 (5.0 "M6" 0.12 3.0)
  8.                 (6.8 "M8" 0.16 4.0)
  9.                 (8.5 "M10" 0.2 5.0)
  10.                 (10.5 "M12" 0.24 6.0)
  11.                 (12.0 "M14" 0.28 7.0)
  12.                 (14.0 "M16" 0.32 8.0)
  13.                 (15.5 "M18" 0.36 9.0)
  14.                 (17.5 "M20" 0.4 10.0)
  15.                )
  16.     )
  17.     (setq r    (vlax-get e 'radius)
  18.           pcen (vlax-get e 'center)
  19.     )
  20.     (mapcar 'set '(str xk mr) (cdr (assoc r lst)))
  21.     (setq cel (if (eq (setq lt (vlax-get e "linetype"))
  22.                       "ByLayer"
  23.                   )
  24.                 (vlax-get
  25.                   (vla-item (fy:aclayers) (vlax-get e "layer"))
  26.                   "linetype"
  27.                 )
  28.                 lt
  29.               )
  30.     )
  31.     (setq dis (* r 1.1)
  32.           p1  (polar pcen 0. dis)
  33.           p2  (polar pcen _pi2 dis)
  34.           p3  (polar pcen pi dis)
  35.           p4  (polar pcen (- _pi2) dis)
  36.     )
  37.     (if        (member "isBlock" slst)
  38.       (setq space (vla-add (fy:acblocks) (vlax-3d-point pcen) "*U"))
  39.       (setq space (fy:acms))
  40.     )
  41.     (setq cir (vlax-invoke space 'addcircle pcen r)
  42.           arc (vlax-invoke space 'addarc pcen mr 4.71239 3.14159)
  43.           ln1 (vlax-invoke space 'addline p1 p3)
  44.           ln2 (vlax-invoke space 'addline p2 p4)
  45.     )
  46.     (mapcar '(lambda (x)
  47.                (vlax-put (car x) 'layer "screw")
  48.                (vlax-put (car x) 'color (cadr x))
  49.                (vlax-put (car x) "linetype" (caddr x))
  50.                (vlax-put (car x) "linetypescale" xk)
  51.              )
  52.             (list (list cir 33 cel)
  53.                   (list arc 3 cel)
  54.                   (list ln1 1 "center")
  55.                   (list ln2 1 "center")
  56.             )
  57.     )
  58.     (if        (member "isText" slst)
  59.       (progn
  60.         (setq txt (vlax-invoke space 'AddText str pcen (* mr 0.4)))
  61.         (vla-put-alignment txt acAlignmentTopCenter)
  62.         (vla-put-textalignmentpoint
  63.           txt
  64.           (vlax-3d-point (polar pcen (- _pi2) (* mr 0.17)))
  65.         )
  66.       )
  67.     )
  68.     (if        (member "isBlock" slst)
  69.       (vlax-invoke
  70.         (fy:acspace)
  71.         'insertblock
  72.         pcen
  73.         (vla-get-name space)
  74.         1.
  75.         1.
  76.         1.
  77.         0.
  78.       )
  79.     )
  80.   )
  81.   (if (not slst)
  82.     (setq slst '("isErased" "isText" "isBlock"))
  83.   )
  84.   (setq        dcl  '("screw:dialog{"
  85.                "label = \"参数设置\";"
  86.                " :toggle{ key = \"isErased\"; label = \"删除原线条\";}"
  87.                " :toggle { key = \"isText\"; label = \"显示文字\";}"
  88.                " :toggle { key = \"isBlock\"; label = \"生成块\";}"
  89.                " ok_cancel;"
  90.                "}"
  91.               )
  92.         klst '("isErased" "isText" "isBlock")
  93.         fn   (xd::dcl:make dcl)
  94.         id   (xd::dcl:load fn "screw")
  95.   )
  96.   (xd::Dcl:toggleaction
  97.     klst ;_key 列表
  98.     'slst ;_记录 勾选项 的变量,做全局变量时下次有默认值
  99.     nil
  100.   ) ;_设置 Toggle  并定义 Action
  101.   (fy:begin)
  102.   (if (and (= (xd::dcl:start id fn)
  103.               1
  104.            )
  105.            (setq ss (ssget '((0 . "circle")
  106.                              (-4 . "<or")
  107.                              (40 . 2.5)
  108.                              (40 . 3.3)
  109.                              (40 . 4.2)
  110.                              (40 . 5.0)
  111.                              (40 . 6.8)
  112.                              (40 . 8.5)
  113.                              (40 . 10.5)
  114.                              (40 . 12.0)
  115.                              (40 . 14.0)
  116.                              (40 . 15.5)
  117.                              (40 . 17.5)
  118.                              (-4 . "or>")
  119.                             )
  120.                     )
  121.            )
  122.       )
  123.     (progn
  124.       (if (not (tblsearch "style" "txt"))
  125.         (command ".style"    "txt"         "txt.shx,gbcbig.shx"
  126.                  0.0             1.0         0.0             "n"
  127.                  "n"             "n"
  128.                 )
  129.       )
  130.       (if (not (tblsearch "ltype" "hidden"))
  131.         (vla-load (fy:acltypes) "hidden" "acadiso.lin")
  132.       )
  133.       (if (not (tblsearch "ltype" "center"))
  134.         (vla-load (fy:acltypes) "center" "acadiso.lin")
  135.       )
  136.       (if (not (tblsearch "layer" "screw"))
  137.         (vla-add (fy:aclayers) "screw")
  138.       )
  139.       (mapcar '(lambda (x) (_make x)) (fy:cset->objs))
  140.       (if (member "isErased" slst)
  141.         (command ".erase" ss "")
  142.       )
  143.     )
  144.   )
  145.   (princ)
  146. )
  147. ;|
  148. 设置 toggle 控件
  149. _$klst ---- 控件名或控件名列表
  150. _$symL ---- 值为控件名或控件名列表的变量名
  151.             含有该控件的为勾选,否则不选
  152. |;
  153. (defun XD::DCL:ToggleInit (_$klst _$symL)
  154.   (if (listp _$klst)
  155.     (mapcar '(lambda (x)
  156.                (if (and _$symL (member x (vl-symbol-value _$symL)))
  157.                  (set_tile x "1")
  158.                  (set_tile x "0")
  159.                )
  160.              )
  161.             _$klst
  162.     )
  163.     (set_tile _$klst
  164.               (if (and _$syml (vl-symbol-value _$symL))
  165.                 "1"
  166.                 "0"
  167.               )
  168.     )
  169.   )
  170. )
  171. (defun XD::DCL:ToggleAction
  172.        (_$klst _$symL _$callbackL / _sToggleAction)
  173.   (defun _sToggleAction        (_$key _$symL _$callbackL)
  174.     (action_tile
  175.       _$key
  176.       (strcat "(if (= $value \"0\")"
  177.               "(setq "
  178.               (vl-symbol-name _$symL)
  179.               "(vl-remove $key "
  180.               (vl-symbol-name _$symL)
  181.               "))(if (not (member $key "
  182.               (vl-symbol-name _$symL)
  183.               "))(setq "
  184.               (vl-symbol-name _$symL)
  185.               "(cons $key "
  186.               (vl-symbol-name _$symL)
  187.               "))))"
  188.               (if _$callbackL
  189.                 (strcat "(" _$callbackL ")")
  190.                 ""
  191.               )
  192.       )
  193.     )
  194.   )
  195.   (XD::DCL:ToggleInit _$klst _$symL)
  196.   (if (listp _$klst)
  197.     (while _$klst
  198.       (_sToggleAction (car _$klst) _$symL (car _$callbackL))
  199.       (setq _$klst        (cdr _$klst)
  200.             _$callbackL        (cdr _$callbackL)
  201.       )
  202.     )
  203.     (_sToggleAction _$klst _$symL _$callbackL)
  204.   )
  205. )
  206. ;;将DCL表写出文件
  207. (defun XD::DCL:Make (lst / flname ofile)
  208.   (setq        FlName (vl-filename-mktemp (strcat "FYDCL" ".dcl"))
  209.         oFile  (open FlName "w")
  210.   )
  211.   (foreach fStream lst (write-line fStream oFile)) ;写入文件
  212.   (close oFile) ;_关闭文档
  213.   flname
  214. )

  215. ;;加载 DCL 文件
  216. (defun XD::DCL:Load (flname na / dcl_id)
  217.   (setq dcl_id (load_dialog FlName))
  218.   (if (not (new_dialog na dcl_id ""))
  219.     (progn (alert "对话框加载失败!") (exit))
  220.   )
  221.   dcl_id
  222. )
  223. ;;用于不返回的 DCL
  224. (defun XD::Dcl:Start (id flname / dg)
  225.   (setq dg (start_dialog))
  226.   (unload_dialog id) ;_卸载对话框
  227.   (vl-file-delete FlName) ;_删除DCL文件
  228.   dg
  229. )

点评

大师,刚才说的问题解决了,但是数据方面有问题,只能选中直径为5的圆,其它的圆如,2.5,3.3,4.2, 6.8 ,8.5 ,10.5 ,12,14, 15.5, 17.5 这些圆都选不上, 另外, 5的圆,程序将小径画成直径为3的弧了,标文字  详情 回复 发表于 2015-1-9 20:21

评分

参与人数 1D豆 +5 收起 理由
lucas3 + 5 技术引导讨论和指点奖!

查看全部评分

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

使用道具 举报

已领礼包: 3198个

财富等级: 富可敌国

 楼主| 发表于 2015-1-9 20:21:27 | 显示全部楼层
本帖最后由 lucas3 于 2015-1-20 16:17 编辑

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

使用道具 举报

已领礼包: 14个

财富等级: 恭喜发财

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-28 03:56 , Processed in 0.364467 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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