Centre d'un objet 3D

Centre d'un objet 3D

Anonymous
Non applicable
7 107 Visites
23 Réponses
Message 1 sur 24

Centre d'un objet 3D

Anonymous
Non applicable

Bonjour,

 

j'ai télécharger un objet 3D composé de plusieurs éléments.

J'ai besoin de placer le centre de mon objet sur le point d'origine du projet.

 

Comment faire pour obtenir le centre de mon objet 3D?

0 J'aime
7 108 Visites
23 Réponses
Replies (23)
Message 2 sur 24

alex.ultra
Advisor
Advisor

Tu veux trouver le centre de manière précise ou le créer?

0 J'aime
Message 3 sur 24

Anonymous
Non applicable

Il me faut le centre de façon précise, le même point qui apparaît ponctuellement quand je me déplace en. orbite.

0 J'aime
Message 4 sur 24

alex.ultra
Advisor
Advisor

Si ton objet à une forme simple, pour placer un point au centre il te faut créer un "Offset Plan" dans "Construct" (admettons horizontalement), tu le place au milieu en le déplaçant verticalement, puis en vue de dessus tu fais "create sketch >Point" que tu place au centre avec la possibilité de mettre une cotation.

Après si c'est une forme complexe, je sais pas si il y a une fonction dans Fusion qui trouve le centre de gravité de manière automatique.

0 J'aime
Message 5 sur 24

JeromeBriot
Mentor
Mentor

Bonjour,

 

La vidéo suivante répond-elle à ta question ?

 

=> https://autode.sk/2W5M9Kt

 

 

 

0 J'aime
Message 6 sur 24

Anonymous
Non applicable

Salut Jérôme,

 

Ça ressemble exactement à ce que je souhaite faire mais une fois réalisé, mon point ne semble pas se situer au centre de mon objet.

Sur la capture d'écran on voit le point crée qui n'est pas à l'endroit du point vert (point qui apparaît lors d'un déplacement en orbite) qui lui semble être le point que je cherche.

Capture d’écran 2019-04-25 à 16.20.09 (2).pngCapture d’écran 2019-04-25 à 16.24.31 (2).png

0 J'aime
Message 7 sur 24

JeromeBriot
Mentor
Mentor

Quel est l'intérêt de ce que tu cherches à faire ?

 

Sinon, essaie ce script Python :

 

import adsk.core, traceback

def run(context):
    ui = None
    try:
        app = adsk.core.Application.get()
        ui  = app.userInterface

        design = adsk.fusion.Design.cast(app.activeProduct)
        root = design.rootComponent
        componentNameMap = {}
        componentNameMap[root.name] = root

        for occ in root.allOccurrences:
            subComp = occ.component
            componentNameMap[subComp.name] = subComp

        allbodies = adsk.core.ObjectCollection.create()
        for comp in list(componentNameMap.values()):
            for body in comp.bRepBodies:
                allbodies.add(body)

        features = root.features

        camera = app.activeViewport.camera

        vector3 = adsk.core.Vector3D.create(-camera.target.x, -camera.target.y, -camera.target.z)

        if abs(vector3.x) < 1E-6 and abs(vector3.y) < 1E-6 and abs(vector3.z) < 1E-6 :
            ui.messageBox("Assembly already centered.")
        else:
            transformTrans = adsk.core.Matrix3D.create()
            trans = adsk.core.Matrix3D.create()

            transformTrans.translation = vector3
            trans.transformBy(transformTrans)

            moveFeats = features.moveFeatures
            moveFeatureInput = moveFeats.createInput(allbodies, trans)
            moveFeats.add(moveFeatureInput)

    except:
        if ui:
            ui.messageBox('Failed:\n{}'.format(traceback.format_exc()))

 

 

0 J'aime
Message 8 sur 24

Anonymous
Non applicable

Je souhaite usiner cet objet que je vais réaliser par retournement.

Je vais usiner un côté puis le retourner et usiner le deuxième côté, en perçant des quatre trous repères sur la première face de la pièce de bois et sur le martyr.

Ces trous doivent être symétrique par rapport au centre de mon objet.

 

J'ai essayé le script mais j'ai un message d'erreur.

Capture d’écran 2019-04-25 à 17.50.18.png

0 J'aime
Message 9 sur 24

JeromeBriot
Mentor
Mentor

Ton assemblage est un peu plus complexe.

 

Essaie celui-ci :

 

import adsk.core, traceback

def run(context):
    ui = None
    try:
        app = adsk.core.Application.get()
        ui  = app.userInterface

        design = adsk.fusion.Design.cast(app.activeProduct)
        root = design.rootComponent
        componentNameMap = {}
        componentNameMap[root.name] = root

        for occ in root.allOccurrences:
            subComp = occ.component
            componentNameMap[subComp.name] = subComp

        camera = app.activeViewport.camera

        vector3 = adsk.core.Vector3D.create(-camera.target.x, -camera.target.y, -camera.target.z)

        for comp in list(componentNameMap.values()):

            if comp.bRepBodies.count==0:
                continue

            features = comp.features

            allbodies = adsk.core.ObjectCollection.create()
            for body in comp.bRepBodies:
                allbodies.add(body)

            transformTrans = adsk.core.Matrix3D.create()
            trans = adsk.core.Matrix3D.create()

            transformTrans.translation = vector3
            trans.transformBy(transformTrans)

            moveFeats = features.moveFeatures
            moveFeatureInput = moveFeats.createInput(allbodies, trans)
            moveFeats.add(moveFeatureInput)

    except:
        if ui:
            ui.messageBox('Failed:\n{}'.format(traceback.format_exc()))
