Problema NamedPosition

Abbiamo un problema con la funzione NamedPosition:
se da un disegno complesso in cui i layer sono stati trattati con la NamedPosition, estraggo un layer, lo modifico e lo reinserisco tutto ok, il restore position funziona, ma se l’oggetto da sostituire lo sotituisco con un oggetto senza la NamedPosition save fatta, mi perde tutte le posizioni di tutti gli oggetti.
Peccato non riconosca per nomelayer l’ereditarietà delle posizioni.

Comunque sia, vorrei aggirare l’ostacolo leggendo da una applicazione esterna le coordinate di un determinato oggetto e riposizionarlo a piacere sempre con input manuale delle coordinate X, Y, Z.

Come se invece della NamedPosition Save leggessi le coordinate di posizione della geometria e al posto della NamedPosition Restore inserissi delle coordinate inserendo i singoli valori.

Qualche aiuto?

Non vorrei aver capito male e di conseguenza sovra-semplificare il problema… ma se di ogni oggetto 3D tu individuassi il baricentro della posizione iniziale e lo abbinassi alla id dell’oggetto, indipendentemente dal layer cui appartiene, potresti sempre ritracciare la sua posizione iniziale…

Faccio un passo indietro:

se in un file complesso con più layer in cui tutte le posizioni dell’oggetto sono state salvate con NamedPosition, estraggo un layer per modificarlo, sorge il problema che poi devo riposizionare l’oggetto nella posizione originale.
Il problema è che se per caso sostituisco il componente che sto modificando magari facendo copia incolla o importandolo da un altro file senza le posizioni, Rhino sembra che perda le posizioni po di tutti i componente quando tento di reinserire il componente modificato.
Considera che siamo in una applicazione che è in grado modificato un componente di andare ad aggiornare automaticamente tutti gli assiemi che contengono quel componente.
Dopo 100 prove tutte con lo stesso risultato ovvero perdita delle posizioni mi chiedevo:
ma non c’è un modo per leggere la posizione dell’oggetto e (metterla da parte) e poi riposizionare l’oggetto impostando le coordinate precedentemente salvate? è come se quello che fa NamedPosition io potessi salvarlo in un file esterno e reimpostarlo manualmente in un altro file che ne è sprovvisto.
Basterebbe almeno che Rhino riconoscesse ed ereditasse le proprietà per nome Layer.
Se non riusciamo a completare questa funzione il rischio (come già facciamo) è che i disegnatori riposizionino gli oggetti a mano e su prodotti complessi ci vuole un po…
Quella del baricentro non l’ho capita…

Il baricentro serve a legare un oggetto a una posizione. Tutto qui. E’ un riferimento arbitrario ma se è comune a tutti gli oggetti e riferito a un sistema che non cambia: X,Y,Z assolve al compito.
Dipende se la modifica cambia o meno l’id dell’oggetto. Se arriva un oggetto che quel documento di Rhino vede “nuovo” e quello che descrivi riferendoti alle modifiche avallerebbe la mia ipotesi, certamente ci arriva senza avere nessun riferimento alla sua namedposition.

Per essere più chiaro…spero…
fai un oggetto
gli applichi il NP
selezioni oggetto e vai nelle proprietà oggetto.
vedrai che ha un used ID e sotto ha attivo il plugin NP con dati di posizione salvati.
se a quell’oggeto cambi livello il NP gli rimane attaccato e lo puoi quindi riposizionare.

Se esplodi l’oggetto o comunque fai modifiche che comportano la modigica dell’ ID finisce il gioco.

Questo per come funziona il plugin di cui non ho seguito in particolare lo sviluppo e non saprei dirti molto di più.

Devo fare qualche prova, sinceramente all’id non avevo mai fatto caso, faccio sempre riferimento al nome layer che contiene il codice dell’oggetto che per il sistema è univoco.
Faccio qualche prova e ti dico.

