Normale d'une Face

Forum destiné aux questions et discussions en français
Forum rules
Règles du forum et informations utiles.

VEUILLEZ LIRE CECI AVANT DE DEMANDER DE L'AIDE
Gandouzi Ghayth
Posts: 37
Joined: Wed May 13, 2020 2:45 am

Normale d'une Face

Postby Gandouzi Ghayth » Tue Jul 21, 2020 6:11 pm

J'ai besoin d'un CODE python qui je lui donne la face spécifiée (ex: Face3) et qui me donne comme résultat la normale de cette face sachant que je ne veux pas la sélectionnée dans le GUI seulement avec un CODE python.
openBrain
Posts: 4434
Joined: Fri Nov 09, 2018 5:38 pm

Re: Normale d'une Face

Postby openBrain » Tue Jul 21, 2020 6:46 pm

En considérant que 'face' est la face en question :

Code: Select all

normVec = face.normalAt(face.Surface.parameter(face.CenterOfMass)[0], face.Surface.parameter(face.CenterOfMass)[1])
Gandouzi Ghayth
Posts: 37
Joined: Wed May 13, 2020 2:45 am

Re: Normale d'une Face

Postby Gandouzi Ghayth » Wed Jul 22, 2020 7:38 pm

Merci pour la réponse openBrain, mais j'ai une autre problème au niveaux l'objet face (avec couleur jaune dans la photo ci-joint). Je veux obtenir ce objet "face" sachant que je connait seulement le nom de la face (Ex : Face3)
Attachments
Capture.PNG
Capture.PNG (15.43 KiB) Viewed 257 times
openBrain
Posts: 4434
Joined: Fri Nov 09, 2018 5:38 pm

Re: Normale d'une Face

Postby openBrain » Wed Jul 22, 2020 9:25 pm

La 'Face3' de l'objet 'obj' s'obtient avec :

Code: Select all

obj.Shape.Faces[2]
User avatar
GlouGlou
Posts: 2301
Joined: Sun Apr 05, 2015 9:02 am
Location: La Rochelle, France

Re: Normale d'une Face

Postby GlouGlou » Fri Jul 24, 2020 5:28 pm

c'est une fonction qui n'existe pas, enfin je ne l'ai pas vue. :D
Un simple edge normal à la face, d'une longueur paramétrée. Cela pourrait être utile comme support à autre chose.
User avatar
flachyjoe
Posts: 731
Joined: Sat Mar 31, 2012 12:00 pm
Location: Limoges, France

Re: Normale d'une Face

Postby flachyjoe » Fri Jul 24, 2020 6:06 pm

GlouGlou wrote:
Fri Jul 24, 2020 5:28 pm
c'est une fonction qui n'existe pas, enfin je ne l'ai pas vue. :D
Un simple edge normal à la face, d'une longueur paramétrée. Cela pourrait être utile comme support à autre chose.
Gandouzi Ghayth a bien précisé qu'il voulait un code python.
Sinon tu peux accrocher une Datum Line en mode 1er axe principal.
- Flachy Joe -
alias FFW @ irc.freenode.net #freecad et #freecad-fr
"Puisqu’on ne peut changer la direction du vent, il faut apprendre à orienter les voiles." Anonyme
Gandouzi Ghayth
Posts: 37
Joined: Wed May 13, 2020 2:45 am

Re: Normale d'une Face

Postby Gandouzi Ghayth » Fri Jul 24, 2020 7:19 pm

c'est bon voici le code qui vous permet de générer le normale d'une face

Code: Select all

import FreeCAD
import FreeCADGui
#creation liste piece 
LP = [] 
#LC = ['planesParallel','circularEdge']
LP2=[]

for object in FreeCAD.ActiveDocument.Objects:
    if 'objectType' in   object.PropertiesList:
         LP.append(object.Label)
    if 'Type' in object.PropertiesList:
         LP2.append(object.Object1)
         LP2.append(object.Object2)
n=len(LP)
for i in range (n):
   LP[i] = "b_"+str(LP[i]+"_")
print(LP)
print("le nombre de pièce= : ", len(LP)) 

	         
               

#Matrice X
X = [0] * n
for i in range (n):
    X[i] = [0] * n
#print(X)
#♣Matrice Y
Y = [0] * n
for i in range (n):
    Y[i] = [0] * n
#print(Y)
#Matrice Z
Z = [0] * n
for i in range (n):
    Z[i] = [0] * n
#print(Z)
#Remplisage matrice X 
for k in range (0,len(LP2),2):   
     if k+1 < (len(LP2)) :
       i=LP.index(LP2[k])
       j=LP.index(LP2[k+1])
       X[i][j] = 1 
#print(X)
u=0
v=0
LN=[]
for object in FreeCAD.ActiveDocument.Objects:
      if 'Type' not in object.PropertiesList:
          maFace = object.Shape.Face3
          myNormal =maFace.normalAt (u, v)
          LN.append(myNormal)
print(LN)
User avatar
GlouGlou
Posts: 2301
Joined: Sun Apr 05, 2015 9:02 am
Location: La Rochelle, France

Re: Normale d'une Face

Postby GlouGlou » Fri Jul 24, 2020 7:20 pm

flachyjoe wrote:
Fri Jul 24, 2020 6:06 pm
Sinon tu peux accrocher une Datum Line en mode 1er axe principal.
nan, c'est pas pareil, avec un segment on peut jouer sur sa longueur. Et datumline, certaines fonctions ne fonctionnent pas avec (pour le moment?)
User avatar
flachyjoe
Posts: 731
Joined: Sat Mar 31, 2012 12:00 pm
Location: Limoges, France

Re: Normale d'une Face

Postby flachyjoe » Fri Jul 24, 2020 7:42 pm

GlouGlou wrote:
Fri Jul 24, 2020 7:20 pm
nan, c'est pas pareil, avec un segment on peut jouer sur sa longueur. Et datumline, certaines fonctions ne fonctionnent pas avec (pour le moment?)
Cadeau :lol:

Code: Select all

length = 3
f=Gui.Selection.getSelectionEx()[0].SubObjects[0]
g=f.CenterOfMass
norm=Part.makeLine(g,g+f.normalAt(*f.Surface.parameter(g))*length)
Part.show(norm)
NB: la normale se retrouve à l’intérieur du volume dans le cas où une surface courbe est sélectionnée.
- Flachy Joe -
alias FFW @ irc.freenode.net #freecad et #freecad-fr
"Puisqu’on ne peut changer la direction du vent, il faut apprendre à orienter les voiles." Anonyme
mario52
Posts: 3030
Joined: Wed May 16, 2012 2:13 pm

Re: Normale d'une Face

Postby mario52 » Fri Jul 24, 2020 8:24 pm

Bonjour
GlouGlou wrote:
Fri Jul 24, 2020 5:28 pm
c'est une fonction qui n'existe pas, enfin je ne l'ai pas vue. :D
Un simple edge normal à la face, d'une longueur paramétrée. Cela pourrait être utile comme support à autre chose.
avec Macro_WorkFeatures

normale00.png
normale00.png (36.01 KiB) Viewed 95 times
mario
Maybe you need a special feature, go into Macros_recipes and Code_snippets, Dialog creation. My macros on Gist.github.