ciao a tutti,
esiste un comando per nascondere gli oggetti bloccati?
ho provato varie soluzioni, come mettere gli oggetti su un nuovo livello e poi bloccarli,
oppure raggrupparli e poi nasconderli, ma sono soluzioni molto macchinose e ritornare allo stato dei livelli o dei gruppi precedente è sempre difficile.
qualche idea?
ciao, Andrea
Ciao Andrea,
ho fatto una prova, si riesce a nascondere gli oggetti bloccati ma per farlo bisogna portarli a sbloccati e poi nasconderli con il risultato che quando torni a farli vedere sono sbloccati.
Il nascondi e visualizza non lavorano su oggetti bloccati.
Se ti va bene il comando che nasconde tutti gli oggetti bloccati (e non ti interessa che poi quando tornano visibili non sono più bloccati) puoi utilizzare il seguente script:
Option Explicit
'Script written by Lucio Zadra
'Script copyrighted by Zadra Giuseppe
'Script version giovedì 18 luglio 2024 13:20:54
Call Main()
Sub Main()
Dim ObjArray, Obj
ObjArray = Rhino.AllObjects
For Each Obj In Objarray
If Rhino.IsObjectLocked(Obj)Then
Rhino.UnlockObject(Obj)
Rhino.HideObject(Obj)
End If
Next
End Sub
ciao Lucio,
grazie per lo script, che ho provato.
purtroppo mi serve che gli oggetti rimangano bloccati.
sono file con tanti oggetti e si crea troppa confusione.
grazie ancora, ciao, Andrea
Ho paura che se riesci ad avere una geometria sia bloccata che nascosta, poi non avresti più strumenti per ri-renderla visibile, i comandi globali funzionano solo sulle geometrie visibili.
Andando ad operare direttamente sulle tabelle del documento forse si può… sarebbe da fare uno script c#. Hai Rhino 8?
cmq
Io è da un po di anni che uso spesso il Nudge.
Freccette + pagSù/pagGiù.
Potresti impostarti il CTRL+nudge o SHIFT+nudge con un valore molto grande, sufficiente a non avere più in vista le geometrie.
Inverti i bloccati
selezioni tutti, sposti nudge, inverti bloccati.
Si potrebbe fare anche un piccolo script per automatizzare il tutto…
Disegno e-bike, sposto quello che non mi serve di 250mm al colpo, ma rimane comunque visibile “li vicino”! Super-tattico.
Poi con inverti nascondi…
È come lavorare in 5D
Scusate l’intromissione, non sarebbe possibile inserire un comando, tipo Rhino.AddObjectToGroup, che raggruppi tutti gli oggetti in questione ìn modo da poterli richiamare facilmente.
Certo, inverti bloccati, raggruppi tutto, nascondi, inverti bloccati.
Funziona. Ma se poi usi spesso il “inverti nascondi”, ti ri-ritrovi tra i piedi quel gruppo di oggetti… raggruppati ma visibili.
Ho provato su 7 … non si può. Un oggetto è nascosto o bloccato, non entrambi.
Forse sul 8 ci sono cambiamenti a riguardo, ma non è probabile.
Io cambierei tattica e andrei a mettere gli oggetti in livelli bloccati che poi posso nascondere o visualizzare in base alla necessità.
Il “gruppo” viene inteso come appartenenza al layer.
Più semplice di tutto se non hai problemi a mettere gli oggetti in layer differenti (senza preoccuparti di colore, materiale, spessore stampa…) più complesso se, per mantenere un riferimento al layer originale, si è costretti a creare dei sottolayer con caratteristiche identiche al layer di partenza per poi bloccarli e gestire la visibilità.
Altra strada potrebbe essere l’utilizzo degli Snapshot che ti permettono di “fissare” una situazione e poterla richiamare successivamente (però gli snapshot funzionano su tutta la scena e potrebbe essere che alcuni oggetti vengano influenzati senza volerlo).
Tra le varie opzioni dello snapshot ti selezioni solo bloccato/visibile
Ti prepari la situazione voluta e salvi lo snapshot
Dal pannello degli Snapshot ti richiami la scena, ne salvi una di nuova oppure aggiorni una esistente.
Prova_Snapshot.3dm (180,5 KB)
grazie a tutti per le risposte e i commenti,
ritengo che per il mio modo di lavorare, la soluzione proposta da Lucio,
di inserire gli oggetti in un livello boccato da accendere e spegnere,
sia quella che mi è più facile.
grazie ancora, Andrea
Ciao Andrea !
Come ti hanno gia’ detto gli altri amici, per Rhino bloccato e nascosto sono stati alternativi.
O un oggetto e’ uno, o e’ l’altro.
Questo non e’ un problema se vuoi nascondere gli oggetti bloccati, in quanto basta prima sbloccarli.
Invece quando quegli stessi oggetti li vuoi mostrare, ma come oggetti bloccati, sorge il problema di salvare da qualche parte l’elenco degli oggetti bloccati che nascondi.
Non che sia un gran problema, solo e’ sempre una piccola complicazione in piu’, qualcosa che puo’ andar storto per qualche motivo.
Tutto ‘sto discorso solo per dire: non fidarti troppo di quanto posto qui.
Verifica tu se e quanto puo’ esserti utile, senza rischiare di perdere dati/tempo ecc.
Questo e’ lo script che nasconde tutti gli oggetti bloccati:
import scriptcontext
import rhinoscriptsyntax as rs
def main():
gids = rs.LockedObjects()
rs.UnlockObjects( gids )
rs.HideObjects( gids )
lkd = []
if 'hiddenfromlocked' in scriptcontext.sticky:
lkd = scriptcontext.sticky[ 'hiddenfromlocked' ]
lkd.extend( gids )
scriptcontext.sticky[ 'hiddenfromlocked' ] = lkd
print( '%d locked objects have been hidden' % len( gids ) )
main()
E questo e’ quello che mostra tutti gli oggetti bloccati che erano stati nascosti:
import scriptcontext
import rhinoscriptsyntax as rs
def main():
gids = rs.LockedObjects()
rs.UnlockObjects( gids )
rs.HideObjects( gids )
lkd = []
if 'hiddenfromlocked' in scriptcontext.sticky:
gids = scriptcontext.sticky[ 'hiddenfromlocked' ]
rs.ShowObjects( gids )
rs.LockObjects( gids )
del scriptcontext.sticky[ 'hiddenfromlocked' ]
print( '%d hidden locked objects have been shown' % len( gids ) )
main()
Per favore, controlla tu se funziona, anche chiudendo e riaprendo il file.
Dovrebbe, ma non ho provato …
Per la cornaca, per salvare l’elenco degli oggetti bloccati nascosti ho usato un dizionario Python messo a disposizione da McNeel per queste cose:
scriptcontext.sticky
Questi script dovrebbero permettere di nascondere oggetti salvati in piu’ riprese, ma ogni volta
Questi script dovrebbero permettere di salvare oggetti nascosti in piu’ riprese, ma ogni volta
lo script nasconde tutti gli oggetti bloccati, almeno credo.
E quando invece li mostra, mostra tutti gli oggetti bloccati nascosti in precedenza.
Se ti serve poter selezionare gli oggetti da nascondere o da mostrare, dimmelo e proviamo a vedere come fare.
Ciao
ciao Emilio,
grazie per gli script, li provo domani, oggi sono “arrivato”
quando ho chiesto se qualcuno aveva una soluzione, non immaginavo di creare un vespaio.
ti faccio sapere come mi sono trovato
grazie ancora,
ciao, Andrea
ciao Emilio,
ci sarebbero alcune righe in meno che a vista credo se ne possano fare a meno:
import scriptcontext
import rhinoscriptsyntax as rs
def main1():
gids = rs.LockedObjects()
rs.UnlockObjects( gids )
rs.HideObjects( gids )
lkd = []
lkd.extend( gids )
scriptcontext.sticky[ 'hiddenfromlocked' ] = lkd
print( '%d locked objects have been hidden' % len( gids ) )
def main2():
if 'hiddenfromlocked' in scriptcontext.sticky:
gids = scriptcontext.sticky[ 'hiddenfromlocked' ]
rs.ShowObjects( gids )
rs.LockObjects( gids )
del scriptcontext.sticky[ 'hiddenfromlocked' ]
print( '%d hidden locked objects have been shown' % len( gids ) )
io avrei fatto in questo modo, sembra che funzioni,
ma magari ci sono dei risvolti, nel caso puoi chiarire. . .
ps non vorrei sbagliare ma in RCommon, se ricordo bene ci dovrebbe essere un metodo che permetta di lavorare “selezionando” gli oggetti bloccati renderebbe meno macchinoso lo script.
pps bello “extend” al posto di append
forse è questo quello che ricordavo:
il filtro degli oggetti con cui Rhino va impostato col quale lavorare.
Ciao Salvio.
Hai ragione, nel secondo script chissa’ perche’ (forse dovrei candidarmi come presidente USA … ) ho lasciato le prime linee dell’altro script.
Grazie per il debugging !
Lo script ripulito e’ come lo hai postato tu:
import scriptcontext
import rhinoscriptsyntax as rs
def main():
if 'hiddenfromlocked' in scriptcontext.sticky:
gids = scriptcontext.sticky[ 'hiddenfromlocked' ]
rs.ShowObjects( gids )
rs.LockObjects( gids )
del scriptcontext.sticky[ 'hiddenfromlocked' ]
print( '%d hidden locked objects have been shown' % len( gids ) )
main()
( @Andrea :
Come vedi, ho modificato il secondo script secondo quanto giustamente notato da Salvio. )
Per il primo invece, la mia versione permette di nascondere gli oggetti bloccati senza perdere traccia di quelli nascosti in precedenza … cioe’, se funziona.
Be’, io ho usato rhinoscriptsyntax:
gids = rs.LockedObjects()
Credo sia la stessa cosa …
Fanno cose diverse.
append aggiunge un elemento alla lista
extend aggiunge gli elementi contenuti in un’altra lista alla nostra lista
Scusa ancora Andrea, l’ultimo script postato sopra non va.
Cosi’ dovrebbe essere meglio … spero :
import scriptcontext
import rhinoscriptsyntax as rs
def main():
if 'hiddenfromlocked' in scriptcontext.sticky:
gids = scriptcontext.sticky[ 'hiddenfromlocked' ]
rs.ShowObjects( gids )
rs.LockObjects( gids )
del scriptcontext.sticky[ 'hiddenfromlocked' ]
print( '%d hidden locked objects have been shown' % len( gids ) )
main()
ciao Emilio,
ti ringrazio ancora per l’impazzimento.
tempo fa ho provato a fare qualche script e a imparare VB ma non mi ricordo più niente.
(probabilmente posso candidarmi anche io a presidente americano)
ciao Andrea
Ciao Andrea.
Hahaha …
Anche sul forum la popolazione invecchia …
Forse dovremmo chiedere a Giuseppe una categoria ‘Candidati’, con i dovuti sottintesi …
Ciao
ma figurati!
Buona parte delle cose che ho imparato riguardo a rhino e grasshopper è stato tramite il forum. Vedendo come gli altri risolvevano i problemi e provando anch’io a risolverli.
Buon weekend!