Ammesso che il baricentro ritorni delle coordinate che considero una posizione precisa, come faccio poi a posizionare un oggetto dicendogli di prendere quelle coordinate?

e l’ID posso inserirlo a mano?

Scusate … voglio solo curiosare, l’argomento e’ interessante.

Non ho mai usato NP., ma imparo da Giuseppe che lavora con l’ID, anche se non so come calcola posizione e orientamento.

Se non sbaglio, GV vuole individuare l’oggetto dal nome del layer.
Usi un layer per ogni oggetto ?
Cioe’ per te un oggetto e’ in contenuto di un layer, giusto ?
Inoltre, parli di modificare l’oggetto per poi riposizionarlo.
Cosa vuoi usare come riferimento per riposizionare gli oggetti ?
Le modifiche a cui accenni non alterano questo riferimento ?

Ciao Emilio,
si usiamo un layer per ogni oggetto dandogli lo stesso nome del codice dell’oggetto stesso, questo permette al nostro applicativo di riconoscere che una scheda componente PLM abbia collegato il layer giusto.
Ora, siccome abbiamo sia assiemi, multiassiemi e componenti che deveono per forza di cosa essere sempre allineati, ci troviamo nelle condizioni in cui se il sistema deve creare una revisione di disegno di un componente che quindi deve essere modificato, automaticamente devo non solo modificare la scheda componente e aggiornarla con la nuova revisione ma aggiornare anche tutti gli assiemi e multiassiemi in cui il componente è contenuto creando di fatto delle revisioni automatiche anche nelle schede assieme.
Bene, il posizionamento con NP è molto compodo perchè lo pilotiamo da applicativo esterno dicendo al sistema di riposizionare gli oggetti e se le informazioni ci sono tutte questo funzione. Peccato però che se chi fa una modifica al layer componente per qualche motivo sostituisce lo stesso componente con uno magari prelevato da un repository diverso che non ha le informazioni NP, quando importo questo componente senza NP nell’assieme, Rhino mi perde tutti i riferimenti NP di tutti i componenti e questo ci obbliga a riposizionare i componenti a mano, considera che facciamo automodelli quindi parliamo almeno di 350-400 componenti…
Mi chiedevo se esiste un metodo che permetta di leggere le posizioni di un oggetto e permeta di inserire manualmente tali coordinate ad un nuovo oggetto riposizionandolo a mano, è strano che sia così complicato, naturalmente va bane qualunque altra soluzione purchè la precisione sia assoluta.
Il metodo del baricentro che dice giuseppe lo usiamo ma per consideare il baricentro effettivo dell’assieme! per usare tali informazioni come posizionamento, ripeto ammesso che queste coordinate siano riferibili ad una posizione domando, come posso inserire coordinate x, y, z per orientare un oggetto a mano?
ho provato anche il metodo Orient ma prevede dei click sul disegno, io voglio pilotare tutto da esterno in automatico.

L’esempio pratico ma penso sia chiaro è di un telaio di una macchina, devo modificare un braccetto evidentemente senza alterare le caratteristiche fondamentali (punti di attacco) ad esmpio solo perchè devo alleggerirlo, quindi estraggo il layer braccetto, lo modifico e lo rimetto al suo posto…senza NP come faccio ?

G.

Ma avete provato a gestire i progetti tramite blocchi?
Se il progetto complessivo contiene dei blocchi collegati (anche più volte richiamati) e tu apri il file del blocco per modificarlo, una volta salvato ti ritroverai con tutti i blocchi aggiornati senza doverti preoccupare di orientamenti o layer.
il programma esterno non farà altro che operare sul singolo file blocco e interrogherà il file assieme per vedere quanti pezzi sono stati inseriti.
E inoltre vuoi mettere di quanto alleggerisci il modello?

1 Mi Piace

Ciao ragazzi
Approfitto della vostra cortesia per cercare di ragionare sul problema.

GV, non e’ mai capitato che modificando un oggetto e riposizionandolo con NP, sia andato ‘fuori posto’ ?
Chiedo perche’ non riesco a immaginare come possa fare NP a ripristinare la posizione se un oggetto e’ stato genericamente modificato.
Cerco di spiegarmi: il braccetto del tuo esempio deve conservare i punti di attacco. Se io ad esempio lo modifico cambiandone la forma, come fa NP a capire che il suo riferimento sono i punti di attacco e non, ad esempio, la bounding box che dopo la modifica e’ diversa ?

Poi, l’oggetto compare una sola volta nel progetto, o ci sono diverse copie in posizioni diverse ?
Se ci sono diverse copie, allora chiaramente bisogna replicare la modifica nelle diverse ‘istanze’, per usare la terminologia dei blocchi, quindi serve necessariamente una logica per rimettere gli oggetti nelle varie posizioni, e l’uso dei blocchi sarebbe di aiuto.
Se invece l’oggetto e’ unico, perche’ viene spostato in fase di modifica ?
E’ solo una questione di CAD ?

Lucio, l’idea dei blocchi certamente serve in caso di copie multiple degli oggetti, ma non so quanto serva per ritrovare la posizione dopo la modifica.
Cioe’, se GV per modificare un oggetto lo sposta, anche aggiornando il blocco l’oggetto risulterebbe spostato e il problema di ripristinare la posizione rimane … o non ho capito un tubo ? :blush:

GV, da quel poco che forse ho capito, secondo me il problema e’ come definire i riferimenti per la posizione degli oggetti, e soprattutto come conservare questi riferimenti durante le modifiche.
Certamente si puo’ fare con l’aiuto dell’utilizzatore. Ma in modo totalmente automatico … non saprei.
A meno di basarsi su qualche convenzione, che so …ad esempio una superficie o una curva, individuabile magari dal nome, che obbligatoriamente non deve essere alterata dalle modifiche … o una cosa del genere.
Poi, come dici giustamente tu, spostare un ogggetto sapendo dove metterlo e come orientarlo non e’ certo un problema. Ad esempio un piccolo script dovrebbe essere sufficiente.

Scusate la confusione …Ciao !

x Lucio,
non ho mai provato a lavorare per blocchi ma farò un tentativo.

è chiaro che parliamo di riposizionamento di un oggetto che deve mantenere le caratteristiche di riferimento per rimanere compatibile e quindi reinnestarsi nell’assieme, per lo stesso motivo potrebbe essere un gruppo di elementi in cui le quote essenziali dell’intero assieme devono rimanere tali per reinnestarsi nel multiassieme e così via, è chiaro che se invece un componente varia totalmente evidentemente sto facendo delle modifiche che implicano la rivisitazione dell’intero prodotto e qui la manipolazione manuale ci sta.

x emilio
possono esserci diversi oggetti uguali, ad esempio il modello nella parte anteriore ha 4 parti uguali per i braccetti delle sospensioni, quindi quando ne modifico uno devo poi aggiornarli tutti.
Con NP sinceramente non ho mai avuto problemi ripeto però bisogna rimanere dentro il disegno con Rhinoceros ed essere sicuri che il disegno estratto dall’assieme contenga i dati salvati da NP.

Il problema essenzialmente nasce dal fatto che potei avere un disegnatore lontano a cui ovviamente non do tutto l’assieme ma solo uno o più componenti da modificare con le regole di sviluppo e potrei darglielo in iges o step per esempio perchè invece di Rhino ha Solidworks, quando me lo ritorna io devo reinserire le modifiche nel progetto intero.

Succede soprattutto e frequentemente ora che stiamo inserendo tecnologia a prototipazione che ci permette di lavorare metalli quindi rispetto all’alluminio, con il titanio riusciamo a tirare spessori più bassi quindi si riducono i costi e si riducono i pesi…

x emilio
assolutamente si, devo riuscire a definire i riferimenti per la posizione di un oggetto negli assi e avere queste informazioni in chiaro per essere registrate e usate per riposizionare gli oggetti nell’assieme

