找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 7870|回复: 58

[原创]:天正图框插入解密.lsp、dcl源码.

[复制链接]

已领礼包: 207个

财富等级: 日进斗金

发表于 2005-7-6 22:17:25 | 显示全部楼层 |阅读模式

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

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

×
天正图框插入解密.lsp、dcl源码.
可在cadR14-2006中应用。
title.lsp中有些函数没有完全解密.但不影响使用.没用的已经取消。
因为调用tch.arx中的函数.
故图框插入时不能显示图框的幻灯片。
将title.dcl、_LABEL1.DWG、_LABEL2.DWG拷贝至cad支持路径下,
加载title.lsp即可。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 207个

财富等级: 日进斗金

 楼主| 发表于 2005-7-6 22:21:06 | 显示全部楼层

插个图片直观一点.

(defun title0 (/ p_a p_c viewcp x1 y1 pc p_a1 pn1 what_next n_list m_list di sal sl a0_list a1_list a2_list a3_list a4_list f0_list f1_list f2_list f3_list sl_list d_list ss_in handle_list sl_sel pop1_in p_list edit_in check_in defaults show_list set_status do_frame)
        (if title_data
        (mapcar 'set '(ver_hor sz lb1 lb2 Long Width sal di sl) title_data)
        (setq ver_hor nil sz 1 lb1 T lb2 T Long 841 Width 594 sal 100 di 0 sl 6)
        ) ;end if
;(setvar "CMDECHO" 0)
    (setq
        ps       (= 0 (getvar "tilemode"))
        ;标准图幅尺寸
        p_list  '((841 1189)(594 841)(420 594)(297 420)(210 297))
        ;加长尺寸列表
        a0_list '(1189 1338 1487 1635 1784 1932 2081 2230 2387)
        a1_list '(841 1051 1261 1472 1682 1892 2102)
        a2_list '(594 743 892 1041 1189 1338 1487 1635 1784 1932 2081)
        a3_list '(420 631 841 1051 1261 1472 1682 1892)
        a4_list '(297 445 594)
        ;加长几分之几
        f0_list '("1/8""1/4""3/8""1/2""5/8""3/4""7/8""1")
        f1_list '("1/4""1/2""3/4""1""5/4""3/2")
        f2_list '("1/4""1/2""3/4""1""5/4""3/2""7/4""2""9/4""9/2")
        f3_list '("1/2""1""3/2""2""5/2""3""7/2")
        f4_list '("1/2""1")
        ;比例列表
        sl_list '(1000 500 300 250 200 150 100 50 30 25 20 10 5)
        )

;(defun check_in(input format kk /)
;        (if  (and (distof input 2) (>(atof input)0) )
;        (progn(rs_error)input)
;        (progn
;        (set_tile "error" (strcat"无效的"format"输入"))
;        (mode_tile kk 2)
;        nil);end progn
;        );end if
;);end defun
       
(defun handle_list(/ d0 ln)
        (cond
                ((= sz 0)(setq ln 8 n_list f0_list m_list a0_list))
                ((= sz 1)(setq ln 6 n_list f1_list m_list a1_list))
                ((= sz 2)(setq ln 10 n_list f2_list m_list a2_list))
                ((= sz 3)(setq ln 7 n_list f3_list m_list a3_list))
                (T(setq ln 2 n_list f4_list m_list a4_list))
         );end cond
      ln  ;调用函数赋值。
)

(defun set_status()
        (set_tile "size_sel" (strcat"A"(itoa sz)))        ;1 size_sel  标准图幅 itoa 转化字符串
        (set_tile "label1"   (if lb1 "1""0"))                ;2 label1    图标
        (set_tile "label2"   (if lb2 "1""0"))                ;3 label2    会签栏
        (set_tile "type_sel" (if ver_hor "ver""hor"))        ;4 type_sel  格式(立式,横式)
        (set_tile "psp"      (if ps "1""0"))                ;5 psp       图纸空间、模型空间
        (set_tile "l_size"   (itoa Long))                ;6 l_size    图纸长度
        (set_tile "w_size"   (itoa Width))                ;7 w_size    图纸宽度
        (set_tile "dim_list" (itoa di))                        ;8 dim_list  加长S
        (set_tile "scal"     (itoa sal))                ;9 scal      比例
        (set_tile "scal_list"(itoa sl))                        ;0 scal_list 比例列表
);end defun

(defun defaults(/ d0 d2 d3 i)
        (set_status)
        (setq
                d3(handle_list)
                d0(strcat"A"(itoa sz))
                d_list(list d0)
                i 0
                )               
        (repeat d3
                (setq
                        d2 (nth i n_list) ;nth 此函数将返回n_list中的第i个元素,第一个元素由零开始的
                        i(1+ i)
                        d_list (if(= i 0) d_list(append d_list(list(strcat d0"+"d2))))
                );end setq
        );end repeat
        ;d_list = (A1 A1+1/4 A1+1/2 A1+3/4 A1+1 A1+5/4 A1+3/2)
       
        ;(show_list "dim_list" d_list)                ;取消没影响....       
        (set_tile "dim_list" "0")
        (do_frame)
);end defun
(defun show_list(k1 l1)
        (start_list k1)
        (mapcar ' add_list l1)
        (end_list)
        )
       
(defun do_frame()
        (setq         p1 '(0 0)
                ;p_a 25
                p_c '(10 5)
                viewcp (getvar"viewctr")  ;viewctr 存储当前视口中视图的中心点。该值用 UCS 坐标表示。
                pc (if(< sz 3)(car p_c)(cadr p_c))
                x1 (*(float Width)sal)
                y1 (*(float Long)sal)
                pc (*(float pc)sal)
                ins_scl sal
                p_a1 (* 25 sal)
                ;p_a1 (*(float p_a)sal)
                )
        (setvar"tilemode"(if ps 0 1))  ;tilemode 将“模型”选项卡或最后一个布局选项卡置为当前。
(if ver_hor
        (progn ;progn--aa
                (setq p2 (list 0 y1) p3(list x1 y1) p4(list x1 0))
                (if(/= sz 4)
                        (setq         pn1(list pc pc)
                                pn2(list(- x1 pc)pc)
                                pn3(list(- x1 pc)(- y1 p_a1))
                                pn4(list pc(- y1 p_a1))
                                )
       
                        (setq         pn1(list p_a1 pc)
                                pn2(list(- x1 pc)pc)
                                pn3(list(- x1 pc)(- y1 pc))
                                pn4(list p_a1(- y1 pc))
                                )
                );end if
        );end progn--aa
        (setq         p2(list 0 x1)
                p3(list y1 x1)
                p4(list y1 0)
                pn1(list p_a1 pc)
                pn2(list(- y1 pc)pc)
                pn3(list(- y1 pc)(- x1 pc))
                pn4(list p_a1(- x1 pc))
                )
);end if
               
        ;(setq plist(list nil p1 p2 p2 p3 p3 p4 p4 p1 pn1 pn2 pn2 pn3 pn3 pn4 pn4 pn1))
        ;(start_image"show_ig")
        ;(fill_image 0 0 winx winy -2)
        ;(foreach sublt(apply 'getpfxl plist)(apply 'vector_image sublt)) ;;getpfxl未定义       
        ;(end_image)
);end defun

(defun ss_in(/ d1 d2 d3 i)
        (setq sz(atoi(substr $value 2 1))
              d0(nth sz p_list)
              Width(car d0)
              Long(cadr d0)
              d_list(list $value)
              i 0
              d3(handle_list)
              )
        (repeat d3
                (setq         d2(nth i n_list)
                        i(1+ i)
                        d_list (if(= i 0) d_list (append d_list(list(strcat $value"+"d2))))
                )
        );end repeat
(show_list "dim_list" d_list)
(set_tile "dim_list" "0")
(set_tile "w_size" (itoa Width))
(set_tile "l_size" (itoa Long))
(do_frame)
)

(defun edit_in(n val / ppt k1)
        (cond
                ((= n 1)(setq ppt"图长"k1"l_size"))
                ((= n 2)(setq ppt"图宽"k1"w_size"))
                ((= n 3)(setq ppt"比例"k1"scal"))
        )
(if T  ;(check_in val ppt k1)
        (cond        ((= n 1)(setq long (atoi val)))
                ((= n 2)(setq width (atoi val)))
                ((= n 3)(setq sal (atoi val)))
        )
)
(do_frame)
)

(defun list_in(/ a1)
        (setq di(atoi $value))
        (handle_list)
        (setq Long (nth di m_list))
        (set_tile "l_size" (itoa Long))
(do_frame)
)

(defun sl_sel()
        (setq  sl (atoi $value) sal (nth sl sl_list))
        (set_tile "scal" (itoa sal))
(do_frame)
);end defun

(if (and (not til_id)(<(setq til_id(load_dialog "title.dcl"))0))
        (exit)
);end if
(setq what_next 5)
(if(not(new_dialog "title" til_id ))(exit))
(setq winx (dimx_tile"show_ig") winy (dimy_tile"show_ig") )
;(rdshx winx winy)
(defaults)
(action_tile"size_sel"   "(ss_in)")
(action_tile"label1"     "(setq lb1 (= $value \"1\"))")
(action_tile"label2"     "(setq lb2 (= $value \"1\"))")
(action_tile"type_sel"   "(setq ver_hor (= $value \"ver\"))(do_frame)")
(action_tile"psp"        "(setq ps (= $value \"1\"))")
(action_tile"l_size"     "(edit_in 1 $value)")
(action_tile"w_size"     "(edit_in 2 $value)")
(action_tile"dim_list"   "(List_in)")
(action_tile"scal"       "(edit_in 3 $value)")
(action_tile"scal_list"  "(sl_sel)")
(action_tile"help"       "(do_help \"ddtitle\")")

(setq what_next(start_dialog))
        (if(= what_next 1)
                (progn
                (setq title_data(list ver_hor sz lb1 lb2 Long Width sal di sl))
                ;(command".zoom""C" viewcp (*(cadr p3)1.2))
                ;(getcd"公共图框")
                (command".pline"pn1"w"sal sal pn2 pn3 pn4 "c")
                (setq ssti(ssadd(entlast)))               
                (command".pline"p1"w"0 0 p2 p3 p4"c")
                (ssadd(entlast)ssti)
                (setq p1 pn1 p2 pn3 p3(list(* 0.5 sal long)(* 0.5 sal width)))
                );end progn
           nil
        );end if
)


(defun c:title(/ ver_hor Long Width sz ps lb1 lb2 ins_scl ssti p1 p2 p3 p4 pn2 pn3 pn4)
    (if (title0)
        (progn
                        (if lb1
                                (progn
                                        (command".insert""_LABEL2" pn2 ins_scl ins_scl 0) ;两个ins_scl改为100'
                                                 ;insert  块名,插入点,X比例,Y比例,旋转角度
                                                 
                                        (setq ssti(ssadd(entlast)ssti))
                                 );end progn
                         );end if                                  
                        (if lb2
                                (progn
                                        (command".insert""_LABEL1"
                                        (if(and ver_hor (/= sz 4))pn3 pn4) ins_scl ins_scl ;两个ins_scl改为100                                       
                                        ;90 ;;0是添加后面的是原来的语句。
                                        (if(and ver_hor (/= sz 4))0 90)  ;;no defun angtos1;;(angtos1 _pi2)改为90
                                        )
                                        ;;ver_hor 值nil为横式,T是立式
                                        (setq ssti(ssadd(entlast)ssti))
                                        );end progn
                        );end if                       
        (princ"\n请点取插入点: ")
        ;;(line1)
        (setvar"orthomode"0)
        (command".move"ssti""p3)
        );end progn
     );end if
(princ)
)
;end defun
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 207个

财富等级: 日进斗金

 楼主| 发表于 2005-7-6 22:21:53 | 显示全部楼层

TITLE.DCL

title : dialog {
  label = " 图框选择 ";
  : row {
    : column {
      : boxed_radio_column {
        label = "标准图幅";
        key = "size_sel";
        : radio_button {
          label = "A0";
          key = "A0";
          mnemonic = "0";
        }
        : radio_button {
          label = "A1";
          key = "A1";
          mnemonic = "1";
        }
        : radio_button {
          label = "A2";
          key = "A2";
          mnemonic = "2";
        }
        : radio_button {
          label = "A3";
          key = "A3";
          mnemonic = "3";
        }
        : radio_button {
          label = "A4";
          key = "A4";
          mnemonic = "4";
        }
      }
      : list_box {
        label = "加长S:";
        mnemonic = "S";
        height = 6;
        key = "dim_list";
        value = "1";
      }
    }
    : column {
      : boxed_column {
        label = "尺寸";
        fixed_height = ture ;
        height = 4 ;
        : edit_box {
          key = "l_size";
          label = "图长L:";
          fixed_width = true;
          edit_limit = 4;
          edit_width = 4;
          mnemonic = "L" ;
        }
        : edit_box {
          key="w_size";
          label = "图宽W:";
          fixed_width = true;
          mnemonic = "W";
          edit_limit = 4;
          edit_width = 4;
        }
      }
      : text { label = "图框示意"; }
      : image {
        aspect_ratio = 0.7;
        color = -2;
        key = "show_ig";
        fixed_height = ture;
        fixed_width = true;
        width = 20;
      }
    }
    : column {
      : boxed_radio_column {
        key = "type_sel";
        label = "格式";
        : radio_button {
          label = "立式V";
          key = "ver";
          mnemonic = "V";
        }
        : radio_button {
          label = "横式H";
          key = "hor";
          mnemonic = "H";
        }
      }
      : toggle {
        label = "图纸空间P";
        key = "psp" ;
        mnemonic = "P";
      }
      : toggle {
        label = "图标L";
        key = "label1" ;
        mnemonic = "L";
      }
      : toggle {
        label = "会签栏S";
        key = "label2" ;
        mnemonic = "S";
      }
      : boxed_column {
        label = "比例" ;
        : edit_box {
          key = "scal";
          label = "1:";
          fixed_width = true;
          edit_width = 4;
          edit_limit = 4;
          mnemonic = "C";
        }
        : popup_list {
          key = "scal_list";
          edit_width = 8;
          list = "1:1000\n1:500\n1:300\n1:250\n1:200\n1:150\n1:100\n1:50\n1:30\n1:25\n1:20\n1:10\n1:5";
        }
      }
    }
  }
  ok_cancel_help_errtile;
}
// ---------------END-------------------------

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

使用道具 举报

发表于 2005-7-6 22:37:24 | 显示全部楼层
谢谢楼主!这是我一直想寻找的东东啊!我用天正,基本上就是用天正的插入图框啦,其它功能用得很少。
顺便问一下:它的比例列表能不能修改?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-7-6 23:06:00 | 显示全部楼层
真是不错的源码,如果楼主能提供天正画墙线(wall)命令的lisp源码就太好了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 207个

财富等级: 日进斗金

 楼主| 发表于 2005-7-7 13:06:47 | 显示全部楼层
最初由 aichong 发布
[B]谢谢楼主!这是我一直想寻找的东东啊!我用天正,基本上就是用天正的插入图框啦,其它功能用得很少。
顺便问一下:它的比例列表能不能修改? [/B]

: popup_list {
key = "scal_list";
edit_width = 8;
list = "1:1000\n1:500\n1:300\n1:250\n1:200\n1:150\n1:100\n1:50\n1:30\n1:25\n1:20\n1:10\n1:5";
DCL中.的这个列表就可以改比例.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

使用道具 举报

已领礼包: 207个

财富等级: 日进斗金

 楼主| 发表于 2005-7-8 15:05:16 | 显示全部楼层
最初由 Robbie 发布
[B]用不了啊,加载后使用Title命令是吧 [/B]


将title.dcl、_LABEL1.DWG、_LABEL2.DWG拷贝至cad支持路径下,
加载title.lsp后使用Title命令.仔细看看这里.
肯定可以使用的我已经测试过了.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-7-11 22:48:46 | 显示全部楼层
最初由 xshrimp 发布
[B]

将title.dcl、_LABEL1.DWG、_LABEL2.DWG拷贝至cad支持路径下,
加载title.lsp后使用Title命令.仔细看看这里.
肯定可以使?.. [/B]

我用的是CAD2002。按楼主所说步步都做好了,但输入命令Title后提示:
错误:quit/exit  abort
以致程序无法正常使用,请教各位大侠解决方法。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 207个

财富等级: 日进斗金

 楼主| 发表于 2005-7-12 10:58:58 | 显示全部楼层
将title.dcl、_LABEL1.DWG、_LABEL2.DWG拷贝至cad支持路径下,
加载title.lsp后使用Title命令.注意顺序.
如果先加载title.lsp再拷贝title.dcl、_LABEL1.DWG、_LABEL2.DWG至cad支持路径下,
需将cad关掉再打开才行。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-7-14 22:22:24 | 显示全部楼层
楼主,我照上所述,查但就是重新起动也无济于事。
错误:quit/exit abort
奇怪的是在R14下运行却好象没事,可以正常使用。请教请教!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-7-25 10:37:09 | 显示全部楼层
您好!
盼望您的新程序出台,收钱值得
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 345个

财富等级: 日进斗金

发表于 2005-7-25 11:27:12 | 显示全部楼层
我试用了一下,有时会出错,右下角的两根线不是水平和垂直的!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-10 18:46 , Processed in 0.267409 second(s), 60 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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