Bonjour,
désolé, je sais que ma question va vous sembler désespérément désespérante, mais voilà, je ne comprends rien aux scripts.
je fais du rendu d'archi, et je suis amené à fréquement construire de menuiseries autour ds vitrages de mes modèles.
je voudrais pouvoir, à partir d'un polygone simple d'une face rectangulaire, construire autour de ce panneau une menuiserie un peu détaillée, en faisant diverses extrusions internes, extrusions, etc, pour aboutir à un profil correct.
(éventuellement avoir des boites de dialogue pour entrer des valeurs numériques pour pouvoir varier les tailles des extrusions ..)
j'aimerais pouvoir enregistrer un script qui fait que je n'aurais qu'à cliquer sur une icone pour traiter toutes les surfaces vitrées de mon bâtiment, et ne ma me retaper toute la suite d'opérations à chaque fois.
Dans photoshop, il est facile de créer un script à partir d'une série d'actions que l'on enregistre, et rejoue ensuite sur d'autres images..
n'est il pas possible de faire ça dans c4d ?
merci à ceux qui prendront la peine de me répondre !
Salut et bienvenue,
Oui c'est possible, il faut juste faire un peu de copier/coller. J'avais commencer à faire une petite vidéo sans parole pour mon site qui montre un peu le principe :
Sinon il y a aussi Fluffy qui explique très bien la chose : http://fluffy4d.com/?p=79
merci !
c'est très simple, et pourtant ça ne marche pas chez moi,
peut être que les scripts ne prennent pas en compte les extrusions ?
pour info, voici ce que j'ai fait :
import c4d
from c4d import documents, plugins
#Welcome to the world of Python
def main():
c4d.CallCommand(12187) # Polygones
c4d.CallCommand(13323) # Tout sélectionner
c4d.CallCommand(14046) # Scission
c4d.CallCommand(1011183, 1011183) # Extrusion
tool()[c4d.MDATA_EXTRUDE_OFFSET]=2
c4d.CallCommand(12109) # Supprimer
c4d.CallCommand(12112) # Tout sélectionner
c4d.CallCommand(14041) # Inverser les normales
c4d.CallCommand(450000004, 450000004) # Extrusion interne
tool()[c4d.MDATA_EXTRUDEINNER_OFFSET]=-2
tool()[c4d.MDATA_EXTRUDEINNER_PRESERVEGROUPS]=True
c4d.CallCommand(12479) # Intervertir
c4d.CallCommand(12109) # Supprimer
c4d.CallCommand(12112) # Tout sélectionner
c4d.CallCommand(1011183, 1011183) # Extrusion
tool()[c4d.MDATA_EXTRUDE_CREATECAPS]=True
tool()[c4d.MDATA_EXTRUDE_PRESERVEGROUPS]=True
c4d.CallCommand(450000004, 450000004) # Extrusion interne
tool()[c4d.MDATA_EXTRUDEINNER_OFFSET]=1
c4d.CallCommand(1011183, 1011183) # Extrusion
if __name__=='__main__':
main()
c4d.EventAdd()
Je crois pas que ça soit possible non, surtout si tu changes d'outils en court de route.
Après c'est pas vraiment extrêmement plus compliqué de coder le truc """""réellement"""""
Tu peux y passer du temps mais si c'est des manipulations que tu répètes beaucoup ça sera vite rentable.
Code:import c4d from c4d import documents, plugins, utils #Welcome to the world of Python def main(): c4d.CallCommand(12187) # Polygones c4d.CallCommand(13323) # Tout sélectionner c4d.CallCommand(14046) # Scission c4d.CallCommand(1011183, 1011183) # Extrusion settings = c4d.BaseContainer() # Settings settings[c4d.MDATA_EXTRUDE_OFFSET] = 2.0 # Length of the extrusion utils.SendModelingCommand(command = c4d.ID_MODELING_EXTRUDE_TOOL, list = [op], mode = c4d.MODELINGCOMMANDMODE_POLYGONSELECTION, bc = settings, doc = doc) c4d.CallCommand(12109) # Supprimer c4d.CallCommand(12112) # Tout sélectionner c4d.CallCommand(14041) # Inverser les normales c4d.CallCommand(450000004, 450000004) # Extrusion interne settings = c4d.BaseContainer() settings[c4d.MDATA_EXTRUDEINNER_OFFSET]=-2 settings[c4d.MDATA_EXTRUDEINNER_PRESERVEGROUPS]=True utils.SendModelingCommand(command = c4d.ID_MODELING_EXTRUDE_INNER_TOOL, list = [op], mode = c4d.MODELINGCOMMANDMODE_POLYGONSELECTION, bc = settings, doc = doc) c4d.CallCommand(12479) # Intervertir c4d.CallCommand(12109) # Supprimer c4d.CallCommand(12112) # Tout sélectionner c4d.CallCommand(1011183, 1011183) # Extrusion settings = c4d.BaseContainer() settings[c4d.MDATA_EXTRUDE_CREATECAPS]=True settings[c4d.MDATA_EXTRUDE_PRESERVEGROUPS]=True utils.SendModelingCommand(command = c4d.ID_MODELING_EXTRUDE_TOOL, list = [op], mode = c4d.MODELINGCOMMANDMODE_POLYGONSELECTION, bc = settings, doc = doc) #c4d.CallCommand(450000004, 450000004) # Extrusion interne settings = c4d.BaseContainer() settings[c4d.MDATA_EXTRUDEINNER_OFFSET]=1 utils.SendModelingCommand(command = c4d.ID_MODELING_EXTRUDE_INNER_TOOL, list = [op], mode = c4d.MODELINGCOMMANDMODE_POLYGONSELECTION, bc = settings, doc = doc) c4d.CallCommand(1011183, 1011183) # Extrusion if __name__=='__main__': main() c4d.EventAdd()
si tu veux avoir un peu plus d'information il y a la documentation du SDK python. Il y a aussi la liste des commandes que tu peux utiliser comme ID_MODELING_EXTRUDE_INNER_TOOL pour l'extrusion interne. Il faut définir un basecontainer et y renseigner les paramètres (offset etc que tu récupères via la fenêtre de log de script ou en glissant déposant les champs dans la fenêtre de code)
https://developers.maxon.net/docs/Ci...odelingCommand
tout ce bloc c'est pour une commande uniquement
Code:settings = c4d.BaseContainer() # Settings settings[c4d.MDATA_EXTRUDE_OFFSET] = 20.0 # Length of the extrusion utils.SendModelingCommand(command = c4d.ID_MODELING_EXTRUDE_TOOL, list = [op], mode = c4d.MODELINGCOMMANDMODE_POLYGONSELECTION, bc = settings, doc = doc)
Dernière modification par valkaari ; 27/01/2016 à 00h10.
mais c'est magnifique !
tu l'as fait !
merci valkaari.
il y a juste un truc que je ne sais pas corriger,
c'est le "preserver les groupes" sur les extrusions internes ( et les extrusions tout court)
?
J'ai pas testé mais normalement ça devrais marcher
Si tu regarles dans le lien que valkaari t'as donnée tu as ceci :Code:settings = c4d.BaseContainer() # Settings settings[c4d.MDATA_EXTRUDE_OFFSET] = 20.0 # Length of the extrusion settings[c4d.MDATA_EXTRUDE_PRESERVEGROUPS] = true #active le preserve group utils.SendModelingCommand(command = c4d.ID_MODELING_EXTRUDE_TOOL, list = [op], mode = c4d.MODELINGCOMMANDMODE_POLYGONSELECTION, bc = settings, doc = doc)
ID_MODELING_EXTRUDE_TOOL Extrude tool. See toolextrude.h.
Donc on regarde https://developers.maxon.net/docs/Ci...xtrude_8h.html
et après vu que c'est une checkbox ça correspond à un boolean (true ou false, true pour coché, false pour pas coché)
SDK Specialist
MAXON Computer GmbH
Attention en python c'est True et pas true !
Alors je le reformule pour voir si c'est plus clair pour toi.
Si tu veux rajouter une option, tu repères la partie settings = c4d.BaseContainer()
puis tu vas à la ligne et avec les tabulations tu te mets juste en dessous.
tu tapes settings puis tu glisses dépose le champs que tu désires depuis la fenêtre d'attributs vers la fenêtre de code.
ça te rajoutera [c4d.MDATA_EXTRUDE_PRESERVEGROUPS]
tu aura donc settings[c4d.MDATA_EXTRUDE_PRESERVEGROUPS]
il te reste à ajouter = True
comme le dit graphos c'est une case à cocher donc un bool donc True ou False
au final
settings = c4d.BaseContainer()
settings[c4d.MDATA_EXTRUDE_PRESERVEGROUPS] = True
Alors je dis pas que ça marchera avec toutes les commandes c4d mais tu devrais déjà réussir à faire pas mal de manip avec tout ça.
Pour un début c'est pas si compliqué et les possibilités sont grandes. Faut pas avoir peur ça mort pas le code.
(enfin sauvegarde quand même ton travail avant de lancer un script T_T)
oui, merci, je commence à capter .. un peu
par contre il y a un probleme, ça marche pas sur la première extrusion interne :
settings = c4d.BaseContainer()
settings[c4d.MDATA_EXTRUDEINNER_OFFSET]=-2
settings[c4d.MDATA_EXTRUDEINNER_PRESERVEGROUPS] = True #active le preserve group
utils.SendModelingCommand(command = c4d.ID_MODELING_EXTRUDE_INNER_TOOL,
list = [op],
mode = c4d.MODELINGCOMMANDMODE_POLYGONSELECTION,
bc = settings,
doc = doc)
Sinon ici j'ai pas de soucis. Tu devrais ouvrir la console pour voir s'il y a pas un message d'erreur. Via le menu script console ou shift+f10Code:Dans l'interface web du forum, quand tu rédiges ta réponse tu as un bouton # il permet de mettre des balises "code" et permet de conserver les tabulations etc. (on peut faire un copier coller directement vers c4d comme ça)
T'as peut être un problème d'indentation.