ma il plugin NP chi lo ha scritto? McNeel direttamente?
basterebbe che dessero la possibilità di salvare le informazioni a parte fuori dal disegno e poter reinserire tali.informazioni manualmente in qualunque altro oggetto, sarebbe molto utile, altri cad lo fanno tranquillamente non vedo perchè rhino non possa, forse perchè ostinatamente si continua a chiamarlo modellatore e non cad solo perchè non è parametrico ?

Appena ho un attimo studio i blocco.
x Lucio
se la domando di quanto allegerisco il modello è effettivamente una domanda, la risposta è parecchio, rispetto ad una lavorazione a fresa tradizionale posso produrre lo stesso componente in prototipazione magari usando il titanio e quindi tirando spessori più bassi mantenendo ke stesse caratteristiche meccaniche e magari lavorandolo di più negli alleggerimenti e quindi riuscendo a togliere grammi importanti per i baricentri.
L’inserimento della tecnolocia di prototipazione ci permette di portare degli estremismi nella progettazione ma per forza di cose dobbiamo mantenere tutti i dati-disegni progetto aggiornati, dal nostro applicativo possiamo lanciare una commessa dello stesso componente in materiali, lavorazioni e tecnologie diverse, è chiaro che le cose che posso fare in prototipazione non posso farle a fresa.

Da quello che ho capito, l’applicativo esterno fa la stessa procedura che fa Rhino con i blocchi collegati.
Loro inseriscono degli assiemi composti da più oggetti (assiemi e multiassiemi) arrivando a centinaia di componenti (e in un automodello credo ci siano parecchie parti uguali) e, nel caso si accorgano che un componente va modificato (per estetica o problemi tecnici) mantenendo però i riferimenti con il resto dell’assieme, lo cambiano e sfruttano le NP tramite il software esterno per aggiornare l’assieme; ma questo è quello che fa Rhino con i Blocchi… o no?
Quindi, ti costruisci i componenti in singoli file e poi costruisci l’assieme importandoli; devi modificare il braccetto della sospensione? doppio click sull’oggetto, si apre la nuova sessione di Rhino con il file da modificare, fai le modifiche senza spostare l’oggetto o modificare l’interasse dei punti di attacco del braccetto, chiudi e ti ritrovi il modello con i braccetti aggiornati e posizionati correttamente.
Dai da fare delle modifiche ad un progettista esterno? niente di più semplice… gli passi solo il file del componente con all’interno i vincoli da mantenere (tipo le forature) e, anche se lui lo dovesse elaborare con software diverso, una volta reimportato le nuove matematiche nel file blocco tutti i modelli linkati verrebbero aggiornati.
Poi forse non ho capito un tubo io… :wink:

Veramente per modello io intendo il file tridimensionale… il fatto di creare un assieme composto da blocchi, alleggerisce di molto il file finale.
Ad esempio, se hai un assieme dove viene inserito 4 volte lo stesso ingranaggio, inserendolo come blocco il file peserà circa un quarto rispetto ad un file dove l’ingranaggio è copiato per 4 volte.
Altra cosa molto interessante per te potrebbero essere le worksession, soprattutto se lavori in team sullo stesso progetto.
Ciao

Ok lucio, hai capito benissimo!
Devo assolutamente approfondire il concetto dei blocchi, in media i file multiassieme pesano circa 300Mb, se fossero più piccoli sarebbe molto meglio.
Ma devo assolutamente approfondire il discorso dei blocchi che non ho mai usato.

A mio parere dovete investire tempo per creare un vs plugin. L’sdk di rhino è completo e consente il controllo completo di ogni azione (evento) in rhino.

Dalle ultime prove con NamedPosition sembra che in Rhino5 funzioni meglio ed effettivamente faccia quello che ci serve anche se importiamo componenti senza posizione in un assieme che invece li ha.
Per ora va bene così