Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

LISP - Ancora comando stira e gruppo di selezione

0 views
Skip to first unread message

Emiliano - EmiCAD

unread,
Mar 6, 2006, 10:18:59 AM3/6/06
to
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


Maci

unread,
Mar 7, 2006, 3:59:31 AM3/7/06
to
Ciao Emiliano

> 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.
>

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

Marco_AA

unread,
Mar 7, 2006, 8:59:57 AM3/7/06
to
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
- ...
----------------------------------------------------------

Maci

unread,
Mar 7, 2006, 10:15:12 AM3/7/06
to
Marco_AA ha scritto:

> In aggiunta a quanto detto da maci:
>
> 1) puoi disattivare i Layers che non devi modificare
>

OK, come alternativa al congelamento (anche se continuo a credere che il
blocco del layer sia la forma più "elegante")


> 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)
> )
> )

:-o
quando mi deciderò a studiare le vl?-* ??? :-))
non ne so niente.
Ma la funzione vla-put-Visible è già presente in vlisp (non la trovo
documentata nella rel 2006) oppure va definita precedentemente?

>
> 3) oppure, visto che devi escludere tutto escluso, ad esempio,
> un Layer:

> (command
> "_.stretch" "_c" pstir1 pstir2 "_R" (ssget "_X" '((8 . "~1"))) ""
> p_utente pause
> )

:-)))
~ !!! 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

Marco_AA

unread,
Mar 7, 2006, 12:49:54 PM3/7/06
to
> Ma la funzione vla-put-Visible è già presente in vlisp (non la trovo
> 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.

Emiliano - EmiCAD

unread,
Mar 11, 2006, 12:56:04 PM3/11/06
to

"Marco_AA" <Marco_AA@Marco_AA.com> ha scritto nel messaggio
news:440d9cca$1$36930$4faf...@reader3.news.tin.it...

> 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:
>

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

Ciao

0 new messages