Newsgroup: it.comp.software.cad
Titolo: LISP - Ancora comando stira e gruppo di selezione

Ciao a tutti,
in merito allo stesso problema esposto qualche giorno fa ho scritto le 
seguenti righe di codice che funzionano benissimo, tuttavia...:
   (setq pstir1 (getpoint "\nSelezionare primo angolo: "))
   (setq pstir2 (getcorner pstir1 "\nSpecificare angolo opposto: "))
   (setq p_utente (getpoint "\nSpecificare punto base: "))
   (setq Ppuntatore (car (cdr (grread T))))
   (command "_stretch" "_c" pstir1 pstir2 "" p_utente Ppuntatore)
Tuttavia ho bisogno che pstir1 pstir2 mi  prendano solo alcuni oggetti e non 
tutti quelli presenti nel disegno; ad es. solo gli oggetti di un determinato 
layer. Pertanto non posso passare al comando "_stretch" i punti di selezione 
ma un gruppo di oggetti.
Come posso fare?
Ringrazio in anticipo.
-- 
Emiliano - Webmaster di EmiCAD® - Tutto per AutoCAD e ProgeSOFT® ProgeCAD
e-mail:  
webm...@emicad.it
web:  
www.emicad.it
 

 
Non so se è possibile, dato che stretch vuole la selezione per punti.
Due possibili soluzioni:
- "bloccare" (o "congelare", ma IMHO è meglio il blocco) tutti i layer 
con oggetti che non devono essere modificati; hai due alternative: o usi 
direttamente il comando -layer oppure passi in rassegna la table dei 
layer, facendo sì che il codice dxf di stato del layer (70) contenga il 
bit 4;
- rimuovi dal gruppo di selezione gli oggetti non desiderati; per 
esempio per rimuovere quelli del layer "0":
    (command "_stretch" "_c" pstir1 pstir2
***                    "_r" (ssget "x" (list (cons 8 "0")))     ***
                        "" p_utente Ppuntatore
    )
certo è un po' macchinoso, ma al volo non trovo altre alternative.
Ciao
Maci

In aggiunta a quanto detto da maci:
1) puoi disattivare i Layers che non devi modificare
2) puoi "spegnere" gli oggetti che non devi modificare:
; TrueFl > :vlax-true = UnHide  -  :vlax-false = Hide
(defun ALE_PutVisible (SelSet TrueFl / EntNam)
; (vl-load-com)
  (while (setq EntNam (ssname SelSet 0))
    (vla-put-Visible (vlax-ename->vla-object EntNam) TrueFl)
    (ssdel EntNam SelSet)
  )
)
oppure modificare il gruppo 60, ad esempio:
(setq Entdat (entget (car (entsel))
(if (setq Dxf060 (assoc 60 EntDat))
  (setq EntDat (subst (cons 60 1) Dxf060 EntDat))
  (setq EntDat (append EntDat (list '(60 . 1))))
)
(entmod EntDat)
3) oppure, visto che devi escludere tutto escluso, ad esempio,
   un Layer:
 
; Stira solo gli oggetti sul Layer "1"
(defun C:EmiStira ( / pstir1 pstir2 p_utente)
  (setvar "CMDECHO" 0)
  (setq pstir1 (getpoint "\nSelezionare primo angolo: "))
  (initget 32)
  (setq 
    pstir2 (getcorner pstir1 "\nSpecificare angolo opposto: ")
    p_utente (getpoint "\nSpecificare punto base: ")
  )
  (command
    "_.stretch" "_c" pstir1 pstir2 "_R" (ssget "_X" '((8 . "~1"))) ""
    p_utente pause
  )
  (princ)
)
-- 
----------------------------------------------------------
Marc'Antonio Alessi - 
http://xoomer.virgilio.it/alessi
Per AutoCAD:
- Travi 2D: disegno automatico travi e pilastri in C.A.,
  relativi ferri e staffe, report peso ferri e C.A.
  su Excel
- Calcolo automatico aree su planimetrie: report su Excel
  per locale altezza, piano con descrizioni locali e piani
- Elaborazione dati from/to Excel
- Librerie manufatti in assonometria
- Autolayers: gestione automatica dei layers
- Elaborazioni e stampe multiple e automatiche
- Parametrico 2D, Viterie 2D/3D, Esplosi 2D/3D
- AutoGroups: gestione automatica gruppi di layers
- SetUp del disegno con gestione automatica DimStyles
- Conversione automatica files Inventor a DWG e viceversa
  anche senza avere Inventor installato
- ...
----------------------------------------------------------

  )
:-)))
~   !!! Questa proprio non la conoscevo ed era quella che cercavo: avevo 
cercato di vedere se mi funzionava un NOT nella costruzione della lista 
di ssget "X" e quindi mi ero arreso all'idea di dover processare uno ad 
uno i diversi layer.
Complimenti!  :-)
Ciao
Maci

 documentata nella rel 2006) oppure va definita precedentemente?
Purtroppo non c'è un Help diretto per le funzioni Vla.....
Occorre andare a vedere le omonime (o quasi) in:
ActiveX and VBA Reference
Il manuale ActiveX and VBA Reference fornisce informazioni sul modello di 
oggetti ActiveX e sui componenti di interfaccia associati e comprende i seguenti 
argomenti:
Object Model
Events
Methods
Properties
Objects
Code Examples
--
Visible
Specifies the visibility of an object or the application.
See Also | Example
Signature
object.Visible
object
All Drawing objects, Application, AttributeReference, Group, Toolbar
The object or objects this property applies to.
Visible
Boolean; read-write (write-only for the Group object)
TRUE: The object or application is visible.
FALSE: The object or application is not visible.
Remarks
If you specify an object to be invisible, it will be invisible regardless of the 
application visible setting. Other factors can also cause an object to be 
invisible; for example, an object will not be displayed if its layer is off or 
frozen.
Specifying the application to be invisible allows you to run tasks in the 
background without having to see the component.
Ciao.
M. 


Grazie Marco e Maci,
ho risolto, con l'utilissimo  (ssget "_X" '((8 . "~1")))
Ciao
