automation error incorrect layer

automation error incorrect layer

CADaSchtroumpf
Advisor Advisor
1,384 Views
6 Replies
Message 1 of 7

automation error incorrect layer

CADaSchtroumpf
Advisor
Advisor

Hi,

 

I dont 'understand my error.

In code below, if i run it for the first time it work's, but return error:

; erreur: Erreur Automation Calque incorrect

If run it a new instance, I have always this error.

Can you help, I'm lost...

 

I want to isolate layers , and in place of (getkword) run code to make something and at end restore layers

((lambda ( / )
	(princ "\nChoix des entités pour désigner les calques à garder actif: ")
	(setq js (ssget) lay_stat nil)
	(cond
		(js
			(repeat (setq n (sslength js))
				(setq lst_lay (cons (cdr (assoc 8 (entget (ssname js (setq n (1- n)))))) lst_lay))
			)
			(setq
				doc (vla-get-activedocument (vlax-get-acad-object))
				space
				(if (eq (getvar "CVPORT") 1)
					(vla-get-PaperSpace doc)
					(vla-get-ModelSpace doc)
				)
			)
			(vlax-for lay (vla-get-layers doc)
				(setq lay_stat
					(cons
						(list
							lay
							(vla-get-freeze lay)
							(vla-get-lock lay)
							(vla-get-layeron lay)
						)
						lay_stat
					)
				)
				(if (not (member (vla-get-name lay) lst_lay))
					(vla-put-layeron lay :vlax-false)
				)
				(if (eq (vla-get-name lay) "0")
					(progn
						(vla-put-freeze lay :vlax-false)
						(vla-put-lock lay :vlax-false)
						(vla-put-layeron lay :vlax-true)
					)
				)
			)
			(setvar "CLAYER" "0")
(print lay_stat)
(getkword)
			(mapcar
				'(lambda (x)
					(vla-put-freeze (car x) (cadr x))
					(vla-put-lock (car x) (caddr x))
					(vla-put-layeron (car x) (cadddr x))
				)
				lay_stat
			)
		)
	)
))
0 Likes
Accepted solutions (1)
1,385 Views
6 Replies
Replies (6)
Message 2 of 7

marko_ribar
Advisor
Advisor

Basically your code is correct... You just have to implement checks for layer property true-false before you initialize change... I've marked in red what should you do in your code - marks are in my version which is similar to your, but I think you can handle it :

 

