PDA

Voir la version complète : Decouper un objet à la machette



Floc
08/12/2014, 21h28
Bonsoir à tous
Est ce que vous sauriez si il existe un truc genre l'outil machette pour découper des objet en morceaux.

Je m'explique est ce qu''il y aurai un moyen (astuce, plug-in ou même peut être une fonction intégrée) pour découper en une opération un objet en 2 éléments solides. Le but étant de découper des objets en morceau, un peu comme on le ferai avec Thrausi mais pas de manière aléatoire. Pour le moment je le fait à coup de Boolean ou de Knife + split + close Hole, mais j'ai vraiment beaucoup de découpe à faire et ça devient assez fastidieux.
Bon en fait très fastidieux :icon_mrgreen:.

Itsmil
08/12/2014, 22h00
Si j'ai bien compris ta demande, avec un booléen c'est faisable. Pourquoi ne pas utiliser un booléen avec comme element B (l’extracteur de matière) un cube très peu épais, un peu comme une feuille de papier, que tu mets là où tu veux ta découpe, puis une fois édité, tu fais tout simplement un maillage>conversion>groupe de polygones pour avoir des elements séparé

Floc
08/12/2014, 22h37
Oui mais ca grosso modo c'est ce que je fais. Toutefois avec ta méthode je gagne quand même une manip.
Mais il faut quand même
- dupliquer le boolean avec son objet "Couteau" histoire de pas recommencer à chaque fois.
- editer le boolean
- faire la conversion>groupe de polygones
- sortir les objets de la hierarchie crée par la conversion et effacer l'objet vide.
Ca multiplié pas 300 ou 400 fois, même avec un raccourci assigné à chaque opération, je serai pas contre un one-shot.

Floc
09/12/2014, 00h54
Bon du coup d'avoir listé la suite de manips j'ai tenté un script et ça marche à peu près.
Il faut sélectionner les deux objets (objet a couper et le "couteau") et executer le script.
Il faut aussi que le "couteau" soit au dessus dans l'object Manager, et il est probable que ce ne marche pas dans une hiereachie.
Bon vu mon niveau en python il y a des trucs pas trop clean, et ça reste à améliorer, mais j'ai mon one shot. :icon_mrgreen:
Entre autre j'aurais bien aimé utiliser SendModelingCommand pour rendre le boolean éditable afin de récupérer l'objet, mais j'ai pas réussi.

Ceci dit si quelqu'un connait un vrai outil qui fait ça proprement, je suis toujours preneur.


import c4d
from c4d import gui

def main():
c4d.CallCommand(13957) # Clear Console

theDoc = c4d.documents.GetActiveDocument()
selected = theDoc.GetActiveObjects(0)
couteau = selected[0].GetClone()
doc.InsertObject(couteau)

theBool = c4d.BaseObject(c4d.Oboole)
doc.InsertObject(theBool)
c4d.EventAdd()
print theBool
theBool[c4d.BOOLEOBJECT_SINGLE_OBJECT]=True

if len(selected) > 0:
for ob in selected:
print ob.GetName()
ob.InsertUnder(theBool)


theDoc.SetSelection(theBool, mode=c4d.SELECTION_NEW)
c4d.CallCommand(12236) # Make Editable
selected = theDoc.GetActiveObjects(0)
print selected[0]

c4d.CallCommand(17891) # Polygon Groups to Objects
c4d.CallCommand(1019951) # Delete Without Children
c4d.EventAdd()

if __name__=='__main__':
main()

Itsmil
09/12/2014, 09h24
Tu peux très bien avoir plusieurs objets découpeur de plusieurs objets A dans un même booléen.

Dans l'idée j'ai un mur fait avec un cube plat et a côté j'ai un cube découpeur dans un mograph, une fois le tout édité, j'ai tout simplement un mur de 500 brique en peu de manips.

Floc
09/12/2014, 13h57
Salut itsmil
J'ai bien compris la méthode et d'ailleurs je l'utilise, mais dons mon cas ce n'est pas idéal ou suffisant.
Ce dont j'ai besoin s'apparente plus à une sorte de "sculpt". Exactement ce que fait thrausi mais de façon controllée. Il s'agit par exemple de faire (entre autre)la taille d'un diamant (le tout animé bien sur). La découpe ce fait dans de multiple plans et en plus est difficilement prévisible. J'ai besoin de pouvoir "improviser" un peu et de découper à la volée. Je ne peux pas faire ça en deux ou trois opération.
D'ailleurs j'ai commencé a me servir du script et je peux te dire que je découpe, je debite, je tranche, un vrai serial killer. :icon_mrgreen:

