明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2535|回复: 9

老外绘制表格源码,请问可否实现把表格放在一个自己设计的图层上面呀,这里放的是...

[复制链接]
发表于 2017-12-22 13:00 | 显示全部楼层 |阅读模式
老外绘制表格源码,请问可否实现把表格放在一个自己设计的图层上面呀,这里放的是当前图层
  1. (defun LM:grid

  2.     ( dyn / *error* _getIntwithDefault _getosmode _parsepoint _makegrid _grX g1 gr ls ms os p1 p3 st )

  3.     (defun *error* ( msg )
  4.         (if (not (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*"))
  5.             (princ (strcat "\n错误: " msg))
  6.         )
  7.         (redraw) (princ)
  8.     )

  9.     (defun _getIntwithDefault ( msg sym ) (initget 6)
  10.         (set sym
  11.             (cond
  12.                 (
  13.                     (getint
  14.                         (strcat msg "<"
  15.                             (itoa
  16.                                 (set sym
  17.                                     (cond ((eval sym)) ( 2 ))
  18.                                 )
  19.                             )
  20.                             ">: "
  21.                         )
  22.                     )
  23.                 )
  24.                 (   (eval sym)   )
  25.             )
  26.         )
  27.     )

  28.     (defun _getosmode ( os / lst )
  29.         (foreach mode
  30.            '(
  31.                 (0001 . "_end")
  32.                 (0002 . "_mid")
  33.                 (0004 . "_cen")
  34.                 (0008 . "_nod")
  35.                 (0016 . "_qua")
  36.                 (0032 . "_int")
  37.                 (0064 . "_ins")
  38.                 (0128 . "_per")
  39.                 (0256 . "_tan")
  40.                 (0512 . "_nea")
  41.                 (1024 . "_qui")
  42.                 (2048 . "_app")
  43.                 (4096 . "_ext")
  44.                 (8192 . "_par")
  45.             )
  46.             (if (not (zerop (logand (car mode) os)))
  47.                 (setq lst (cons "," (cons (cdr mode) lst)))
  48.             )
  49.         )
  50.         (apply 'strcat (cdr lst))
  51.     )

  52.     (defun _parsepoint ( pt str / _str->lst lst )

  53.         (defun _str->lst ( str / pos )
  54.             (if (setq pos (vl-string-position 44 str))
  55.                 (cons (substr str 1 pos) (_str->lst (substr str (+ pos 2))))
  56.                 (list str)
  57.             )
  58.         )

  59.         (if (wcmatch str "`@*")
  60.             (setq str (substr str 2))
  61.             (setq pt '(0.0 0.0 0.0))
  62.         )           

  63.         (if
  64.             (and
  65.                 (setq lst (mapcar 'distof (_str->lst str)))
  66.                 (vl-every 'numberp lst)
  67.                 (< 1 (length lst) 4)
  68.             )
  69.             (mapcar '+ pt lst)
  70.         )
  71.     )

  72.     (defun _makegrid ( p1 p3 mode / hd vd hs vs pt )
  73.         (setq hd (- (car  p3) (car  p1))
  74.               vd (- (cadr p3) (cadr p1))
  75.               hs (/ hd *cols*)
  76.               vs (/ vd *rows*)
  77.         )
  78.         (cond
  79.             (   (= 5 mode)
  80.                 (setq pt p1)
  81.                 (repeat (1+ *cols*)
  82.                     (grdraw pt (list (car pt) (+ (cadr pt) vd)) 1 1)
  83.                     (setq pt (list (+ (car pt) hs) (cadr pt)))
  84.                 )
  85.                 (setq pt p1)
  86.                 (repeat (1+ *rows*)
  87.                     (grdraw pt (list (+ (car pt) hd) (cadr pt)) 1 1)
  88.                     (setq pt (list (car pt) (+ (cadr pt) vs)))
  89.                 )
  90.                 t
  91.             )
  92.             (   (= 3 mode)
  93.                 (setq pt p1)
  94.                 (repeat (1+ *cols*)
  95.                     (entmakex
  96.                         (list
  97.                             (cons 0 "LINE")
  98.                             (cons 10 (trans pt 1 0))
  99.                             (cons 11 (trans (list (car pt) (+ (cadr pt) vd)) 1 0))
  100.                         )
  101.                     )
  102.                     (setq pt (list (+ (car pt) hs) (cadr pt)))
  103.                 )
  104.                 (setq pt p1)
  105.                 (repeat (1+ *rows*)
  106.                     (entmakex
  107.                         (list
  108.                             (cons 0 "LINE")
  109.                             (cons 10 (trans pt 1 0))
  110.                             (cons 11 (trans (list (+ (car pt) hd) (cadr pt)) 1 0))
  111.                         )
  112.                     )
  113.                     (setq pt (list (car pt) (+ (cadr pt) vs)))
  114.                 )
  115.                 nil
  116.             )
  117.         )
  118.     )

  119.     (defun _grX ( p s c / -s r q )
  120.         (setq -s (- s)
  121.                r (/ (getvar 'VIEWSIZE) (cadr (getvar 'SCREENSIZE)))
  122.                p (trans p 1 3)
  123.         )
  124.         (grvecs
  125.             (list c
  126.                 (list -s      -s)  (list s       s)
  127.                 (list -s  (1+ -s)) (list (1- s)  s)
  128.                 (list (1+ -s) -s)  (list s   (1- s))
  129.                
  130.                 (list -s       s)  (list s      -s)
  131.                 (list -s   (1- s)) (list (1- s) -s)
  132.                 (list (1+ -s)  s)  (list s  (1+ -s))
  133.             )
  134.             (list
  135.                 (list r  0. 0. (car  p))
  136.                 (list 0. r  0. (cadr p))
  137.                 (list 0. 0. r  0.)
  138.                 (list 0. 0. 0. 1.)
  139.             )
  140.         )
  141.         p
  142.     )
  143.         
  144.     (_getIntwithDefault "\n输入行数: "    '*rows*)
  145.     (_getIntwithDefault "\n输入列数: " '*cols*)

  146.     (if (setq p1 (getpoint "\n指定起点: "))
  147.         (cond
  148.             (   dyn
  149.                 (setq os (_getosmode (getvar 'OSMODE))
  150.                       st ""
  151.                 )
  152.                 (princ (setq ms "\n指定对角点: "))
  153.                 (while
  154.                     (progn (setq gr (grread t 15 0) g1 (car gr) p3 (cadr gr))
  155.                         (cond
  156.                             (   (member g1 '(3 5)) (redraw)
  157.                                 (if
  158.                                     (and
  159.                                         (zerop (logand 16384 (getvar 'OSMODE)))
  160.                                         (setq op (osnap p3 os))
  161.                                     )
  162.                                     (_grX (setq p3 op) 6 20)
  163.                                 )
  164.                                 (_makegrid p1 p3 g1)
  165.                             )
  166.                             (   (= g1 2)
  167.                                 (cond
  168.                                     (   (= 6 p3)
  169.                                         (if (zerop (logand 16384 (setvar 'OSMODE (boole 6 16384 (getvar 'OSMODE)))))
  170.                                             (princ (strcat "\n<捕捉 开>"  ms st))
  171.                                             (princ (strcat "\n<捕捉 关>" ms st))
  172.                                         )                                    
  173.                                     )
  174.                                     (   (= 8 p3)
  175.                                         (if (< 0 (strlen st))
  176.                                             (progn
  177.                                                 (princ (vl-list->string '(8 32 8)))
  178.                                                 (setq st (substr st 1 (1- (strlen st))))
  179.                                             )
  180.                                         )
  181.                                         t
  182.                                     )
  183.                                     (   (< 32 p3 127)
  184.                                         (setq st (strcat st (princ (chr p3))))
  185.                                     )
  186.                                     (   (member p3 '(13 32))
  187.                                         (if (< 0 (strlen st))
  188.                                             (if (setq p3 (_parsepoint p1 st))
  189.                                                 (_makegrid p1 p3 3)
  190.                                                 (princ (strcat (setq st "") "\n2D / 3D Point Required." ms))
  191.                                             )
  192.                                         )
  193.                                     )
  194.                                 )
  195.                             )
  196.                         )
  197.                     )
  198.                 )
  199.             )
  200.             (   (setq p3 ((if (zerop (getvar 'WORLDUCS)) getpoint getcorner) p1 "\n指定对角点: "))
  201.                 (_makegrid p1 p3 3)
  202.             )                 
  203.         )
  204.     )
  205.     (redraw) (princ)
  206. )
  207. (vl-load-com) (princ)
  208. (princ "\n本程序命令( 绘制表格):dgrid")
  209. (princ "\n本程序命令( 动态绘制表格):dgridd")
  210. (princ)


发表于 2017-12-22 14:21 | 显示全部楼层
这是哪国老外?中国老外?楼主是国际友人?
发表于 2017-12-22 20:07 | 显示全部楼层
...表格放在一个自己设计的图层...
加这列在程序前头
(setvar "Clayer" My图层)
 楼主| 发表于 2017-12-24 17:43 | 显示全部楼层
Andyhon 发表于 2017-12-22 20:07
...表格放在一个自己设计的图层...
加这列在程序前头
(setvar "Clayer" My图层)

错误: AutoCAD 变量设置被拒绝: "Clayer" nil
好像不得行呀,是不是我放的位置不对呀,还是差什么
发表于 2017-12-24 21:32 | 显示全部楼层
...放在一个自己设计的图层上面...
请问 该图层名称?
My图层 ===> "0" / "DIM" / ....
 楼主| 发表于 2017-12-24 22:40 | 显示全部楼层
Andyhon 发表于 2017-12-24 21:32
...放在一个自己设计的图层上面...
请问 该图层名称?
My图层 ===> "0" / "DIM" / ....

(if (= (tblsearch "Layer" "bg01") nil)
         (command "Layer" "new" "bg01" "color" "1" "bg01" "")
      )
(setvar "cLayer" "bg01")

加了,可以额,谢谢
发表于 2019-5-24 09:41 | 显示全部楼层
版主能否补全代码以供学习
发表于 2020-5-25 08:39 | 显示全部楼层
感谢无私分享
发表于 2020-6-20 17:05 | 显示全部楼层
提示缺少函数
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-4-27 02:25 , Processed in 0.220119 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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