(defun c:layiso-uniso-by-off ( / ss i lay_lst lay lay_lst_off lay0 laycoll )

  (vl-load-com)

  (while
    (or
      (prompt "\nSelect entities whose layers you want to isolate by off others...")
      (not (setq ss (ssget)))
    )
    (prompt "\nEmpty sel.set...")
  )
  (repeat (setq i (sslength ss))
    (setq lay_lst (cons (cdr (assoc 8 (entget (ssname ss (setq i (1- i)))))) lay_lst))
  )
  (while (setq lay (tblnext "LAYER" (null lay)))
    (setq lay (cdr (assoc 2 lay)))
    (if (not (vl-position lay lay_lst))
      (setq lay_lst_off (cons lay lay_lst_off))
    )
  )
  (if (vl-position "0" lay_lst_off)
    (setq lay_lst_off (vl-remove "0" lay_lst_off))
  )
  (setq lay0 (vla-item (setq laycoll (vla-get-layers (vla-get-activedocument (vlax-get-acad-object)))) "0"))
  (if (not (= (vla-get-freeze lay0) :vlax-false))
    (vla-put-freeze lay0 :vlax-false)
  )
  (if (not (= (vla-get-lock lay0) :vlax-false))
    (vla-put-lock lay0 :vlax-false)
  )
  (if (not (= (vla-get-layeron lay0) :vlax-true))
    (vla-put-layeron lay0 :vlax-true)
  )
  (setvar 'clayer "0")
  (foreach lay lay_lst_off
    (if (not (= (vla-get-layeron (setq lay (vla-item laycoll lay))) :vlax-false))
      (vla-put-layeron lay :vlax-false)
    )
  )
  (prompt "\nENTER TO CONTINUE...")
  (vl-catch-all-apply 'grread)
  ;;; do some stuff
  (foreach lay lay_lst_off
    (if (not (= (vla-get-layeron (setq lay (vla-item laycoll lay))) :vlax-true))
      (vla-put-layeron lay :vlax-true)
    )
  )
  (princ)
)

HTH., M.R.

Marko Ribar, d.i.a. (graduated engineer of architecture)
Message 3 of 7

ВeekeeCZ
Consultant
Consultant
Accepted solution

I think the issue is that you're trying to change the 'freeze property of current layer.

0 Likes
Message 4 of 7

marko_ribar
Advisor
Advisor

@ВeekeeCZ wrote:

I think the issue is that you're trying to change the 'freeze property of current layer.


Where in his code do you see he was trying that... The problem is actually that you can't reset already set property with the same condition true or false IMHO...

Marko Ribar, d.i.a. (graduated engineer of architecture)
0 Likes
Message 5 of 7

marko_ribar
Advisor
Advisor

It looks that @ВeekeeCZ you are right... I've just tested layeron property on "Layer1" in my DWG and it didn't fail :

 

(defun c:lay1on nil
  (vl-load-com)
  (vla-put-layeron (vla-item (vla-get-layers (vla-get-activedocument (vlax-get-acad-object))) "Layer1") :vlax-true)
  (princ)
)
(defun c:lay1off nil
  (vl-load-com)
  (vla-put-layeron (vla-item (vla-get-layers (vla-get-activedocument (vlax-get-acad-object))) "Layer1") :vlax-false)
  (princ)
)

But then again, I can't see where is OP putting his current layer to freeze state... If someone sees it, give us a feedback...

Marko Ribar, d.i.a. (graduated engineer of architecture)
0 Likes
Message 6 of 7

marko_ribar
Advisor
Advisor

Actually after looking again, you are telling that his "0" layer was frozen before OP initialize his code? I now am suspicious about this as I never started any routine I ever wrote with my layer "0" frozen...

Marko Ribar, d.i.a. (graduated engineer of architecture)
0 Likes
Message 7 of 7

CADaSchtroumpf
Advisor
Advisor

You are rigth,

The cause is that change current layer by (setvar "CLAYER") and try to restore properties that I have collect before that!

 

The code that seem to work's

((lambda ( / js lay_stat lst_lay doc space lay_curr lay_stat old_curlay)
	(princ "\nSelect entities for designate layer to keep on: ")
	(setq js (ssget) lay_stat nil lst_lay nil)
	(cond
		(js
			(repeat (setq n (sslength js))
				(setq lst_lay (cons (cdr (assoc 8 (entget (ssname js (setq n (1- n)))))) lst_lay))
			)
			(setq
				doc (vla-get-activedocument (vlax-get-acad-object))
				space
				(if (eq (getvar "CVPORT") 1)
					(vla-get-PaperSpace doc)
					(vla-get-ModelSpace doc)
				)
			)
			(vlax-for lay (vla-get-layers doc)
				(if (eq (getvar "CLAYER") (vla-get-name lay))
					(setq lay_curr (list lay (vla-get-freeze lay) (vla-get-lock lay) (vla-get-layeron lay)))
					(setq lay_stat
						(cons
							(list
								lay
								(vla-get-freeze lay)
								(vla-get-lock lay)
								(vla-get-layeron lay)
							)
							lay_stat
						)
					)
				)
				(if (not (member (vla-get-name lay) lst_lay))
					(vla-put-layeron lay :vlax-false)
				)
				(if (eq (vla-get-name lay) "0")
					(progn
						(vla-put-freeze lay :vlax-false)
						(vla-put-lock lay :vlax-false)
						(vla-put-layeron lay :vlax-true)
					)
				)
			)
			(setq old_curlay (getvar "CLAYER"))
			(setvar "CLAYER" "0")
(getkword "\nAny key for continue")
			(vla-put-freeze (car lay_curr) (cadr lay_curr))
			(vla-put-lock (car lay_curr) (caddr lay_curr))
			(vla-put-layeron (car lay_curr) (cadddr lay_curr))
			(setvar "CLAYER" old_curlay)
			(mapcar
				'(lambda (x)
					(vla-put-freeze (car x) (cadr x))
					(vla-put-lock (car x) (caddr x))
					(vla-put-layeron (car x) (cadddr x))
				)
				lay_stat
			)
		)
	)
	(prin1)
))

Marko: you'r code run perfectly! Thank too you

0 Likes