valkaari
12/12/2014, 03h52
Il faut sélectionner les deux objets (objet a couper et le "couteau") et executer le script.
Il faut aussi que le "couteau" soit au dessus dans l'object Manager, et il est probable que ce ne marche pas dans une hiereachie.


pour la fonction GetActiveObjects tu peux utiliser le flag suivant.



GETACTIVEOBJECTFLAGS_SELECTIONORDER
The selection array is sorted in the selection order, e.g. the first selected object is the first element in the array.




Du coup tu pourrais sélectionner ton objet à découper en premier puis les "couteaux". Au moins tu gagnerais en étape.

Pour ce qui est d'utiliser les callcommand... si elles fonctionnent et que t'as pas besoin de changer certaines options ... on s'en fiche.


Sinon essayes (ce que je fais presque jamais) d'ajouter des groupe d'undo. Puis si t'as un soucis de code, vas dans la partie programmation du forum. Il m'arrive de passer sur le forum sans parcourir tous les sous forums. Par contre programmation, j'y vais souvent si y a un message.

geantvert
12/12/2014, 16h08
Puisque Valkaari ne fait pas sa propre promo, je m'en viens la faire.
Avec xplode en mode matrice il est possible de découper selon la grille de la matrice.
Ce qui forcément réduit pas mal le nombre de manip aussi.
Xplode réagit bizarrement parfois avec des objets complexes mais si c'est juste quelques objets à reboucher c'est toujours un gain de temps :)

Edit: la marche à suivre quand même, créer un objet matrice, régler sa grille comme on le souhaite, mettre l'objet matrice en mode TP, ouvrir les paramètres TP (simuler, TP, paramètres TP), glisser le xplodeGroup dans le champ groupe TP de l'objet matrice. Les particules générées par xplode suivront la grille de l'objet matrice. Y'a plus qu'à sélectionner l'objet à découper et lancer la découpe :)

re: Veiller à agrandir un chouille la grille matrice afin que les particules aux extrémités ne coïncident pas avec un début de poly.
En bref, bien inscrire l'objet à l’intérieur de la grille

Floc
12/12/2014, 23h56
Puisque Valkaari ne fait pas sa propre promo, je m'en viens la faire.
Et tu as bien raison car cette fonctionnalité d'xplode, que tu viens de me faire découvrir est vraiment intéressante, ca te fait des découpages régulier nickel en quelques clics.



Du coup tu pourrais sélectionner ton objet à découper en premier puis les "couteaux". Au moins tu gagnerais en étape.
Y'a pas de petits profits, une étape de moins c'est toujours ça de pris. :P
Alors la version corrigée et un peu plus propre, pour ceux que ça intéresse.
Merci du coup de pouce



import c4d
from c4d import gui


def main():
c4d.CallCommand(13957) # Clear Console

theDoc = c4d.documents.GetActiveDocument()
selected = theDoc.GetActiveObjects(c4d.GETACTIVEOBJECTFLAGS_S ELECTIONORDER)
if len(selected) ==2:
couteau = selected[1].GetClone()
objName = selected[0].GetName()
doc.InsertObject(couteau)

theBool = c4d.BaseObject(c4d.Oboole)
doc.InsertObject(theBool)
c4d.EventAdd()
theBool[c4d.BOOLEOBJECT_SINGLE_OBJECT]=True

selected.reverse()
for ob in selected:

ob.InsertUnder(theBool)

theDoc.SetSelection(theBool, mode=c4d.SELECTION_NEW)
c4d.CallCommand(12236) # Make Editable
selected = theDoc.GetActiveObjects(0)
selected[0].SetName(objName)

c4d.CallCommand(17891) # Polygon Groups to Objects
c4d.CallCommand(1019951) # Delete Without Children
c4d.EventAdd()

else:
gui.MessageDialog('Selectionner 2 objets')


if __name__=='__main__':
main()




Puis si t'as un soucis de code, vas dans la partie programmation du forum
En fait j'etait pas parti pour écrire un script, mais j'ai pas trouvé l'outil et finalement ça paraissait à ma portée.
Mais maintenant j'aimerai bien que la découpe respecte la hiérarchie, et comme j'ai l'impression que ça va se compliquer, il y a effectivement des chances que j'aille toquer à la porte du forum programmation :sweatdrop: