找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 5049|回复: 32

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

[复制链接]

已领礼包: 3199个

财富等级: 富可敌国

发表于 2014-12-11 10:10:52 | 显示全部楼层 |阅读模式
悬赏20D豆已解决
本帖最后由 lucas3 于 2014-12-11 10:13 编辑

一个根据圆生成螺纹的代码,程序中判断圆的线型是HIDDEN ,生成的螺纹线也就是HIDDEN(话称不可见螺纹)
但有时,有些圆的图层已经定义过线型是HIDDEN, 实际就是Bylayer ,这样,程序就不能识别为HIDDEN线型了,生成的螺纹线就是continuous 线型的(可见螺纹),所以程序不能仅仅判断是否HIDDEN线型,如果是Bylayer ,还要看它的图层中定义的线型,如果图层中定义的线型是HIDDEN,生成的螺纹线也应该是HIDDEN

不知以上的解释,大师能不能看懂? 希望大师帮忙解决一下,谢谢!!!

sshot-5.png

===============================分割线
sshot-1.png
  1. ;;http://bbs.mjtd.com/thread-100947-1-1.html
  2. (defun c:sww()
  3.   ;----系统变量备份----
  4.   (setvar "cmdecho" 0);_关闭命令提示
  5.   (command "undo" "be")
  6.   (setq osmode_bak (getvar "osmode"));_记录捕捉
  7.   (setvar "osmode" 0);_关闭捕捉
  8.   (setq clayer_bak (getvar "clayer"));_记录当前图层
  9.   (setq cecolor_bak (getvar "cecolor"));_记录当前颜色
  10.   (setq celtype_bak (getvar "celtype"));_记录当前线型
  11.   (setq textstyle_bak (getvar "textstyle"));_记录当前文字样式
  12.   (setq chksty (tblsearch "style" "TXT"))
  13.   (if (= chksty nil)
  14.     (entmake (list '(0 . "STYLE") '(100 . "AcDbSymbolTableRecord") '(100 . "AcDbTextStyleTableRecord") (cons 2 "TXT")
  15.        '(70 . 0) (cons 40 1) (cons 41 1) '(3 . "txt.shx") '(4 . "gbcbig.shx")
  16.     )
  17.   )
  18.     )
  19.   (setq chklty (tblsearch "LTYPE" "CENTER"))
  20.   (if (= chklty nil)
  21.     (entmake (list '(0 . "LTYPE") '(100 . "AcDbSymbolTableRecord")  '(100 . "AcDbLinetypeTableRecord")
  22.        (cons 2 "CENTER")  '(3 . "Center ____ _ ____ _ ____ _ ____ _ ____ _ ____")
  23.        '(70 . 0)  '(73 . 2) '(40 . 15.0) '(49 . 10.0)  '(74 . 0) '(49 . -5.0) '(74 . 0)
  24.        )
  25.        )
  26.     )
  27.   (setq ss (ssget '((0 . "CIRCLE")))
  28.        i  0)
  29.   (repeat (sslength ss)
  30.    (setq ename (ssname ss i)
  31.          dat (entget ename)
  32.          pt (usdxf 10 dat)
  33.          r (dxf 40 dat)
  34.    cel (dxf 6 dat)
  35.    D (* R 2)
  36.    )
  37.     (if (or (= cel "DASHED") (= cel "HIDDEN"))
  38.       (setq cel "HIDDEN")
  39.       (setq cel "Continuous")
  40.       )
  41.     (cond ((= d  2.5)
  42.      (setq text "M3")
  43.      (setq xk 0.06)
  44.      (setq mr 1.5)
  45.      (makent)
  46.      )
  47.     ((= d 3.3)
  48.      (setq text "M4")
  49.      (setq xk 0.08)
  50.      (setq mr 2)
  51.      (makent)
  52.     )
  53.     ((= d 4.2)
  54.      (setq text "M5")
  55.      (setq xk 0.1)
  56.      (setq mr 2.5)
  57.      (makent)
  58.      )
  59.     ((= d 5)
  60.      (setq text "M6")
  61.      (setq xk 0.12)
  62.      (setq mr 3)
  63.      (makent)
  64.      )
  65.     ((= d 6.8)
  66.      (setq text "M8")
  67.      (setq xk 0.16)
  68.      (setq mr 4)
  69.      (makent)
  70.      )
  71.     ((= d 8.5)
  72.      (setq text "M10")
  73.      (setq xk 0.2)
  74.      (setq mr 5)
  75.      (makent)
  76.      )
  77.     ((= d 10.5)
  78.      (setq text "M12")
  79.      (setq xk 0.24)
  80.      (setq mr 6)
  81.      (makent)
  82.      )
  83.     ((= d 12)
  84.      (setq text "M14")
  85.      (setq xk 0.28)
  86.      (setq mr 7)
  87.      (makent)
  88.      )
  89.     ((= d 14)
  90.      (setq text "M16")
  91.      (setq xk 0.32)
  92.      (setq mr 8)
  93.      (makent)
  94.      )
  95.     ((= d 15.5)
  96.      (setq text "M18")
  97.      (setq xk 0.36)
  98.      (setq mr 9)
  99.      (makent)
  100.      )
  101.     ((= d 17.5)
  102.      (setq text "M20")
  103.      (setq xk 0.4)
  104.      (setq mr 10)
  105.      (makent)
  106.      )
  107.     )
  108.     (setq i (1+ i))
  109.    )
  110.   ;----系统变量还原----
  111.   (setvar "osmode" osmode_bak);_还原捕捉
  112.   (setvar "clayer" clayer_bak);_还原图层
  113.   (setvar "cecolor" cecolor_bak);_还原颜色
  114.   (setvar "celtype" celtype_bak);_还原线型
  115.   (setvar "textstyle" textstyle_bak);_还原文字样式
  116.   (command "undo" "e")
  117.   (setvar "cmdecho" 1);_打开命令提示
  118.   (princ);_关闭程序返回值
  119.   )

  120. (defun makent ()
  121.   ;;;计算点
  122.   (setq dist (* mr 1.1))
  123.   (setq texth (* mr 0.4))
  124.   (setq pt1 (polar pt 0 dist))
  125.   (setq pt2 (polar pt (* PI 0.5) dist))
  126.   (setq pt3 (polar pt pi dist))
  127.   (setq pt4 (polar pt (* 1.5 pi) dist))
  128.   (setq tept1 (polar pt pi (* mr 2 0.17)))
  129.   (setq textpt (polar tept1 (* 1.5 pi) (* mr 2 0.25)))
  130.   
  131.   ;生成圆
  132.   (entmake (list (cons 0 "CIRCLE")
  133.      (cons 67 0)
  134.      (CONS 62 33)
  135.      (cons 8 "screw")
  136.      (cons 6  cel)
  137.      (cons 48 xk)
  138.      (cons 10 pt)
  139.      (cons 40 r)
  140.      )
  141.      )
  142.   (setq en1 (entlast))
  143.   ;生成中心线
  144.   (entmake (list (cons 0 "LINE")
  145.      (cons 8 "screw")
  146.      (CONS 62 1)
  147.      (cons 6  "CENTER")
  148.      (cons 48 xk)
  149.      (cons 10 pt1)
  150.      (cons 11 pt3)
  151.       )
  152.       )
  153.   (setq en2 (entlast))
  154.   ;生成中心线
  155.   (entmake (list (cons 0 "LINE")
  156.      (cons 8 "screw")
  157.      (CONS 62 1)
  158.      (cons 6  "CENTER")
  159.      (cons 48 xk)
  160.      (cons 10 pt2)
  161.      (cons 11 pt4)
  162.       )
  163.       )
  164.   (setq en3 (entlast))
  165.   ;生成圆弧
  166.   (entmake (list (cons 0 "ARC")
  167.      (cons 8 "screw")
  168.      (CONS 62 92)
  169.      (cons 6 cel)
  170.      (cons 48 xk)
  171.      (cons 10 pt)
  172.      (cons 40 mr)
  173.      (list 210 0.0 0.0 1.0)
  174.      (cons 50 4.71239)
  175.      (cons 51 3.14159)
  176.       )
  177.       )
  178.   (setq en4 (entlast))
  179.   ;;;生成文字
  180.   (entmake (list (cons 0 "TEXT")
  181.      (cons 8 "screw")
  182.      (CONS 62 6)
  183.      (cons 10 textpt)
  184.      (cons 40 texth)
  185.      (cons 1 text)
  186.      (cons 7 "TXT")
  187.      (cons 41 1)
  188.      (cons 51 0.0)
  189.      (cons 71 0)
  190.      (cons 72 0)
  191.      (cons 73 0)
  192.      (list 210 0.0 0.0 1.0)
  193.       )
  194.       )
  195.   (setq en5 (entlast))
  196.   ;;;做成块
  197.   (setq sslist (ssadd))
  198.   (ssadd en1 sslist)
  199.   (ssadd en2 sslist)
  200.   (ssadd en3 sslist)
  201.   (ssadd en4 sslist)
  202.   (ssadd en5 sslist)
  203.   (emkblk sslist pt text )
  204.   (princ)
  205.   )

  206. ;13、entmake生成普通块
  207. ;http://bbs.mjtd.com/forum.php?mod=viewthread&tid=92482
  208. ;by langjs
  209. (defun emkblk (ss pt name / i)
  210.   (setvar "cmdecho" 0)
  211.   (entmake (list '(0 . "block") (cons 2 name) '(70 . 0) (cons 10 pt)))
  212.   (repeat (setq i (sslength ss))    (entmake (cdr (entget (ssname ss (setq i (1- i))))))  )
  213.   (entmake '((0 . "ENDBLK")))
  214.   (command "_.erase" ss "")
  215.   (entmake (list '(0 . "INSERT") (cons 8 "screw") (cons 2 name) (cons 10 pt)))
  216.   (setvar "cmdecho" 1)
  217. )

  218. (defun usdxf (n entt) (cdr(assoc n entt)))
  219. (defun dxf (m dat) (cdr (assoc m dat)))
  220. (defun dxfucs (m dat)  (trans (cdr (assoc m dat)) 0 1))

最佳答案

查看完整内容

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

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-12-11 10:10:53 | 显示全部楼层
本帖最后由 st788796 于 2014-12-11 21:00 编辑
lucas3 发表于 2014-12-11 12:42
删除原线条:意思是, 圆生成螺纹后,将之前的圆删除掉,程序默认没有删除
显示文字:是否显示螺纹 ...

给你用ODCL写了个,这个应该是 toggle 吧
  1. (defun c:tt (/ ss myerr olderr)
  2.   (defun myerr (msg)
  3.     (princ "\n*cancel*")
  4.     (dcl_form_close screw)
  5.     (setq *error* olderr)
  6.     (princ)
  7.   )
  8.   (defun _make (e / r pcen dis lst nl str xk mr cel p1 p2 p3 p4 cir ln)
  9.     (setq lst '((2.5 "M3" 0.06 1.5)
  10.                 (3.3 "M4" 0.08 2.0)
  11.                 (4.2 "M5" 0.1 2.5)
  12.                 (5.0 "M6" 0.12 3.0)
  13.                 (6.8 "M8" 0.16 4.0)
  14.                 (8.5 "M10" 0.2 5.0)
  15.                 (10.5 "M12" 0.24 6.0)
  16.                 (12.0 "M14" 0.28 7.0)
  17.                 (14.0 "M16" 0.32 8.0)
  18.                 (15.5 "M18" 0.36 9.0)
  19.                 (17.5 "M20" 0.4 10.0)
  20.                )
  21.     )
  22.     (mapcar 'set
  23.             '(r pcen)
  24.             (xdrx_getpropertyvalue e "radius" "center")
  25.     )
  26.     (if        (setq nl (cdr (assoc (distof (rtos (* r 2) 2 2)) lst)))
  27.       (progn
  28.         (mapcar        'set
  29.                 '(str xk mr)
  30.                 (cdr (assoc (distof (rtos (* r 2) 2 2)) lst))
  31.         )
  32.         (setq
  33.           cel
  34.            (if (eq (car (setq lt (xdrx_getpropertyvalue e "linetype")))
  35.                    "ByLayer"
  36.                )
  37.              (xdrx_getpropertyvalue
  38.                (cadr (xdrx_getpropertyvalue e "layer"))
  39.                "linetype"
  40.              )
  41.              (car lt)
  42.            )
  43.         )
  44.         (setq dis (* mr 1.1)
  45.               p1  (polar pcen 0. dis)
  46.               p2  (polar pcen _pi2 dis)
  47.               p3  (polar pcen pi dis)
  48.               p4  (polar pcen (- _pi2) dis)
  49.               cir (xdrx_circle_make pcen r)
  50.               arc (xdrx_arc_make pcen mr 4.71239 3.14159)
  51.               ln  (xdrx_line_make (list p1 p3) (list p2 p4))
  52.         )
  53.         (xdrx_setpropertyvalue
  54.           cir "layer" "screw" "color" 33 "linetype" cel        "LinetypeScale"
  55.           xk)
  56.         (xdrx_setpropertyvalue
  57.           arc "layer" "screw" "color" 3        "linetype" cel "LinetypeScale"
  58.           xk)
  59.         (mapcar        '(lambda (x)
  60.                    (xdrx_setpropertyvalue
  61.                      x                 "layer"     "screw"         "color"
  62.                      1                 "linetype"  "CENTER"         "LinetypeScale"
  63.                      xk
  64.                     )
  65.                  )
  66.                 (xdrx_pickset->ents ln)
  67.         )
  68.         (ssadd arc ln)
  69.         (ssadd cir ln)
  70.         (if (= (dcl_control_getvalue screw_form1_displaytext) 1)
  71.           (progn
  72.             (setq txt (xdrx_text_make pcen str "TXT" (* mr 0.4) 0.0))
  73.             (xdrx_text_setvermode txt 3)
  74.             (xdrx_text_sethozmode txt 1)
  75.             (xdrx_text_setalignmentpoint
  76.               txt
  77.               (polar pcen (- _pi2) (* mr 0.17))
  78.             )
  79.             (ssadd txt ln)
  80.           )
  81.         )
  82.         (if (= (dcl_control_getvalue screw_form1_isBlock) 1)
  83.           (xdrx_block_make ln pcen t)
  84.         )
  85.       )
  86.     )
  87.   )
  88.   (dcl_project_import
  89.     '("YWt6AwUNAAB1VXLYBuKTKzUxLT9qgFCuTHRWv+7mxu56rsRe3zskDp+8dnVr0x7892WFxnubq/Y0"
  90.       "D181aca48/cBvDmcPG0oxI15hn0yaqPHL9ehZxWZoA098l9Ycw9YPbAJIA2w4tHp/auTVBRZyPJ8"
  91.       "EL+5dEJ+kST/A1yuqknyagxK6U70Wqxm3iXk5Frb7baOalabL9pIOxfmzDHXPvOx5mpDNKKI1NQa"
  92.       "Ui4p3CH4iFrDW0QdyRoyDelW864V9gX+hF8EWk82tU6bL5iwLfTfM+ykPMcOerg9bRQ1pGS5bKUk"
  93.       "HtIH/dCh6OT15zp1fLXSpyoIAx5ALTvCeEPHuaIths+8QWrA1Y5YVXCgqZuQ5WuCIIfRVqKS+5UD"
  94.       "n5xTANiODfvhVIIumwHajkn7VXS5w06A0KDNCbkfwnMlYoUyvKsmn8996CkVbTMavo8PuJvmraEf"
  95.       "ujNOiwxQx6rcSo8u1Oiz18yBFAMPs5IJEzY+GhL138aIdzLf+RnoO7INiZ5SgbC+otKZz4nkW/tp"
  96.       "lIsGIfsQDbRA0Q7+UCl7CdUAzHDpeyEoiAD7UUQCI44HO/F1dDFWAjAfBp8JdXFnmMYEqTrmgAiq"
  97.       "go7eI0pZitazc1IdsvAF51Ejgp3Gi9FHToBvOrhhledSEELnBANBSR1EarGlaxAq/MIKYxD3Af5O"
  98.       "+bvA35SQKIjSXLrElEU+1jDPEcWFE8Cx1ODThEWC9IHWdo+7ixmDQaePRaLZnIUrw398GY9xdgKy"
  99.       "s4sRd1OLqnejX+R236X0bjTpt/tiKA/7ktaeiBAW4z6K1QjEChSL/0EDE1HspOwOce8Ebh8spbEq"
  100.       "3eyE/hZc2hBrNOFfbeiGUQMQSRpA+nbn5fGgl7IxMYHZDJ0tB3IfVIncj9ZSlVmqIfwM"
  101.      )
  102.   )
  103.   (dcl_form_show screw)
  104.   (apply 'dcl_control_setpos
  105.          (cons screw (last (xdrx_document_pixelbox)))
  106.   )
  107.   ;;Main Program
  108.   (setq        olderr        *error*
  109.         *error*        myerr
  110.   )
  111.   (if (setq ss (ssget '((0 . "circle"))))
  112.     (progn
  113.       (xdrx_textstyle_make "txt" "txt.shx" "gbcbig.shx" 0.0 1.0)
  114.       (xdrx_linetype_load "Hidden")
  115.       (xdrx_linetype_load "Center")
  116.       (mapcar '(lambda (x) (_make x)) (xdrx_pickset->ents ss))
  117.     )
  118.   )
  119.   (if (= (dcl_control_getvalue screw_form1_iserased) 1)
  120.     (xdrx_entity_delete ss)
  121.   )
  122.   (dcl_form_close screw)
  123.   (setq *error* olderr)
  124.   (princ)
  125. )
screw.gif

点评

整复杂了哈,LISP都不会,现在又来API+ODCL, 更摸不到头脑了,以前API只有一个单文件XDRX_API.R2007.arx ,现在下载下来的是一个文件夹,好多文件, 装了ODCL,不会玩,没找到opendcl.xx.arx, 试着整了  详情 回复 发表于 2014-12-12 09:16
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-12-11 10:23:48 来自手机 | 显示全部楼层
获取linetype,如果为Bylayer再获取LayerId的linetype

点评

您好,ST大师, 您有时间帮我改改贝,谢谢! 另外想加入个设定的对话框,运行程序后,可输入S 弹出设定: 删除原线条:意思是, 圆生成螺纹后,将之前的圆删除掉 显示文字:是否显示螺纹大小的文字,如M3  详情 回复 发表于 2014-12-11 10:46
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 3199个

财富等级: 富可敌国

 楼主| 发表于 2014-12-11 10:46:24 | 显示全部楼层
st788796 发表于 2014-12-11 10:23
获取linetype,如果为Bylayer再获取LayerId的linetype

您好,ST大师, 您有时间帮我改改贝,谢谢!

另外想加入个设定的对话框,运行程序后,可输入S 弹出设定:

  1. temp:dialog {
  2.     label = "设置" ;
  3.     :boxed_column {
  4.         label = "选项" ;
  5.         :radio_button {
  6.             key = "ddd" ;
  7.             label = "删除原线条" ;
  8.         }
  9.         :radio_button {
  10.             key = "dtxt" ;
  11.             label = "显示文字" ;
  12.         }
  13.         :radio_button {
  14.             key = "mblk" ;
  15.             label = "生成块" ;
  16.         }
  17.     }
  18.     ok_cancel;
  19. }


删除原线条:意思是, 圆生成螺纹后,将之前的圆删除掉
显示文字:是否显示螺纹大小的文字,如M3 ,M4 ,M5
生成块: 选中后,最后生成的是块,不选中,就不要生成块

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

使用道具 举报

发表于 2014-12-11 10:46:41 | 显示全部楼层
不知是否理解,给你个判断函数,加进自己的判断部分即可
  1. ;;;(setq obj      (car (entsel))
  2. ;;;      typename "HIDDEN"
  3. ;;;      )
  4. ;;;(l_type obj typename)
  5. ;;;obj图元名或对象名
  6. ;;;typename线型名
  7. ;;;返回值t符合线型名,nil不符合
  8. (defun l_type (obj typename / lay ltype btype)
  9.   (if (= (type obj) 'ENAME)
  10.     (setq obj (vlax-ename->vla-object obj))
  11.     )
  12.   (setq        lay   (vla-get-layer obj)
  13.         ltype (cdr (assoc 6 (entget (tblobjname "LAYER" lay))))
  14.         btype (vla-get-linetype obj)
  15.         )
  16.   (if (= btype typename)
  17.     t
  18.     (if        (and (= btype "ByLayer") (= ltype typename))
  19.       t
  20.       nil
  21.       )
  22.     )
  23.   )

评分

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

查看全部评分

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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-12-11 11:44:36 | 显示全部楼层
lucas3 发表于 2014-12-11 10:46
您好,ST大师, 您有时间帮我改改贝,谢谢!

另外想加入个设定的对话框,运行程序后,可输入S 弹出设定 ...

你画个示意图吧,看着太繁琐

点评

[attachimg]12007[/attachimg] 删除原线条:意思是, 圆生成螺纹后,将之前的圆删除掉,程序默认没有删除 显示文字:是否显示螺纹大小的文字,如图中M4 ,M5 ,M6,程序默认是显示文字的 生成块: 选中后,最后生  详情 回复 发表于 2014-12-11 12:42
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 3199个

财富等级: 富可敌国

 楼主| 发表于 2014-12-11 12:42:12 | 显示全部楼层
本帖最后由 lucas3 于 2014-12-11 12:47 编辑
st788796 发表于 2014-12-11 11:44
你画个示意图吧,看着太繁琐

1.gif

删除原线条:意思是, 圆生成螺纹后,将之前的圆删除掉,程序默认没有删除
显示文字:是否显示螺纹大小的文字,如图中M4 ,M5 ,M6,程序默认是显示文字的
生成块: 选中后,最后生成的是块,不选中,就不要生成块, 程序默认是生成块


除了之前提到的判断线型的问题,另外
想加入这个设定的对话框,运行程序后,可输入S 弹出设定:
sshot-5.png

  1. temp:dialog {
  2.     label = "设置" ;
  3.     :boxed_column {
  4.         label = "选项" ;
  5.         :radio_button {
  6.             key = "ddd" ;
  7.             label = "删除原线条" ;
  8.         }
  9.         :radio_button {
  10.             key = "dtxt" ;
  11.             label = "显示文字" ;
  12.         }
  13.         :radio_button {
  14.             key = "mblk" ;
  15.             label = "生成块" ;
  16.         }
  17.     }
  18.     ok_cancel;
  19. }
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-12-11 13:09:51 来自手机 | 显示全部楼层
文字哪来的?

点评

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

使用道具 举报

已领礼包: 3199个

财富等级: 富可敌国

 楼主| 发表于 2014-12-11 13:35:15 | 显示全部楼层

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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-12-11 19:36:20 | 显示全部楼层
lucas3 发表于 2014-12-11 13:35
一楼的程序 建立文字样式 写入的

看着太啰嗦,用 API 简化,没有测试
  1. (defun c:tt (/ ss)
  2.   (defun _make (e l / r pcen dis lst str xk mr cel p1 p2 p3 p4 cir ln)
  3.     (setq lst '((2.5 "M3" 0.06 1.5)
  4.                 (3.3 "M4" 0.08 1.5)
  5.                 (4.2 "M5" 0.1 2.5)
  6.                 (5.0 "M6" 0.12 3.0)
  7.                 (6.8 "M8" 0.16 4.0)
  8.                 (8.5 "M10" 0.2 5.0)
  9.                 (10.5 "M12" 0.24 6.0)
  10.                 (12.0 "M14" 0.28 7.0)
  11.                 (14.0 "M16" 0.32 8.0)
  12.                 (15.5 "M18" 0.36 9.0)
  13.                 (17.5 "M20" 0.4 10.0)
  14.                )
  15.     )
  16.     (mapcar 'set
  17.             '(r pcen)
  18.             (xdrx_getpropertyvalue e "radius" "center")
  19.     )
  20.     (mapcar 'set '(str xk mr) (cdr (assoc r lst)))
  21.     (setq
  22.       cel (if (eq (car (setq lt (xdrx_getpropertyvalue e "linetype"))
  23.                        "ByLayer"
  24.                   )
  25.               )
  26.             (xdrx_getpropertyvalue
  27.               (cadr (xdrx_getpropertyvalue e "layer"))
  28.               "linetype"
  29.             )
  30.             (car lt)
  31.           )
  32.     )
  33.     (setq dis (* r 1.1)
  34.           p1  (polar pcen 0. dis)
  35.           p2  (polar pcen _pi2 dis)
  36.           p3  (polar pcen pi dis)
  37.           p4  (polar pcen (- _pi2) dis)
  38.           cir (xdrx_circle_make pcen r)
  39.           arc (xdrx_arc_make pcen mr 4.71239 3.14159)
  40.     )
  41.     (xdrx_setpropertyvalue
  42.       cir "layer" "screw" "color" 33 "linetype"        cel "LinetypeScale" xk)
  43.     (xdrx_setpropertyvalue
  44.       ln "layer" "screw" "color" 92 "linetype" "CENTER"        "LinetypeScale"
  45.       xk)
  46.     (setq ln (xdrx_line_make (list (list p1 p3) (list p2 p4))))
  47.     (xdrx_setpropertyvalue
  48.       ln "layer" "screw" "color" 1 "linetype" "CENTER" "LinetypeScale"
  49.       xk)
  50.     (ssadd arc ln)
  51.     (ssadd cir ln)
  52.     (xdrx_block_make ln pcen t)
  53.   )
  54.   (if (setq ss (ssget '((0 . "circle"))))
  55.     (progn
  56.       (xdrx_textstyle_make "txt" "txt.shx" "gbcbig.shx" 0.0 1.0)
  57.       (xdrx_linetype_load "Hidden")
  58.       (mapcar '(lambda (x) (_make x)) (xdrx_pickset->ents ss))
  59.     )
  60.   )
  61.   (princ)
  62. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 3199个

财富等级: 富可敌国

 楼主| 发表于 2014-12-12 09:16:00 | 显示全部楼层
st788796 发表于 2014-12-11 20:56
给你用ODCL写了个,这个应该是 toggle 吧

整复杂了哈,LISP都不会,现在又来API+ODCL, 更摸不到头脑了,以前API只有一个单文件XDRX_API.R2007.arx ,现在下载下来的是一个文件夹,好多文件,{:soso_e127:} 装了ODCL,不会玩,没找到opendcl.xx.arx, 试着整了下,no function definition: DCL_PROJECT_IMPORT, 头爆炸了....{:soso_e126:}

点评

Opendcl 要装 Runtime 在 ODCL 论坛由 8.10 链接下载,命令行输入 opendcl 就可以使用了 简单改写了下,st 给了框架,某些语句替换下即可,DCL 部分没有写完,你试着自己写写,有问题到这里交流  详情 回复 发表于 2014-12-15 09:09
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

发表于 2014-12-15 09:09:09 | 显示全部楼层
本帖最后由 Free-Lancer 于 2014-12-15 09:11 编辑
lucas3 发表于 2014-12-12 09:16
整复杂了哈,LISP都不会,现在又来API+ODCL, 更摸不到头脑了,以前API只有一个单文件XDRX_API.R2007.arx  ...

Opendcl 要装  Runtime 在 ODCL  论坛由 8.10 链接下载,命令行输入  opendcl 就可以使用了
简单改写了下,st 给了框架,某些语句替换下即可,DCL 部分没有写完,你试着自己写写,有问题到这里交流
  1. (defun c:tt (/ ss dcl fn id isBlock isErased isText)
  2.   (defun _make
  3.          (e l / 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
  22.       cel (if (eq (car (setq lt (vlax-get e "linetype"))
  23.                        "ByLayer"
  24.                   )
  25.               )
  26.             (vlax-get
  27.               (vla-item (fy:aclayers) (vlax-get e "layer"))
  28.               "linetype"
  29.             )
  30.             (car lt)
  31.           )
  32.     )
  33.     (setq dis (* r 1.1)
  34.           p1  (polar pcen 0. dis)
  35.           p2  (polar pcen _pi2 dis)
  36.           p3  (polar pcen pi dis)
  37.           p4  (polar pcen (- _pi2) dis)
  38.     )
  39.     (if        isBlock
  40.       (setq space (vlax-invoke (fy:acblocks) 'add pcen "*"))
  41.       (setq space (fy:acms))
  42.     )
  43.     (setq cir (vlax-invoke space 'addcircle pcen r)
  44.           arc (vlax-invoke space 'addarc pcen mr 4.71239 3.14159)
  45.           ln1 (vlax-invoke space 'addline p1 p3)
  46.           ln2 (vlax-invoke space 'addline p2 p4)
  47.     )
  48.     (mapcar '(lambda (x)
  49.                (vlax-put (car x) 'layer "screw")
  50.                (vlax-put (car x) 'color (cadr x))
  51.                (vlax-put (car x) "linetype" (caddr x))
  52.                (vlax-put (car x) "linetypescale" xk)
  53.              )
  54.             (list (list cir 33 cel)
  55.                   (list arc 3 cel)
  56.                   (list ln1 1 "center")
  57.                   (list ln2 1 "center")
  58.             )
  59.     )
  60.     (if        isText
  61.       (progn
  62.         (setq txt (vlax-invoke space 'AddText str pcen (* mr 0.4)))
  63.         (vla-put-alignment txt acAlignmentTopCenter)
  64.         (vla-put-textalignmentpoint
  65.           txt
  66.           (vlax-3d-point (polar pcen (- _pi2) (* mr 0.17)))
  67.         )
  68.       )
  69.     )
  70.     (if        isBlock
  71.       (vlax-invoke
  72.         (fy:acspace)
  73.         'insertblock
  74.         pcen
  75.         (vla-get-name space)
  76.         1.
  77.         1.
  78.         1.
  79.         0.
  80.       )
  81.     )
  82.   )
  83.   (setq        dcl '("screw:dialog{"
  84.               "label = \"参数设置\";"
  85.               " :toggle{ key = \"isErased\"; label = \"删除原文字\";}"
  86.               " :toggle { key = \"isText\"; label = \"显示文字\";}"
  87.               " :toggle { key = \"isBlock\"; label = \"生成块\";}"
  88.               " ok_cancel;"
  89.               "}"
  90.              )
  91.         fn  (xd::dcl:make dcl)
  92.   )
  93.   (fy:begin)
  94.   (if (setq ss (ssget '((0 . "circle"))))
  95.     (progn
  96.       (if (not (tblsearch "style" "txt"))
  97.         (command ".style"    "txt"         "txt.shx,gbcbig.shx"
  98.                  0.0             1.0         0.0             "n"
  99.                  "n"             "n"
  100.                 )
  101.       )
  102.       (if (not (tblsearch "ltype" "hidden"))
  103.         (vla-load (fy:acltypes) "hidden" "acadiso.lin")
  104.       )
  105.       (if (not (tblsearch "ltype" "center"))
  106.         (vla-load (fy:acltypes) "center" "acadiso.lin")
  107.       )
  108.       (mapcar '(lambda (x) (_make x)) (fy:cset->objs))
  109.       (if isErased (command ".erase" ss ""))
  110.     )
  111.   )
  112.   (princ)
  113. )


点评

Free-Lancer大师,您好!您帮我改的那个“圆变螺孔”的程序,我补充了下对话框,现在运行后可以弹出对话框了,但是无法驱动,您的那个XD:CL:ToggleAction示例不是很完整,下面不知道怎么继续了.................  详情 回复 发表于 2015-1-9 08:29
Free-Lancer大师, 请问这个需要xd::dcl:radioaction 吗?  详情 回复 发表于 2014-12-22 19:43
大师,能不能再抽点点时间帮忙看看?谢谢了  详情 回复 发表于 2014-12-19 11:17
Free-Lancer大师,稍微改了下,怎么对话框弹出就闪退呢? 并显示:命令: TT ; 错误: 参数太少  详情 回复 发表于 2014-12-15 22:45
好的,谢谢大师出手相助,我先试试  详情 回复 发表于 2014-12-15 12:50
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 3199个

财富等级: 富可敌国

 楼主| 发表于 2014-12-15 12:50:48 | 显示全部楼层
Free-Lancer 发表于 2014-12-15 09:09
Opendcl 要装  Runtime 在 ODCL  论坛由 8.10 链接下载,命令行输入  opendcl 就可以使用了
简单改写了 ...

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

使用道具 举报

已领礼包: 3199个

财富等级: 富可敌国

 楼主| 发表于 2014-12-15 22:45:28 | 显示全部楼层
本帖最后由 lucas3 于 2014-12-15 22:53 编辑
Free-Lancer 发表于 2014-12-15 09:09
Opendcl 要装  Runtime 在 ODCL  论坛由 8.10 链接下载,命令行输入  opendcl 就可以使用了
简单改写了 ...

Free-Lancer大师,稍微改了下,怎么对话框弹出就闪退呢? 并显示:命令:  TT ; 错误: 参数太少

  1. …………
  2. (setq        dcl '("screw:dialog{"
  3.               "label = \"参数设置\";"
  4.               " :toggle{ key = \"isErased\"; label = \"删除原文字\";}"
  5.               " :toggle { key = \"isText\"; label = \"显示文字\";}"
  6.               " :toggle { key = \"isBlock\"; label = \"生成块\";}"
  7.               " ok_cancel;"
  8.               "}"
  9.              )
  10.         fn  (xd::dcl:make dcl)
  11.         id  (xd::dcl:load fn "screw")
  12.   )
  13.   (XD::Dcl:Accept)
  14.   (xd::dcl:start id fn)
  15.   (fy:begin)
  16. …………

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

使用道具 举报

已领礼包: 3199个

财富等级: 富可敌国

 楼主| 发表于 2014-12-19 11:17:47 | 显示全部楼层
Free-Lancer 发表于 2014-12-15 09:09
Opendcl 要装  Runtime 在 ODCL  论坛由 8.10 链接下载,命令行输入  opendcl 就可以使用了
简单改写了 ...

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-4 17:01 , Processed in 0.654475 second(s), 59 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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