Author Topic: how can I put ActiveViewport layer to freeze  (Read 3704 times)

0 Members and 1 Guest are viewing this topic.

Dream.Fei

  • Guest
how can I put ActiveViewport layer to freeze
« on: July 26, 2007, 08:27:37 AM »
Code: [Select]
(defun c:test (/ *laysel* layname layobj)
  (setq    layname "test"
*laysel* (vla-get-layers (vla-get-activedocument (vlax-get-acad-object)))
layobj (vla-item *laysel* layname)
  )
  (vla-put-freeze layobj :vlax-true)
)
This code made layer "Test" to frezze, but I only want freeze it on the activeviewport . how?
« Last Edit: July 26, 2007, 08:29:56 AM by Dream.Fei »

CAB

  • Global Moderator
  • Seagull
  • Posts: 10401
I've reached the age where the happy hour is a nap. (°¿°)
Windows 10 core i7 4790k 4Ghz 32GB GTX 970
Please support this web site.

Dream.Fei

  • Guest
Re: how can I put ActiveViewport layer to freeze
« Reply #2 on: July 26, 2007, 11:40:41 PM »
 :cry:
That code is to get.
how about Put?
Code: [Select]
;; put layer on activeviewport to freeze
(defun c:x2 (/ date en ent-date layname lst tmp-date)
  ;;_Freeze layername on this viewport to freeze
  (setq layname "F_LINE")

  ;; viewport Ename
  (setq en (car (entsel "\nSelect ViewPort:")))

  (setq ent-date (entget en))

  ;; list of DXF -3
  (setq date (cdadr (assoc -3 (entget en '("acad")))))

  ;; Remove last 2 part (1002 . }) (1002 .})
  (setq tmp-date (fei-lst-cut date (- (length date) 3) t))

  ;; Freeze Layer
  (setq lst (list (cons 1003 layname) '(1002 . "}") '(1002 . "}")))

  ;; How to update this date?
  (setq tmp-date (list -3 (cons "acad" (append tmp-date lst))))
  (setq ent-date (append ent-date (list tmp-date)))
  (entmod ent-date)
  (entupd en)
  (princ)
)
(defun fei-lst-cut (lst num notif / index loop nlst)
  (setq loop t)
  (if notif
    (setq index -1)
    (setq index 0)
  )
  (while (and loop (cdr lst))
    (setq index (1+ index))
    (setq nlst (cons (car lst) nlst))
    (setq lst (cdr lst))
    (if (= index num)
      (setq loop nil)
    )
  )
  (if notif
    (reverse nlst)
    lst
  )
)
I haved try,but no work....
« Last Edit: July 26, 2007, 11:52:12 PM by Dream.Fei »

Adesu

  • Guest
Re: how can I put ActiveViewport layer to freeze
« Reply #3 on: July 27, 2007, 12:32:35 AM »
Hi Dream.Fei,
How about this code
Code: [Select]
(defun c:test (/ *laysel* layname layobj)
  (setq layname "test")
  (setq *laysel* (vla-get-layers (vla-get-activedocument (vlax-get-acad-object))))
  ;(vlax-dump-object *laysel*)
  (setq layobj (vla-item *laysel* layname))
  ;(vlax-dump-object layobj)
  (vlax-put layobj 'LayerOn 0)
  )

Dream.Fei

  • Guest
Re: how can I put ActiveViewport layer to freeze
« Reply #4 on: July 27, 2007, 01:39:26 AM »
Thank you ades.
but not "LayerOn". it's "Freeze on AcitveViewport".

Freeze & On Acitveviewport

Adesu

  • Guest
Re: how can I put ActiveViewport layer to freeze
« Reply #5 on: July 27, 2007, 01:56:59 AM »
Hi Dream.Fei,
Do you mean like this, I'm not sure.
Code: [Select]
(defun c:test (/ *laysel* layname layobj tm)
  (setq tm (getvar "tilemode"))
  (if
    (> tm 0)
    (setvar "tilemode" 0)
    ) ; if
  (setq layname "test")
  (setq *laysel* (vla-get-layers (vla-get-activedocument (vlax-get-acad-object))))
  ;(vlax-dump-object *laysel*)
  (setq layobj (vla-item *laysel* layname))
  ;(vlax-dump-object layobj)
  (vlax-put layobj 'Freeze -1)
  ;(setvar "tilemode" tm)
  (princ)
  )

Thank you ades.
but not "LayerOn". it's "Freeze on AcitveViewport".

Freeze & On Acitveviewport


VVA

  • Newt
  • Posts: 166
Re: how can I put ActiveViewport layer to freeze
« Reply #6 on: July 27, 2007, 02:17:17 AM »
Look command "_.VPLAYER"
As an example - a command freeze  a current layer on all viewports
Code: [Select]
;;_Freeze current layer on all viewport
;;ViewPort Current Layer Freeze
(defun C:VPCLF ( )
(if (zerop (getvar "tilemode"))
  (progn
    (if (/= (getvar "cvport") 1)(command "_.PSPACE"))
    (command "_.VPLAYER" "_Freeze" (getvar "CLAYER") "_ALL" "")
    )
  (princ "\nNot worked in model space")
  )
(princ)
)

Dream.Fei

  • Guest
Re: how can I put ActiveViewport layer to freeze
« Reply #7 on: July 27, 2007, 04:02:23 AM »
Freeze on all viewport is very easy.
the question is "On Active Viewport" or mean "Select Viewport to freeze some layer on this viewport"

VVA's code can freeze , but I don't want use "Command"
« Last Edit: July 27, 2007, 04:09:15 AM by Dream.Fei »

VVA

  • Newt
  • Posts: 166
Re: how can I put ActiveViewport layer to freeze
« Reply #8 on: July 27, 2007, 07:04:08 AM »
I did not manage to achieve result with usage vla methods
Code: [Select]
(defun C:test ( )
  (setq    layname "test")
(if (zerop (getvar "tilemode"))
  (progn
    (if (/= (getvar "cvport") 1)
      (command "_.VPLAYER" "_Freeze" layname "_current" "")
      (princ "\nSelect viewport")
      )
    )
  (princ "\nNot worked in model space")
  )
(princ)
)

CAB

  • Global Moderator
  • Seagull
  • Posts: 10401
Re: how can I put ActiveViewport layer to freeze
« Reply #9 on: July 27, 2007, 08:19:48 AM »
Adesu,
Your code freezes the layer in the drawing and not in the viewport only.

Dream.Fei,
I have not found a way to freeze the layer in the viewport without using the command.

Here is another version that freezes in all other viewports, not the current viewport.

http://www.theswamp.org/index.php?topic=3779.msg45863#msg45863
I've reached the age where the happy hour is a nap. (°¿°)
Windows 10 core i7 4790k 4Ghz 32GB GTX 970
Please support this web site.

Dream.Fei

  • Guest
Re: how can I put ActiveViewport layer to freeze
« Reply #10 on: July 27, 2007, 09:24:56 AM »
Thanks All.

VAA's last reply can modify the layer to freeze on select viewport.

This my lisp code, it isn't I wanted.
Code: [Select]
(defun c:x1 (/ en layname)
  (setvar "cmdecho" 0)
  (setq layname "t")
  (if (zerop (getvar "tilemode"))
    (while (setq en (car (entsel "\nSelect ViewPort Object:")))
      (if (= (cdr (assoc 0 (entget en))) "VIEWPORT")
(vl-cmdf "_.vplayer" "freeze" layname "s" en "" "")
(princ "   ** Selected is't a viewport object , Try again! **")
      )
    )
    (princ "** Not worked in model space **")
  )
  (princ)
)
I hope someone can find other way to freeze layer on select viewport without use command.

thanks.
« Last Edit: July 27, 2007, 09:35:39 AM by Dream.Fei »

SomeCallMeDave

  • Guest
Re: how can I put ActiveViewport layer to freeze
« Reply #11 on: July 27, 2007, 04:00:01 PM »
Here is one that seems to work.  But you have to change back to modelspace or to another layout tab and THEN BACK TO original tab for the results to be apparent.

The programs assumes that you are already in paperspace (among other assumptions).  Error checking is left to the user -

 USE AT YOUR OWN RISK

Code: [Select]
(vl-load-com)
(defun c:lf( )
   
   ;assumes tilemode is currently 0
   (command "pspace")
   (setq VpEntName (car (entsel "\nSelect ViewPort in which to Freeze Layers:"))
         VpNumber (cdr (assoc 69 (entget VpEntName)))
         oVpEnt (vlax-ename->vla-object VpEntName)
         oVpXdata (vlax-invoke-method oVpEnt 'GetXData "ACAD" 'XdataType 'XDataValue)
         xDataUBound (vlax-safearray-get-u-bound xDataType 1)
   );setq
   (command "mspace")
   (if (not (= (getvar "CVPORT") VpNumber))
      (setvar "CVPORT" VpNumber)
   );if   
   (setq FreezeMeEntName (car (entsel "\nSelect Object on Layer to Freeze in Current Vport:"))
         FreezeMeLayerName (cdr (assoc 8 (entget FreezeMeEntName)))
   );setq
   ;;create new xdata arrays
   (setq NewTypeSA (vlax-make-safearray 2 (cons 0 (+ xDataUBound 1)))
         NewValueSA (vlax-make-safearray 12 (cons 0 (+ xDataUBound 1)))
         TypeList (vlax-safearray->list XDataType)
         ValueList (vlax-safearray->list XDataValue)
         ;;append a dummy value to the lists so we can use them on the new SafeArrays
         TypeList2 (append TypeList (list 1002))
         ValueList2 (append ValueList (list (vlax-make-variant "}" 8)))
         
   );setq

   ;fill up the new SA's with existing data
   (vlax-safearray-fill NewTypeSA TypeList2)
   (vlax-safearray-fill NewValueSA ValueList2)
   
   ;;change the 3rd from last element to 1003
   
   ; subtract only 1 since we added an element since we established xDataUBound
   (vlax-safearray-put-element NewTypeSA (- xDataUBound 1) 1003)
   ;change the 3rd from last element to our selected LayerName
   (setq ValVarLayer (vlax-make-variant FreezeMeLayerName 8)   )     
   ; subtract only 1 since we added an element since we established xDataUBound
   (vlax-safearray-put-element NewValueSA (- xDataUBound 1) ValVarLayer)
     
   ;add the new xdata
   (vlax-invoke-method oVpEnt 'SetXData NewTypeSa NewValueSA)
   (vlax-invoke oVpEnt 'Update)
   
   (vlax-release-object oVpEnt)
   (prin1)
 
);lf



And I'm sure the switch from paperspace to modelspace through the viewport can be made more elegant,  but this should give you an idea of what is involved.