找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 4510|回复: 30

[精彩文萃] 大家都来晒晒自己画图中比较常用的代码(使用平率高,绘图效率快)

[复制链接]
发表于 2013-7-31 21:48:23 | 显示全部楼层 |阅读模式

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

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

×
不管是自己的代码,还是别人的都来贴个吧,相互提高效率。我先发个文字刷的(别人的)每天都用到,可以刷块内文字,引线上的文字,天正标高及图名:(defun c:22 (/ #errxts $orr buk en1 ent i name name1 snap ss tp ty uu)
   (defun #errxts (s)         ; 出错处理程序
     (redraw name 4)
     (setvar "nomutt" 0)
     (setvar "PICKBOX" buk)
     (setvar "osmode" snap)
     (command ".UNDO" "E")
     (setq *error* $orr)
     (princ)
   )
   (setq $orr *error*)
   (setq *error* #errxts)
   (vl-load-com)          ; 主程序开始
   (setvar "cmdecho" 0)
   (command ".UNDO" "BE")
   (setq snap (getvar "osmode"))
   (setvar "osmode" 0)
   (setq buk (getvar "PICKBOX"))
   (setvar "PEDITACCEPT" 1)        ; 下面程序选择合适的源对象,如没选到重新选
   (while (not (and
   (setq name1 (nentsel "\n选择源对象:"))
   (setq name (car name1))
   (setq ent (entget name))
   (setq ty (cdr (assoc 0 ent)))
   (member ty '("TEXT" "MTEXT"
     "LWPOLYLINE" "CIRCLE"
     "INSERT" "LINE"
     "ARC" "HATCH"
     "DIMENSION" "ATTRIB"
     "TCH_ARROW" "TCH_TEXT"
     "TCH_DRAWINGNAME" "TCH_MULTILEADER"
     "TCH_ELEVATION"
    )
   )
        )
   )
     (if (= 52 (getvar "errno"))
       (vl-exit-with-error "")
     )
   )           ; 下面程序加了一个判断,如果源对象选择的是块,且不是属性或者块内文字,则认为选择的是块
   (if (and
(not (member ty '("TEXT" "MTEXT"
         "ATTRIB"
        )
       )
)
(= (type (car (last name1))) 'ename)
(= (cdr (assoc 0 (entget (car (last name1))))) "INSERT")
       )
     (setq name (car (last name1))
    ent (entget name)
    ty (cdr (assoc 0 ent))
     )
   )
   (redraw name 3)
   (setvar "nomutt" 1)
   (setvar "PICKBOX" (fix (+ 1 (* 1.2 buk))))
   (cond           ; 1、 如果源对象是文字、天正文字或者块内文字或者属性,则执行。。。
     ((member ty '("TEXT" "MTEXT"
        "ATTRIB" "TCH_TEXT"
        "TCH_ARROW" "TCH_DRAWINGNAME"
        "TCH_MULTILEADER" "TCH_ELEVATION"
       )
      )
       (setq uu (cdr (assoc 1 ent)))
       (princ (strcat "\n选择目标对象:<文字相同>  T = " "\"" uu "\""))
       (while t
(setq ss (ssget ":S" '((0 . "TEXT,MTEXT,INSERT,TCH_ARROW,TCH_TEXT,TCH_DRAWINGNAME,TCH_MULTILEADER,TCH_ELEVATION"))))
(if (= (caar (setq name1 (ssnamex ss 0))) 1) ; 如果目标文字是单选块内文字或者属性或普通文字,则执行。。。
    (progn
      (setq ent (ssname ss 0)
     en1 (car (nentselp (trans (cadr (last (car name1))) 0 1)))
     tp (cdr (assoc 0 (entget en1)))
      )
      (cond
        ((member tp '("TEXT" "MTEXT"
    "ATTRIB"
          )
         )
   (vla-put-textstring (vlax-ename->vla-object en1) uu)
   (entupd en1)
   (entupd ent)
        )
        ((member tp '("TCH_TEXT" "TCH_ELEVATION"
    "TCH_ARROW"
          )
         )
   (vlax-put-property (vlax-ename->vla-object en1) 'text uu)
        )
        ((= tp "TCH_DRAWINGNAME")
   (vlax-put-property (vlax-ename->vla-object en1) 'nametext uu)
        )
        ((= tp "TCH_MULTILEADER")
   (vlax-put-property (vlax-ename->vla-object en1) 'uptext uu)
        )
      )
    )
    (progn         ; 如果目标文字多选的是普通文字,则循环更新文字内容
      (repeat (setq i (sslength ss))
        (setq ent (entget (setq en1 (ssname ss (setq i (1- i))))))
        (setq tp (cdr (assoc 0 ent)))
        (cond
   ((member tp '("TEXT" "MTEXT"))
     (entmod (subst
        (cons 1 uu)
        (assoc 1 ent)
        ent
      )
     )
   )
   ((member tp '("TCH_TEXT" "TCH_ELEVATION"
      "TCH_ARROW"
     )
    )
     (vlax-put-property (vlax-ename->vla-object en1) 'text uu)
   )
   ((= tp "TCH_DRAWINGNAME")
     (vlax-put-property (vlax-ename->vla-object en1) 'nametext uu)
   )
   ((= tp "TCH_MULTILEADER")
     (vlax-put-property (vlax-ename->vla-object en1) 'uptext uu)
   )
        )
      )
    )
)
       )
     )
     ((member ty '("CIRCLE" "ARC"))     ; 3、 如果源对象是圆,则循环更新目标圆的直径
       (setq uu (cdr (assoc 40 ent)))
       (princ (strcat "\n选择目标对象:<半径相同>  R = " (rtos uu 2 2)))
       (repeat (setq i (sslength (setq ss (ssget '((0 . "CIRCLE,ARC"))))))
(setq ent (entget (ssname ss (setq i (1- i)))))
(entmod (subst
     (cons 40 uu)
     (assoc 40 ent)
     ent
   )
)
       )
     )
     ((= ty "INSERT")         ; 4、 如果源对象是块,则拷贝源块到目标块的位置,删除目标块
       (princ " \n选择目标对象:<块相同>")
       (setq uu (cdr (assoc 10 ent)))
       (repeat (setq i (sslength (setq ss (ssget '((0 . "INSERT"))))))
(setq ent (entget (ssname ss (setq i (1- i)))))
(command "COPY" name "" uu (cdr (assoc 10 ent)))
       )
       (command "ERASE" ss "")
     )
     ((= ty "LWPOLYLINE")        ; 5、 如果源对象是多义线,则转化目标对象的线宽
       (if (not (setq uu (cdr (assoc 43 ent))))
(setq uu (cdr (assoc 40 ent)))
       )
       (princ (strcat "\n选择目标对象:<线宽相同>   W = " (rtos uu 2 2)))
       (repeat (setq i (sslength (setq ss (ssget '((0 . "LINE,ARC,POLYLINE,LWPOLYLINE,CIRCLE"))))))
(setq name1 (ssname ss (setq i (1- i)))
        tp (cdr (assoc 0 (setq ent (entget name1))))
)
(cond
    ((member tp '("LINE" "ARC"))
      (command "pedit" name1 "w" uu "x")
    )
    ((member tp '("POLYLINE" "LWPOLYLINE"))
      (command "pedit" name1 "w" uu "x")
    )
    ((= tp "CIRCLE")
      (command "donut" (- (* (cdr (assoc 40 ent)) 2) uu) (+ (* (cdr (assoc 40 ent)) 2) uu) (cdr (assoc 10 ent)) "")
      (entdel name1)
    )
)
       )
     )           ; 6、其他的一些情况,则调用特性匹配命令
     ((member ty '("LINE" "HATCH"
        "DIMENSION"
       )
      )
       (princ "\n选择目标对象:<特性匹配>")
       (command "matchprop" name (ssget (list (cons 0 ty))) "")
     )
   )
   (redraw name 4)
   (setvar "nomutt" 0)
   (setvar "PICKBOX" buk)
   (setvar "osmode" snap)
   (command ".UNDO" "E")
   (setq *error* $orr)
   (princ)
)

点评

楼主这个程序怎么不贴出作者的名字出来呀,在明经原程序上好像是有版权说明的  发表于 2013-8-1 13:10

评分

参与人数 1D豆 +5 收起 理由
Lispboy + 5 好主题奖!

查看全部评分

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
 楼主| 发表于 2013-7-31 22:02:34 | 显示全部楼层
本帖最后由 --@----- 于 2013-8-2 22:15 编辑

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

使用道具 举报

已领礼包: 5601个

财富等级: 富甲天下

发表于 2013-8-1 07:26:09 | 显示全部楼层
支持楼主,来个自己原创的:
  1. ;;;-------------------------------------------------
  2. ;;; 启用资源管理器, 打开相应图纸所在目录并选中该文件
  3. (defun c:ddd (/ path dwgname explor)
  4.   (setq explor (findfile"C:\\WINDOWS\\explorer.exe")
  5.   path   (getvar "DWGPREFIX")
  6. ;  dwgname (getvar "DWGNAME")
  7.   dwgname (strcat """ (getvar "DWGNAME") """)
  8.   )
  9.   (cond
  10.     ((and (not (null dos_execute)) explor path dwgname)
  11.      (dos_execute (strcat explor " /e, " path ", /select, " path dwgname)))
  12.     ((and explor path dwgname)
  13.      (startapp (strcat explor " /e, " path ", /select, " path dwgname)))
  14.     (t (princ "\n无法启用资源管理器!"))
  15.     )
  16.   (princ))
  17. ;;;-------------------------------------------------

点评

(defun c:FE () (prinC "打开当前图档所在的文件夹") (if (= (getvar "dwgtitled") 0) (alert "请先保存文件") (startapp (strcat "explorer /select, " (getvar "dwgprefix")  详情 回复 发表于 2013-8-2 22:22

评分

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

查看全部评分

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

使用道具 举报

已领礼包: 51个

财富等级: 招财进宝

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

使用道具 举报

发表于 2013-8-1 09:02:13 | 显示全部楼层
平面图上钻孔一般都是块,这个可以快速输出坐标,很简单的程序但是很实用
  1. (defun c:tt (/ ss i pt)
  2.   (setq        ss (ssget '((0 . "INSERT")))
  3.         i  0
  4.         pt nil
  5.   )
  6.   (repeat (sslength ss)
  7.     (setq pt (cdr (assoc 10 (entget (ssname ss i)))))
  8.     (setq i (1+ i))
  9.     (princ (strcat "\n "
  10.                    (itoa i)
  11.                    "| X = "
  12.                    (rtos (cadr pt) 2 4)
  13.                    ", Y = "
  14.                    (rtos (car pt) 2 4)
  15.            )
  16.     )
  17.   )
  18.   (princ)
  19. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 685个

财富等级: 财运亨通

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

使用道具 举报

 楼主| 发表于 2013-8-1 20:27:26 | 显示全部楼层
本帖最后由 --@----- 于 2013-8-1 20:46 编辑

当时急着发帖子了,忘了把作者的名字发上来,这里很感谢下作者langjs本人,以前的文字刷也能刷天正文字的,这个还能刷引线上的文字
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 344个

财富等级: 日进斗金

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

使用道具 举报

发表于 2013-8-2 15:15:39 | 显示全部楼层
好像是明经论坛langjs大侠的相同刷2.0

点评

是的,就是他的刷子,呵呵 大家每人发个经典,相互利用下资源也好  详情 回复 发表于 2013-8-2 21:51
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-8-2 15:27:56 | 显示全部楼层
(defun C:kh (/ s1)                ;快速选择对象,填充图案
   (setvar "cmdecho" 0)
   (setq ytc_d (getvar "hpseparate"))
   (setvar "hpassoc" 1)  ;控制填充图案是否关联(1:是;0:否)
   (setvar "hpseparate" 0)  ;控制是否创建独立填充图案(1:是;0:否)
   (princ "\n快捷填充,请选择填充区域:(***跳过则为拾取内部点填充)")
   (if (setq s1 (ssget))
       (command "bhatch" "s" s1 "" "")
       (progn
            (princ "\n请拾取填充内部点:")
            (command "bhatch" pause)
        );progn
    );if
   (setvar "hpseparate" ytc_d)
   (princ)
);defun

点评

能否优化下上次填充的是以拾取点或选择对象,下次填充的方式就是默认的上次填充方式。比如要填充的都是拾取内部点,那就要每次填充都要两次空格下,虽比原CAD的填充快点,还是希望功能尽可能完美下  详情 回复 发表于 2013-8-2 22:05
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-2 21:51:59 | 显示全部楼层
ucuc2003 发表于 2013-8-2 15:15
好像是明经论坛langjs大侠的相同刷2.0

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

使用道具 举报

 楼主| 发表于 2013-8-2 22:05:33 | 显示全部楼层
ucuc2003 发表于 2013-8-2 15:27
(defun C:kh (/ s1)                ;快速选择对象,填充图案
   (setvar "cmdecho" 0)
   (setq ytc_d ( ...

能否优化下上次填充的是以拾取点或选择对象,下次填充的方式就是默认的上次填充方式。比如要填充的都是拾取内部点,那就要每次填充都要两次空格下,虽比原CAD的填充快点,还是希望功能尽可能完美下{:soso_e100:}
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 183个

财富等级: 日进斗金

发表于 2013-8-2 22:22:20 | 显示全部楼层
HLCAD 发表于 2013-8-1 07:26
支持楼主,来个自己原创的:

(defun c:FE ()
  (prinC "打开当前图档所在的文件夹")
  (if (= (getvar "dwgtitled") 0)
    (alert "请先保存文件")
    (startapp (strcat "explorer /select, "
              (getvar "dwgprefix")
              (getvar "dwgname")
              ", /e"
          )
    )
  )
  (princ)
)

点评

支持原创!!!  详情 回复 发表于 2013-8-2 22:24

评分

参与人数 1D豆 +5 收起 理由
Lispboy + 5 支持原创

查看全部评分

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

使用道具 举报

已领礼包: 918个

财富等级: 财运亨通

发表于 2013-8-2 22:23:23 | 显示全部楼层
推荐下小菜的选择易,建选择集,查图元信息,都用到

点评

[*]CTRL+1不能能查到图元信息了吗  详情 回复 发表于 2013-8-2 22:33
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 183个

财富等级: 日进斗金

发表于 2013-8-2 22:23:46 | 显示全部楼层
再发一个,我也不知道作者。。抱歉。。
  1.           ;***********************************************矩形填充
  2. (defun c:FF (/ pp1 pp2 ppa ppb osn redent eedel ptlist i)
  3.   (if (= (getvar "hpname") "")
  4.     (prompt "no hatch pattern selected: ")
  5.     (progn
  6.       (setvar "cmdecho" 0)
  7.       (setq pp1 (getpoint "选择一个点:"))
  8.       (setq pp2 (getpoint "下一点:"))
  9.       (if (or (= pp1 nil) (= pp2 nil))
  10.   ""
  11.   (progn
  12.     (setq osn (getvar "osmode"))
  13.     (setvar "osmode" 0)
  14.     (setq ppa (list (car pp2) (cadr pp1)))
  15.     (setq ppb (list (car pp1) (cadr pp2)))
  16.     (setq ptlist (list pp1 ppa pp2 ppb))
  17.     (command "pline" pp1 ppa pp2 ppb "c")
  18.     (setq eedel (entlast))
  19.     (command "hatch" "" "" "" "l" "")
  20.     (entdel eedel)
  21.     (setq redent (ssget "f" ptlist))
  22.     (if (= redent nil)
  23.       ""
  24.       (progn
  25.         (setq i 1)
  26.         (setq rden (ssname redent 0))
  27.         (while rden
  28.     (redraw rden)
  29.     (setq rden (ssname redent i))
  30.     (setq i (+ i 1))
  31.         )

  32.       )
  33.       ;;progn
  34.     )
  35.     ;;end if
  36.     (setvar "osmode" osn)

  37.   )
  38.       )
  39.     )          ;end progn hpname
  40.   )
  41.   ;;end if hpname
  42. )

点评

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-15 05:17 , Processed in 0.511400 second(s), 58 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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