0 J'aime
Message 10 sur 24

Anonymous
Non applicable

Il ne se passe rien de visible et cela me crée 10 déplacements différents dans la timeline.

0 J'aime
Message 11 sur 24

JeromeBriot
Mentor
Mentor

Il faudrait préciser certains éléments de ta question.

  • L'origine du modèle est le point (0,0,0) que l'on fait apparaitre en activant l'onglet Origin dans l'arbre de objets
  • Le point vert est la cible vers laquelle pointe la caméra qui définit la scène. Les coordonnées de ce point ne sont accessibles que via l'API (propriété Target de l'objet Camera)
  • Le centre de gravité est affiché en cliquant sur "Center of mass" dans le menu INSPECT. Les coordonnées de ce point sont récupérées via le menu Properties ou via l'API. Dans le cas d'un assemblage hétérogène, ce point n'est cohérent que si les bons matériaux sont attribués à chaque éléments.

De ces trois points, seul le premier peut être sélectionné  la souris.

Donc maintenant quel recalage géométrique souhaites-tu faire ?

 

0 J'aime
Message 12 sur 24

alex.ultra
Advisor
Advisor

@Anonymous: Je pense que tu ne prends pas le problème dans le bon sens. L'origine (WCS) n'a pas besoin d'être au centre pour assurer un usinage par retournement, le seul point important est que l'origine soit strictement au même endroit pour l'usinage dessus et dessous mais il peut être dans un angle, en haut ou en bas, aucune importance. Il te faut aussi voir en cas de changement d'outil de garder de la matière de référence.

 

0 J'aime
Message 13 sur 24

Anonymous
Non applicable

Je procède comme suit, j'usine 4 trous sur mon martyr, les mêmes sur ma pièce de bois dans lesquels j'insère des tourillons pour que lors du retournement les tourillons s'emboitent dans le martyr.

Il faut que ces 4 trous soient symétriques par rapport au centre de mon objet.

0 J'aime
Message 14 sur 24

alex.ultra
Advisor
Advisor

A ce moment là, il te faut en premier usiner ta pièce, en second ton martyr et là tu gardes l'origine du martyr pour la suite des opérations, sachant qu'il te faudra au préalable programmer les usinages avec comme point d'origine le même que celui du martyr.

Exemples d'usinage d'une pièce en 4 étapes (3 retournements)

1.JPG

2.JPG3.JPG4.JPG

Comme tu peux le voir, les axes changent mais pas le point d'origine.

 

0 J'aime
Message 15 sur 24

Anonymous
Non applicable

Je dois absolument, lors du retournement, conserver la position exacte de l'objet, comme si il tournait de 180° autour d'un axe (Y dans mon cas) et qui passe pas le centre de gravité.

Ainsi les trous de ma pièce de bois correspondront exactement à ceux du martyr, usiné avec le même Setup, après un retournement.

Si je ne pivote pas autour de cet axe alors il y aura un décalage entre les deux faces usinées.

0 J'aime
Message 16 sur 24

alex.ultra
Advisor
Advisor

C'est ce que je croyais au début mais en fait non, ce qui est réellement important c'est que l'origine du martyr et de la phase 2 soient identiques et ça c'est dans Fusion que ça se joue.

0 J'aime
Message 17 sur 24

Anonymous
Non applicable

Il m'est impossible de trouver parfaitement l'origine parfaite sur la deuxième face.

En le faisant comme je l'imagine, je garde l'origine de la face A, je n'ai pas besoin de refaire le zéro, juste le Z.

0 J'aime
Message 18 sur 24

alex.ultra
Advisor
Advisor

Je dois mal m'exprimer, demain j'essaierai de te faire une démonstration.

0 J'aime
Message 19 sur 24

Le_Bear
Collaborator
Collaborator

@alex.ultra  a écrit :

Après si c'est une forme complexe, je sais pas si il y a une fonction dans Fusion qui trouve le centre de gravité de manière automatique.


Oui, Fusion  permet de trouver et montrer le centre de gravité. Mais, par définition, le centre de gravité et le centre "géométrique" sont distincts:

2019-04-28 17_16_01-Autodesk Fusion 360 (Startup License).png

Bernard Grosperrin

Autodesk Certified Instructor

FaceBook Group | Forum | YouTube

Group Network Leader
 
0 J'aime
Message 20 sur 24

Le_Bear
Collaborator
Collaborator

@alex.ultra  a écrit :

Après si c'est une forme complexe, je sais pas si il y a une fonction dans Fusion qui trouve le centre de gravité de manière automatique.


Oui, Fusion  permet de trouver et montrer le centre de gravité. Mais, par définition, le centre de gravité et le centre "géométrique" sont distincts. Le centre de gravité (center of mass) prend en compte la masse de chacun des éléments, qui bien sur doivent être dans le bon matériau, pour que ce soit valide.2019-04-28 17_16_01-Autodesk Fusion 360 (Startup License).png

2019-04-28 17_16_01-Autodesk Fusion 360 (Startup License).png

Bernard Grosperrin

Autodesk Certified Instructor

FaceBook Group | Forum | YouTube

Group Network Leader
 
0 J'aime