Manque ou évolution (bug ?) : expression avec =Pad.Shape.BoundBox....

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
User avatar
2cv001
Posts: 481
Joined: Wed Jan 01, 2020 9:30 am

Manque ou évolution (bug ?) : expression avec =Pad.Shape.BoundBox....

Post by 2cv001 »

Bonjour,
Avec la version Daily

Code: Select all

OS: Windows 10 Version 2009
Word size of FreeCAD: 64-bit
Version: 2023.131.26244 +5365 (Git)
Build type: Release
Branch: LinkDaily
Hash: 73c4ca254c5de8849d104973482e98399fb24863
Python version: 3.8.10
Qt version: 5.15.2
Coin version: 4.0.1
OCC version: 7.6.2
Locale: French/France (fr_FR)
On peut utiliser dans une expression (dans un spreadsheet par exemple) des propriétés Pad.Shape.BoundBox... comme celle ci :

Code: Select all

=Pad.Shape.BoundBox.XMin
Par contre, dans la version 0.21

Code: Select all

OS: Windows 10 Version 2009
Word size of FreeCAD: 64-bit
Version: 0.21.0.32258 (Git)
Build type: Release
Branch: master
Hash: 0f4acc55beb66dcc9dfab442344c6286d6a2913e
Python 3.8.10, Qt 5.15.2, Coin 4.0.1, Vtk 8.2.0, OCC 7.6.3
Locale: French/France (fr_FR)
Installed mods: 
  * Assembly3 0.11.4
  * Curves 0.6.5
  * fasteners 0.4.26
  * Help 1.0.3
  * ThreadProfile 1.84.0
On ne peut pas rentrer une telle expression au delà de Shape.
Capture.PNG
Capture.PNG (10.97 KiB) Viewed 744 times
Dans la version daily, c'est beaucoup plus complet :
Capture2.PNG
Capture2.PNG (13.79 KiB) Viewed 744 times

C'est volontaire pour une raison que j'ignore, un développement non encore fait ou une structure des données légèrement différentes ?
Une idée pour obtenir l'équivalent en version 0.21 ?

Edit, en voyant la documentation https://wiki.freecad.org/Expressions/fr
J'ai vu que l'on pouvait faire

Code: Select all

Référencement d'objets

Vous pouvez faire référence à un objet par sa DonnéesName ou sa DonnéesLabel. Dans le cas d'une DonnéesLabel, vous devez l'entourer de double symboles << et >>, comme ceci <<Label>>.

Vous pouvez référencer n'importe quelle propriété numérique d'un objet. ..... Pour faire référence à l'objet lui-même, utilisez la pseudo-propriété _self. Par exemple, vous pouvez utiliser Cylinder._self ou <<Label_of_cylinder>>._self. 


Avec la version daily on a effectivement accès à tout (enfin je suppose)
Capture3.PNG
Capture3.PNG (6.56 KiB) Viewed 722 times
Alors qu'avec la 0.21, contrtairement à ce qui me semble dit dans la documentation en question, on a accès à rien
Capture4.PNG
Capture4.PNG (2.23 KiB) Viewed 717 times
Macro Sketch Constraint From Spreadsheet :
https://wiki.freecad.org/Macro_Sketch_C ... adsheet/fr
openBrain
Veteran
Posts: 9031
Joined: Fri Nov 09, 2018 5:38 pm
Contact:

Re: Manque ou évolution (bug ?) : expression avec =Pad.Shape.BoundBox....

Post by openBrain »

On peut rentrer l'expression en fait, mais elle n'est pas suggérée. Il y a eu des régressions pendant la 0.20 sur cette fonction, c'est encore en cours de correction.
User avatar
2cv001
Posts: 481
Joined: Wed Jan 01, 2020 9:30 am

Re: Manque ou évolution (bug ?) : expression avec =Pad.Shape.BoundBox....

Post by 2cv001 »

Merci @openBrain !
Macro Sketch Constraint From Spreadsheet :
https://wiki.freecad.org/Macro_Sketch_C ... adsheet/fr
User avatar
flachyjoe
Veteran
Posts: 1855
Joined: Sat Mar 31, 2012 12:00 pm
Location: Limoges, France

Re: Manque ou évolution (bug ?) : expression avec =Pad.Shape.BoundBox....

Post by flachyjoe »

Salut,
2cv001 wrote: Fri Mar 31, 2023 6:34 am Avec la version Daily
ce que tu nommes "version daily" est la branche LinkDaily de Realthunder, ce n'est pas une distribution du projet FreeCAD mais celle, personnelle, d'un (superbe) contributeur et elle comporte des modifications qui ne sont pas maintenue par la (même) communauté.
Il y a des infos sur les différences entre les 2 versions dans cette discussion (en anglais) viewtopic.php?t=60681
- Flachy Joe -
Image
User avatar
2cv001
Posts: 481
Joined: Wed Jan 01, 2020 9:30 am

Re: Manque ou évolution (bug ?) : expression avec =Pad.Shape.BoundBox....

