明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 5644|回复: 18

[已解答] 下面是一个填充图案的程序,我想把填充后的图案自动放到指定的图层内,图层名可以修改

[复制链接]
发表于 2013-10-28 11:41:06 | 显示全部楼层 |阅读模式
下面是一个填充图案的程序,我想把填充后的图案自动放到指定的图层内,图层名可以修改
,我想1个命令完成两个动作
(defun c:6y() (command "-BHATCH"  "p" "ansi31" "3" "0"))

发表于 2013-10-28 12:00:46 | 显示全部楼层
本帖最后由 自贡黄明儒 于 2013-10-28 13:47 编辑

(defun c:6y()
(setq my (getvar "clayer"));当前层
(setvar "clayer" "1")
(command "-BHATCH"  "p" "ansi31" "3" "0")
(setvar "clayer" my)
(PRINC)
)
 楼主| 发表于 2013-10-28 13:34:11 | 显示全部楼层
看不懂,麻烦给1个完整的程序.        重复1下比如:我的当前层是0我想把填充的图案自动放到图层1

点评

自动放置,需要用反应器,那就麻烦了。看看上面是不是你需要的。  发表于 2013-10-28 13:49
 楼主| 发表于 2013-10-28 15:16:58 | 显示全部楼层
你的程序的功能同我附上的程序的功能是一样的并没有什么区别,
写程序的时候可以先把当前图层0改成图层1,然后再填充,填充完后再把图层改成0这样就是拐了1下弯,思路可以是这样,哪个高手改1下
发表于 2013-10-28 16:04:14 | 显示全部楼层
(defun c:6y(/ ss)
  (setq ss(getstring "\n请输入指定图层:"))
  (command "layer" "m" ss "")
  (command "-BHATCH"  "p" "ansi31" "3" "0" pause)
  (while (> (getvar "CMDACTIVE") 0) (command PAUSE))
  (setvar "clayer" "0")
  (princ)
  )
