李青松 发表于 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 15:16:58

你的程序的功能同我附上的程序的功能是一样的并没有什么区别,
写程序的时候可以先把当前图层0改成图层1,然后再填充,填充完后再把图层改成0这样就是拐了1下弯,思路可以是这样,哪个高手改1下

coolpoom 发表于 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)
)

669423907 发表于 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)

xyp1964 发表于 2013-10-29 18:22:15


(defun c:tt ()
(if (= (tblsearch "layer" "1") nil)
    (Command "-layer" "m" "1" "c" 1 "" "")
    (Command "-layer" "t" "1" "")
)
(setvar "clayer" "1")
(princ "\n选择区域点: ")
(command "-BHATCH" "p" "ansi31" "3" "0" pause)
(while (> (getvar "CMDACTIVE") 0)
    (command PAUSE)
    (princ "\n选择区域点<回车完成>: ")
)
(setvar "clayer" "0")
(princ)
)

李青松 发表于 2013-10-30 10:31:00

xyp1964的程序非常好,赞!!!!

1993063 发表于 2013-11-4 09:44:16

程序必须要加错误处理(defun c:tt (/ *error* p li cm)
(defun *error* (x)
    (command "undo" "e")
    (setvar 'clayer li)
    (setvar 'cmdecho cm)
    (princ)
)
(setq        li (getvar 'clayer)
        cm (getvar 'cmdecho)
)
(setvar 'cmdecho 0)
(command "undo" "be")
(Command "-layer" "m" "1" "c" 1 "" "")
(setvar "clayer" "1")
(setq p (getpoint "\n →请点选:"))
(while p
    (Command ".bhatch" "p" "" "" "" p "")
   (setq p (getpoint "\r →请点选:"))
)
(*error* nil)
)
页: [1] 2
查看完整版本: 下面是一个填充图案的程序,我想把填充后的图案自动放到指定的图层内,图层名可以修改