Hello à tous !
J'ai une question pour un projet d'étude
Pour commencer, sur rhinoceros, j'ai modélisé tout mon terrain à l'aide des courbes de niveau, jusque là pas de soucis.
Plus tard j'ai pu recupérer tous les bâtiments au format rhino (il s'agit d'un arrondissement de Paris).
Là est le soucis, ils ont tous la base au même niveau, et je dois les poser sur mon terrain.....
Avec rhino, je n'ai pas trouvé la solution, j'ai donc tout exporter sur C4D pour tenter de trouver un système, mais pour le moment, je sèche
j'ai tenté avec les propriétés de simulation, mais je n'ai pas trouvé la bonne combinaison
Si quelqu'un a une solution miracle pour moi, je suis très preneur
Salut,
J'ai un vieux script python qui fait un truc du genre. Il faut sélectionner le neutre contenant les bâtiments, le terrain doit être juste en dessous dans la hiérarchie et doit être un objet polygonal. Attention, c'est simplement l'axe de l'objet bâtiment qui est mis sur le terrain, le script ne tient pas compte de toute la géométrie (pour la procédure d'installation c'est ici).
Code PHP:
# -*- coding: utf-8 -*-
import c4d
#Mettre le neutre contenant les objet juste au dessus du terrain dans la hierarchie
def plaquer_sur_poly(groupe,terrain):
objs = groupe.GetChildren()
if not objs : return None
if not terrain.GetType()==c4d.Opolygon:
c4d.gui.MessageDialog('Le terrain doit être un objet polygonal')
return False
rc = c4d.utils.GeRayCollider()
rc.Init(terrain)
bbox = terrain.GetRad()
mg_t = terrain.GetMg()
inv_m = ~mg_t
centre = terrain.GetMp()*mg_t
y_max = centre.y + bbox.y + 1000
lg = bbox.y * 2 + 2000
for o in objs :
mg =o.GetMg()
i_m= ~mg
pos = mg.off*inv_m
pos.y = y_max
if rc.Intersect(pos, c4d.Vector(0,-1,0),lg):
x= rc.GetNearestIntersection()
pos.y-=x['distance']
mg.off = pos*mg_t
doc.AddUndo(c4d.UNDOTYPE_CHANGE,o)
o.SetMg(mg)
return True
def main():
doc.StartUndo()
if not op:
c4d.gui.MessageDialog("Vous devez séléctionner le groupe d'objets à plaquer")
return
terrain = op.GetNext()
if not terrain:
c4d.gui.MessageDialog("Le terrain doit être placé juste après le groupe d'objets dans la hiérarchie")
return
if not terrain.CheckType(c4d.Opolygon):
c4d.gui.MessageDialog("Le terrain doit être un objet polygonal")
return
plaquer_sur_poly(op,terrain)
doc.EndUndo()
c4d.EventAdd()
if __name__=='__main__':
main()
Dernière modification par oli_d ; 19/07/2015 à 07h36.
Merci pour ta réponse, malheureusement, je n'arrive pas à faire tourner le script :/
puis je t'envoyer le fichier en privé pour que tu me dises ce que j'ai raté ?
Fais péter ...
edit : je viens de voir que tu es en r11, donc pas de python .. (envoie ton fichier j'essaie de te les poser sur ton terrain)
Je me permets de mettre ma réponse à R-tel en mp, cela servira peut-être à quelqu'un:
Cela ne marchait pas parce que le script place l'axe de l'objet sur le sol. Etant donné que tes bâtiments étaient tous dans un seul objet, j'ai lancé la commande maillage/conversion/Groupes de polygones en objet pour avoir un objet par groupe de polygone connecté. Ensuite j'ai mis les axes en bas de chaque objet via la commande Maillage/Centre des axes/Centre des axes en mettant le curseur Y à -100%. Et là cela fonctionne, sauf sur les bords où il y a des axes qui ne sont pas au dessus du terrain, il faudrait soit bouger les axes, soit les bâtiments à la main.
Il y a encore une pétouille dans mon script, il faut que le terrain soit avec l'axe à zéro pour que cela fonctionne ... Je corrige ça dès que j'ai un moment
Merci c'est génial
Là, je dois refaire la manœuvre, mais lors de la conversion en groupe de polygone, mon PC prend un temps fou, en fait, je n'ai pas pu le faire, j'ai l’impression que ça ne s’arrête jamais. C'est normal que ça prenne un max de temps ou j'ai un bug sur mon PC ?
[Edit ; c'était bien un bug de mon coté
Dernière modification par R-Tel ; 21/07/2015 à 15h34.
Tout ce que j'écris est à prendre au 15e degré. Car comme dit le proverbe chinois : Quand le dragon d'or, le ragondin ; voilà qui devrait faire taire les critiques et me mettre à l'abri d'attaques frontales.
Super, j'ai testé par curiosité, ça marche aussi !
Par contre nouveau soucis, peut on simplifier un objet simple qui contient trop de polygone ?
Je pense que mes batis sont issus d'un fichier .obj, résultat, un cube a pas mal de facettes triangulaires.... Même en convertissant en quadrangles, j'ai quelque chose de lourd, pareil en optimisant...
Tu as testé le déformateur Réduction de polygones ?
Ça vaut ce que ça vaut mais des fois, ça fait la farce...
Oui je suis en train de tester, ça marche pas trop mal, mais si il existe un plug in plus efficace, je suis pas contre
[edit] au final j'ai utilisé le réduction de polygone sur tous mes bâtis que j'avais connecté avant opération. Ensuite, à partir de là, j'ai convert en objet et converti en quadrangle. Le résultat était top.
Enregistrement en obj, dans rhino fonction reduce mesh et la quasi nickel, le fichier est passé de 3go à 640 mo
Dernière modification par R-Tel ; 23/07/2015 à 18h59.