Post by 2cv001 »

Merci pour le lien. C'est vrai qu'il y a pas mal de choses intéressantes dans cette version, mais le fait qu'elle n'est pas 'officielle' est un peu gênant.
J'espère qu'elle sert de fer de lance pour des évolutions (à priori oui, c'est ce qui avait été dit dans un autre message).
Pour en revenir au problème initial, à priori, c'est une régression qui devrait être corrigé.

En fait, je cherchait à contourner le problème de dénomination topologique. La version LinkDaily était une réponse, mais un peu non satisfaisante car moins courante et potentiellement, il peut y avoir des incompatibilités.

Bref, pour contourner ce problème, dans le cas très simple par exemple d'un skectch qui se place sur la face supérieur d'un pad (pad fait par exemple sur un sketch dans le plan xy), je teste le fait de modifier la propriété attachement / position /z en lui mettant par exemple

Code: Select all

Pad.Shape.BoundBox.ZMax
Capture.PNG
Capture.PNG (17.23 KiB) Viewed 569 times
Dans la version LinkDaily, ça fonctionne mais pas dans la 0.21. Ca me fait une belle jambe puisque justement je cherche à me passer de la LinkDaily.

J'en ai même fait une macro (sélectionner à la fois le pad et le sketch que l'on veut accrocher au pad, puis la lancer. Il doit y avoir plein de cas où ça ne marche pas, mais bon, c'est un début.

Code: Select all

import FreeCAD, FreeCADGui

##########################################
# Main proceddure
##########################################
def main():

    # get selected pad
    sel = FreeCADGui.Selection.getSelection()[0]

    if sel.TypeId == 'Sketcher::SketchObject' :
        selSketch = sel
    elif sel.TypeId == 'PartDesign::Pad' :
        selPad = sel  
        
    sel = FreeCADGui.Selection.getSelection()[1]
    if sel.TypeId == 'Sketcher::SketchObject' :
        selSketch = sel
    elif sel.TypeId == 'PartDesign::Pad' :
        selPad = sel 

    # get pad properties
    selectedPadName = selPad.Name
    selectedPadLength = selPad.Length
    selectedPadSketch = selPad.Profile[0]
    selectedPadSketchName = selectedPadSketch.Name  
        #selSketch.setExpression('.AttachmentOffset.Base.z', selectedPadName + '.Reversed == False ? ' + selectedPadSketchName 
        #+ '.Placement.Base.z + ' + selectedPadName + '.Length : ' + selectedPadSketchName + '.Placement.Base.z' )    
        
    if selSketch.Support[0][0].Name == 'XY_Plane' and selSketch.MapMode == 'FlatFace' :    
        expression = selectedPadName + '.Shape.BoundBox.ZMax'
        selSketch.setExpression('.AttachmentOffset.Base.z', expression )
        #expression = selectedPadName + '.Reversed == False ? ' + selectedPadSketchName 
        #+ '.Placement.Base.z + ' + selectedPadName + '.Length : ' + selectedPadSketchName + '.Placement.Base.z'

        
        
    elif selSketch.Support[0][0].Name == 'XZ_Plane' and selSketch.MapMode == 'FlatFace' :    
        expression = '-' + selectedPadName + '.Shape.BoundBox.Ymin'
        selSketch.setExpression('.AttachmentOffset.Base.z', expression )
    elif selSketch.Support[0][0].Name == 'YZ_Plane' and selSketch.MapMode == 'FlatFace' :    
        expression = selectedPadName + '.Shape.BoundBox.XMax'
        selSketch.setExpression('.AttachmentOffset.Base.z', expression )
        
    else :
        print(selSketch.Name + 'Attachement support or MapMode not compatible. Must be XY_Plane and FlatFace')

if __name__ == '__main__':
    main()


Du coup, je change un peu mon fusil d'épaule et je remplace la formule

Code: Select all

Pad.Shape.BoundBox.ZMax
par

Code: Select all

Pad.Reversed == False ? Sketch.Placement.Base.z + Pad.Length : Sketch.Placement.Base.z
D'où la nouvelle macro, compatible elle avec la version 'officielle' et qui pour l'instant ne marche que pour les plans xy :

Code: Select all

import FreeCAD, FreeCADGui





##########################################
# Main proceddure
##########################################
def main():

    # get selected pad
    sel = FreeCADGui.Selection.getSelection()[0]

    if sel.TypeId == 'Sketcher::SketchObject' :
        selSketch = sel
    elif sel.TypeId == 'PartDesign::Pad' :
        selPad = sel  
        
    sel = FreeCADGui.Selection.getSelection()[1]
    if sel.TypeId == 'Sketcher::SketchObject' :
        selSketch = sel
    elif sel.TypeId == 'PartDesign::Pad' :
        selPad = sel 

    # get pad properties
    selectedPadName = selPad.Name
    selectedPadLength = selPad.Length
    selectedPadSketch = selPad.Profile[0]
    selectedPadSketchName = selectedPadSketch.Name  
    selSketch.setExpression('.AttachmentOffset.Base.z', selectedPadName + '.Reversed == False ? ' + selectedPadSketchName 
        + '.Placement.Base.z + ' + selectedPadName + '.Length : ' + selectedPadSketchName + '.Placement.Base.z' )    


if __name__ == '__main__':
    main()




Macro Sketch Constraint From Spreadsheet :
https://wiki.freecad.org/Macro_Sketch_C ... adsheet/fr
User avatar
jmarie3D
Posts: 310
Joined: Sat May 02, 2020 12:31 pm

Re: Manque ou évolution (bug ?) : expression avec =Pad.Shape.BoundBox....

Post by jmarie3D »

Tu te compliques l'existence. Il suffit d'entrer Pad.Length dans la valeur Z de ton sketch
Capture d’écran_2023-04-01_11-57-50.png
Capture d’écran_2023-04-01_11-57-50.png (32.69 KiB) Viewed 546 times
User avatar
2cv001
Posts: 481
Joined: Wed Jan 01, 2020 9:30 am

Re: Manque ou évolution (bug ?) : expression avec =Pad.Shape.BoundBox....

Post by 2cv001 »

Le problème en ne mettant que Pad.Length, est que
Si le sketch rattaché au Pad a une valeur dans sa propriété Placement.Base.z, ça ne marche pas, et si le pad est inversé, ça ne marche pas non plus.
D'où la formule qui commence par tester si c'est inversé et qui tiens compte de la propriété Placement.Base.z du sketch du Pad (le sketch qui a servi à faire le Pad et non le sketch dont on est en train de modifier sa propriété Placement.Base.z)

Code: Select all

Pad.Reversed == False ? Sketch.Placement.Base.z + Pad.Length : Sketch.Placement.Base.z
Dit autrement, si ce n'est pas inversé, on prend le z du bas du Pad (le z de son sketch) augmenté de la hauteur du Pad et si c'est inversé, on se contente de le placer au même z que le Pad (donc au même z que le haut du pad vu qu'il est inversé)
Oups, j'ai l'impression de ne pas être très clair là :D
Macro Sketch Constraint From Spreadsheet :
https://wiki.freecad.org/Macro_Sketch_C ... adsheet/fr
User avatar
jmarie3D
Posts: 310
Joined: Sat May 02, 2020 12:31 pm

Re: Manque ou évolution (bug ?) : expression avec =Pad.Shape.BoundBox....

Post by jmarie3D »

2cv001 wrote: Sat Apr 01, 2023 10:19 am Oups, j'ai l'impression de ne pas être très clair là :D
Non. Et je me demande ce que ça donnerait si tu entrais ça dans Chat GPT :lol:
User avatar
2cv001
Posts: 481
Joined: Wed Jan 01, 2020 9:30 am

Re: Manque ou évolution (bug ?) : expression avec =Pad.Shape.BoundBox....

Post by 2cv001 »

Chat GPT en python il est bon, mais pas en FreeCAD.

Bon, je vais essayer d'être plus clair :
Capture.PNG
Capture.PNG (27.07 KiB) Viewed 493 times
1) je cherche donc à modifier la propriété z de mon sketch (on va l'appeler SketchCible afin de le placer en z collé au haut d'un pad.
2) la propriété de SketchCible que je cherche à modifier est celle qui se trouve ici dans l'interface
Capture2.PNG
Capture2.PNG (30.27 KiB) Viewed 493 times
Vu avec un œil python, c'est la propriété AttachmentOffset.Base.z du SkechtCible
3) que mettre dans cette propriété ?
si on y mets juste la hauteur du Pad sur lequel on veut placer notre sketch (on va l'appeler PadSource), ca va marcher si le padSource n'est pas inversé. = si on a pas coché cette case :
Capture3.PNG
Capture3.PNG (17.21 KiB) Viewed 493 times
Si on l'a coché, le dessus du padSource n'est plus à une valeur z égal à Length mais à la hauteur du sketch du padSource.
4 ) dans le même genre, si on modifie le z du padSource, il faut que ça modifie la hauteur de notre SketchCible. Si on déplace par exemple de 10 mm le padSource vers le haut, il faut que le sketchCible se déplace aussi vers le haut.
5 ) d'où la formule

Code: Select all

Pad.Reversed == False ? Sketch.Placement.Base.z + Pad.Length : Sketch.Placement.Base.z
à partir de quel numéro tu décroches ?
Macro Sketch Constraint From Spreadsheet :
https://wiki.freecad.org/Macro_Sketch_C ... adsheet/fr
User avatar
jmarie3D
Posts: 310
Joined: Sat May 02, 2020 12:31 pm

Re: Manque ou évolution (bug ?) : expression avec =Pad.Shape.BoundBox....

Post by jmarie3D »

2cv001 wrote: Sat Apr 01, 2023 11:26 am à partir de quel numéro tu décroches ?
À partir du début. En fait, je n'avais pas compris que ta question concernait le développement de ta macro... :?
Post Reply