发表于 2013-10-28 16:35:25 | 显示全部楼层
G板的也有源码啊!
;自动转层 SunSpring http://bbs.mjtd.com/thread-86804-1-1.html
(defun xlr-autolayer ()
  ;; 图层初始化列表 内容:commands layers color linetype plottable
  (setq *doc (vla-get-activedocument (vlax-get-acad-object)))
  (setq *lays (vla-get-layers *doc))
  (setq  *laylst
    (list
          (list "dimlinear" "7标注" 3 "continuous" T)    ;线性
          (list "dimdiameter" "7标注" 3 "continuous" T)  ;直径
          (list "dimradius" "7标注" 3 "continuous" T)    ;半径
          (list "dimcontinue" "7标注" 3 "continuous" T)  ;连续
          (list "dimbaseline" "7标注" 3 "continuous" T)  ;基准
          (list "dimangular" "7标注" 3 "continuous" T)   ;角度
          (list "dimaligned" "7标注" 3 "continuous" T)   ;对齐
          (list "qleader" "7标注" 3 "continuous" T)      ;引线
          (list "dimordinate" "7标注" 3 "continuous" T)  ;坐标标注
          (list "qdim" "7标注" 3 "continuous" T)         ;快速标注
          (list "tolerance" "7标注" 3 "continuous" T)    ;形位公差标注
          (list "dtext" "9文字" 3 "continuous" T)
          (list "mtext" "9文字" 3 "continuous" T)
          (list "xline" "6不打印" 44 "continuous" T)
          (list "text" "9文字" 253 "continuous" T)
          (list "bhatch" "填充" 11 "continuous" T)
          (list "hatch" "填充" 11 "continuous" T)
          (list "dimcenter" "3中心线" 1 "continuous" T)   ;圆心标记
         ;(list "POINT" "点" 4 "continuous" T)
         ;(list "LINE" "0" NIL "continuous" T)
         ;(list "XREF" "引用" 7 "continuous" T)
         ;(list "pline" "多义线" 2 "center" T)
    )
  )
  (setq OldLayer nil)
  (setq *cmdlst (mapcar 'strcase (mapcar 'car *laylst)))
  (mapcar '(lambda (x) (vlr-command-reactor nil x))
    (list  '((:vlr-commandWillStart . xlr-start))
    '((:vlr-commandEnded . xlr-end))
    '((:vlr-commandCancelled . xlr-cancel))
    )
  )
  (vlr-editor-reactor nil '((:vlr-commandwillstart . xlr-edit)))
)
;;;----------------------------------------------------------------------------;;;
(defun xlr-edit  (call callback / n)
  (foreach n *laylst
    (if  (= (strcase (car callback)) (strcase (car n)))
      (apply 'xsetlays (cdr n))
    )
  )
)
;;;----------------------------------------------------------------------------;;;
(defun xlr-start (calling-reactor xlr-startinfo / n)
  (foreach n *laylst
    (if (= (strcase (car xlr-startinfo)) (strcase (car n)))  
      (apply 'xsetlays (cdr n))
    )
  )
)
;;;----------------------------------------------------------------------------;;;
(defun xlr-end (calling-reactor xlr-endinfo / cmd)
  (setq cmd (car xlr-endinfo))
  (if (member cmd *cmdlst)
    (if (/= oldlayer nil)
      (progn
        (setvar "clayer" oldlayer)
        (setq oldlayer nil)
      )
    )
  )
)
;;;----------------------------------------------------------------------------;;;
(defun xlr-cancel (calling-reactor xlr-cancelinfo / cmd)
  (setq cmd (car xlr-cancelinfo))
  (if (member cmd *cmdlst)
    (if (/= oldlayer nil)
      (progn
        (setvar "clayer" oldlayer)
        (setq oldlayer nil)
      )
    )
  )
)
;;;----------------------------------------------------------------------------;;;
(defun xsetlays  (lay-nam color ltype plotk / layobj ltypesobj)
  (defun layeron (layername / layerdata)
    (setq layerdata (entget (tblobjname "LAYER" layername)))
    (if (< (cdr (assoc 62 layerdata)) 0)
      (progn
        (setq layerdata (subst
                          (cons 62 (- 0 (cdr (assoc 62 layerdata))))
                          (assoc 62 layerdata)
                          layerdata
                        )
        )
        (entmod layerdata)
      )
    )
  )
  (if (tblobjname "layer" lay-nam)
    (progn
      (if (/= (strcase (getvar "clayer")) (strcase lay-nam))
        (setq oldlayer (getvar "clayer"))
        (progn
          (if (= oldlayer nil)
            (setq oldlayer lay-nam)
          )
        )
      )
      (layeron lay-nam)
      (setvar "clayer" lay-nam)
    )
    (progn
      (vl-catch-all-error-p (vl-catch-all-apply 'vla-add (list *lays lay-nam)))
      (setq layobj (vla-item *lays lay-nam))
      (if (not (tblobjname "ltype" ltype)) ;添加线型.
        (progn
          (setq ltypesobj (vla-get-linetypes *doc))
          (vla-load ltypesobj ltype (findfile "acad.lin"))  ;>>> 要加强,在多个*.lin寻找
          (vlax-release-object ltypesobj)
        )
      )
      (vla-put-layeron layobj :vlax-true)
      (vla-put-lock layobj :vlax-false)
      (if (= (strcase (getvar "clayer")) (command "layer" "on" "" "")(strcase lay-nam)) ;解冻.
        (vla-put-freeze layobj :vlax-false)
      )
      (vla-put-color layobj color)
      (vla-put-linetype layobj LTYPE)
      (vla-put-plottable layobj (if plotk :vlax-true :vlax-false))
    )
  )
)
;(xlr-autolayer)        ;加载启动!
 楼主| 发表于 2013-10-29 15:21:37 | 显示全部楼层
这个程序想改下,不需要输入指定图层,就是所放置的图层弄成自动转到图层1,不要去手动输入了(当前图层是0)所要放置的图层在程序里面可以修改

(defun c:6y(/ ss)
  (setq ss(getstring "\n请输入指定图层:"))
  (command "layer" "m" ss "")
  (command "-BHATCH"  "p" "ansi31" "3" "0" pause)
  (while (> (getvar "CMDACTIVE") 0) (command PAUSE))
  (setvar "clayer" "0")
  (princ)
发表于 2013-10-29 18:22:15 | 显示全部楼层

  1. (defun c:tt ()
  2.   (if (= (tblsearch "layer" "1") nil)
  3.     (Command "-layer" "m" "1" "c" 1 "" "")
  4.     (Command "-layer" "t" "1" "")
  5.   )
  6.   (setvar "clayer" "1")
  7.   (princ "\n选择区域点: ")
  8.   (command "-BHATCH" "p" "ansi31" "3" "0" pause)
  9.   (while (> (getvar "CMDACTIVE") 0)
  10.     (command PAUSE)
  11.     (princ "\n选择区域点<回车完成>: ")
  12.   )
  13.   (setvar "clayer" "0")
  14.   (princ)
  15. )
 楼主| 发表于 2013-10-30 10:31:00 | 显示全部楼层
xyp1964的程序非常好,赞!!!!
发表于 2013-11-4 09:44:16 | 显示全部楼层
程序必须要加错误处理
  1. (defun c:tt (/ *error* p li cm)
  2.   (defun *error* (x)
  3.     (command "undo" "e")
  4.     (setvar 'clayer li)
  5.     (setvar 'cmdecho cm)
  6.     (princ)
  7.   )
  8.   (setq        li (getvar 'clayer)
  9.         cm (getvar 'cmdecho)
  10.   )
  11.   (setvar 'cmdecho 0)
  12.   (command "undo" "be")
  13.   (Command "-layer" "m" "1" "c" 1 "" "")
  14.   (setvar "clayer" "1")
  15.   (setq p (getpoint "\n →请点选:"))
  16.   (while p
  17.     (Command ".bhatch" "p" "" "" "" p "")
  18.      (setq p (getpoint "\r →请点选:"))
  19.   )
  20.   (*error* nil)
  21. )
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-20 09:04 , Processed in 0.183253 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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