automatizzare operazioni [Coffee]
Moderatori: Arkimed, natas, visualtricks, cappellaiomatto
-
- Advertising
automatizzare operazioni [Coffee]
è un po' che non scrivo sul forum [miss u all!!! ] purtroppo devo disturbarvi con una richiesta.
recentemente mi sono trovato a dover lavorare con dei modelli importati da un modellatore NURBS dal quale non riesco ad estrarre dei modelli poligonali facilmete lavorabili. ora il problema è che dovrei automatizzare per qualche centinaio di pezzi -ad ogni esportazione- la procedura che vi ho esemplificato nelle immagini [Seleziona Figli -> Connetti+Cancella] visto che farla a mano è laboriosissimo!
qualche tempo fa mi ero trovato tra le mani uno script che faceva da equivalente dei comandi di Azione di Photoshop, cioè registrava le azioni dell'utente e le ripeteva, purtroppo non riesco in nessun modo nè a ritrovarlo, nè a riscriverlo.
se qualcuno ha un po' più di memoria o riesce a darmi qualche dritta è il benvenuto!
[adesso sono sulla R13, ma ricordo che lo avevo usato sulla R11, quindi non dovrebbe essere pyton]
grazie in anticipo a tutti!!!
ps. se serve qualche altro chiarimento, non avete che da chiedere...
Ros
- visualtricks
- Moderatore
- Messaggi: 3562
- Iscritto il: gio set 23, 2004 5:13 pm
- Località: Pistoia
Re: automatizzare operazioni [Coffee]
puoi crearti uno script praticamente senza scrivere una riga di codice, fai così:
• apri lo Script Manager e dal menù File scegli New: ti crea uno script vuoto che di default ha un solo comando:
Codice: Seleziona tutto
main(doc,op)
{
TextDialog("Hello World!", GEMB_OK);
}
• dal menù Window scegli Customization -> Customize commands (ti si apre la finestra con la lista di tutti i comandi possibili)
• cerca il comando Select Children e trascinalo nello script manager, vedrai che ti crea automaticamente il codice x quel comando
• cerca Connect Objects + delete e fai la stessa cosa, mettendolo dopo il primo comando
• ti dovresti ritrovare con questo codice:
Codice: Seleziona tutto
main(doc,op)
{
CallCommand(100004768);
CallCommand(16768);
}
• trascina l'icona dello script (dallo scritp manager) nell'interfaccia, così ce l'hai a portata di mano. Da qui in poi basta selezionare l'oggetto padre e cliccare l'icona dello script. Non è proprio come farlo automaticamente su tutti gli oggetti ma dovrebbe velocizzare un po' le cose :)
Re: automatizzare operazioni [Coffee]
ci ero arrivato anch'io proprio adesso!
[ma è davvero ottimo avere una conferma da parte tua]
adesso stavo provando a vedere se riesco ad infilarlo in un nodo COFFEE a fianco ad un nodo Hierarchy di Xpresso così è capace che me li ripete su tutti i figli e risolvo il problema alla radice.
se hai altri suggermienti sull'argomento sono tutt'orecchi
grazie ancora !
Ros
- visualtricks
- Moderatore
- Messaggi: 3562
- Iscritto il: gio set 23, 2004 5:13 pm
- Località: Pistoia
Re: automatizzare operazioni [Coffee]
È sicuramente fattibile all'interno di uno script ma dovrei studiarci un po' :)
- visualtricks
- Moderatore
- Messaggi: 3562
- Iscritto il: gio set 23, 2004 5:13 pm
- Località: Pistoia
Re: automatizzare operazioni [Coffee]
Codice: Seleziona tutto
main(doc, op)
{
var result = TextDialog("There is no coming back. Are You Sure ?", DLG_OKCANCEL);
if (result == DLG_R_OK) {
var obj = doc->GetFirstObject();
while(obj)
{
doc->SetActiveObject(obj);
var next = obj->GetNext();
CallCommand(100004768); // Select Children
CallCommand(12236); //make editable
//obj->DelBit(BIT_AOBJ); // Uncomment if you want to keep the Nulls
CallCommand(16768); // connect and delete
obj = next;
}
}
}
post su CGTAlk: http://forums.cgsociety.org/showthread. ... &t=1044069
- visualtricks
- Moderatore
- Messaggi: 3562
- Iscritto il: gio set 23, 2004 5:13 pm
- Località: Pistoia
Re: automatizzare operazioni [Coffee]
Tra l'altro sarebbe bene inserire dopo il primo CallCommand anche questo:
Codice: Seleziona tutto
CallCommand(12236); //make editable
Re: automatizzare operazioni [Coffee]
allora, aggiungo un po' di informazioni prima di continuare, così, nel caso, il quadro è più chiaro.
lo script di cui sopra serve a ripulire in fretta degli assemblati meccanici esportati tramite VRML2.0 da ThinkDesign.
l'esportazione genera:
- quattro camere e due luci infinite [da buttare];
- un oggetto nullo "Model";
- i figli di "Model" che, a loro volta, raggruppano per mesh separate le features che definiscono il pezzo con i relativi Tags associati.
ora, al netto di tutto, il file di partenza è omologo a quello di esempio [esempio_001.c4d]
ad adesso il codice arriva a qui:
- pulisce gli oggetti inutili;
- rende ogni oggetto una mesh unica e ottimizza;
- cancella tutti i tag.
Codice: Seleziona tutto
main(doc,op)
{
var obj = doc->GetFirstObject();
var i;
for (i = 1; i <= 6; i++)
{
//TextDialog("Hello World!", GEMB_OK);
//doc->SetActiveObject(obj);
var next = obj->GetNext();
obj->Remove();
//CallCommand(100004787); // Delete
obj = next;
}
doc->SetActiveObject(obj);
CallCommand(1019951); // Delete Without Children
var obj = doc->GetFirstObject();
while(obj)
{
doc->SetActiveObject(obj);
var next = obj->GetNext();
CallCommand(100004768); // Select Children
CallCommand(12236); //make editable
//obj->DelBit(BIT_AOBJ); // Uncomment if you want to keep the Nulls
CallCommand(16768); // connect and delete
CallCommand(14039); // optimize
obj = next;
}
//---------------------------------------------------
obj = doc->GetFirstObject();
while(obj)
{
var next = obj->GetNext();
//TextDialog("while sugli OBJ", GEMB_OK);
var tag_d = obj->GetFirstTag();
while(tag_d)
{
//TextDialog("while sui TAG", GEMB_OK);
tag_d->Remove();
tag_d = obj->GetFirstTag();
}
obj = next;
}
}
adesso sto leggendo l'SDK ma non sono riuscito a tirare fuori nulla di buono usando
Codice: Seleziona tutto
obj = doc->GetFirstObject();
while(obj)
{
var next = obj->GetNext();
//TextDialog("while sugli OBJ", GEMB_OK);
var tag_d = obj->GetFirstTag();
while(tag_d)
{
//TextDialog("while sui TAG", GEMB_OK);
tag_d->Remove();
tag_d = obj->GetFirstTag();
}
obj = next;
}
- Allegati
-
- esempio_001.rar
- (78.78 KiB) Scaricato 56 volte
Ros
- visualtricks
- Moderatore
- Messaggi: 3562
- Iscritto il: gio set 23, 2004 5:13 pm
- Località: Pistoia
Re: automatizzare operazioni [Coffee]
per assegnare un nuovo tag ad un oggetto devi fare due passaggi:
• assegnare il tag ad una variabile
• inserire il tag sull'oggetto
tra le due operazioni devi impostare gli eventuali valori del tag. Tutto questo devi farlo sull'oggetto di volta in volta attivo nel loop. Sul momento non ho modo di provare lo script ma a naso il loop dovrebbe essere qualcosa del genere
Codice: Seleziona tutto
obj->SetBit(BIT_ACTIVE); //seleziona l'oggetto
var newtag = AllocTag(Tphong); //mette in memoria un nuovo tag di tipo phong
newtag#PHONGTAG_PHONG_ANGLE = 80; //imposta 80 come angolo
obj->InsertTag(newtag); //assegna il tag all'oggetto selezionato
Re: automatizzare operazioni [Coffee]
dopo parecchi tentativi corredati da numerosi [nonché indicibili] impropèri, dovremmo esserci.
ve lo lascio qui. magari, se qualcuno utilizza dei modellatori meccanici [Inventor, SolidWorks, etc... ] e vuole fare un test di importazione tramite VRML2.0 , possiamo sapere che funziona per tutti gli altri sw e non solo per ThinkDesign.
funzionamento:
- aprite il file *.WRL e lanciate lo script
lo script elimina gli oggetti scenici [camere, luci], unisce le mesh e ottimizza i punti duplicati, cancella i tag Texture duplicati e relativi tag Selection e tiene solo il tag Teture base, aggiunge un tag Phong con angolo limite 80°, ri-raggruppa il tutto in un oggetto nullo.
segnalatemi degli errori se volete... nei limiti del possibile provo a sistemarlo.
ps. grazie mille Visualtricks , se non fosse stato per il tuo aiuto non sarei arrivato da nessuna parte!!
- Allegati
-
- esempio esportazione.rar
- un file wrml2.0 che ho usato per test.
- (72.59 KiB) Scaricato 45 volte
-
- select-delete_v2.0.rar
- il file *.CSC dello script
- (1.25 KiB) Scaricato 46 volte
Ros
-
- Advertising
FOLLOW US