v0.18-16131 - Macro - Balayage de profil soustractif (SubtractivePipe)

Forum destiné aux questions et discussions en français
Forum rules
Be nice to others! Read the FreeCAD code of conduct!
Post Reply
User avatar
DeeJayOne
Posts: 332
Joined: Thu Sep 05, 2019 9:18 am

v0.18-16131 - Macro - Balayage de profil soustractif (SubtractivePipe)

Post by DeeJayOne »

Bonjour,

J'essaie de jouer un peu avec l'enregistreur de macros mais je rencontre quelques difficultés lors de la réalisation de certaines opérations.

Exemple : je souhaite réaliser un balayage de profil soustractif.
- Je commence par sélectionner l'esquisse qui me sert de profil.
- Ensuite, je clique sur le bouton et une boîte de dialogue s'ouvre avec le nom de l'esquisse déjà préremplit.
- Il me faut alors ensuite sélectionner l'objet qui servira de chemin pour le balayage.
Dans mon cas, il s'agit d'une hélice. Cet objet est externe au "part" actuellement sélectionné sur lequel je travaille.
Une 2nd boîte de dialogue me demande donc de créer un lien vers cet objet. Je choisis "dépendant".
Tout s'est bien déroulé jusque là, un objet de type "forme liée" nommé "ReferenceHelix" est créé et pointe vers l'objet de type hélice.

En revanche, lorsque j'analyse le fichier macro généré, il y a beaucoup d'éléments manquants.
J'ai bien les commandes de création du "SubtractivePipe" :

Code: Select all

App.activeDocument().Body.newObject("PartDesign::SubtractivePipe","SubtractivePipe")
App.activeDocument().SubtractivePipe.Profile = App.activeDocument().Sketch001
App.ActiveDocument.recompute()
Mais la commande qui créé la forme liée n'est pas réalisée et par conséquent, la commande qui associe l'objet pour le chemin est également absente.
J'ai remarqué que si je change directement certains paramètres au niveau de l'onglet "données" section "sweep" de l'objet, les commandes python sont bien générées. Alors que via la boîte de dialogue, ces changements ne sont pas pris compte.
Exemple :

Code: Select all

FreeCAD.getDocument("Sans_nom").getObject("SubtractivePipe").Sections = [App.getDocument('Sans_nom').getObject('Helix')]
FreeCAD.getDocument("Sans_nom").getObject("SubtractivePipe").Mode = u"Frenet"
Jusque là, je peux toujours arriver à mes fins à une exception près :
Je dois créer la "forme liée" mais lorsque je le fais en dehors de la création du "subtractivepipe" :
- On ne me demande pas si cet objet doit être une copie ou un objet dépendant.
- Je ne trouve pas dans les propriétés de la forme liée le lien qui pointe vers l'objet.
- Je ne trouve pas dans les propriétés de la forme liée la paramètre qui indique s'il s'agit d'une dépendance ou pas.

Exemple de la création d'une forme liée :

Code: Select all

App.activeDocument().Body.newObject('PartDesign::ShapeBinder','ShapeBinder')
S'agit il d'un bug, d'une régression ?
Avez vous déjà rencontré ce type de problème ?
Last edited by DeeJayOne on Fri Sep 20, 2019 6:30 am, edited 1 time in total.
L'important est de ne pas arrêter de poser des questions. La curiosité a sa propre raison d'exister
The important thing is not to stop questioning. Curiosity has its own reason for existing.
Albert Einstein
openBrain
Veteran
Posts: 9041
Joined: Fri Nov 09, 2018 5:38 pm
Contact:

Re: v0.18-16131 - Macro - Balayage de profil soustractif (SubstractivePipe)

Post by openBrain »

Un shapebinder est nécessairement une forme liée, donc je ne pense pas qu'il y ait un bug. ;)
Si tu veux une forme indépendante, il suffit de faire une copie simple au lieu d'un shapebinder.
User avatar
DeeJayOne
Posts: 332
Joined: Thu Sep 05, 2019 9:18 am

Re: v0.18-16131 - Macro - Balayage de profil soustractif (SubtractivePipe)

Post by DeeJayOne »

openBrain wrote: Thu Sep 19, 2019 7:16 pm Un shapebinder est nécessairement une forme liée, donc je ne pense pas qu'il y ait un bug. ;)
Si tu veux une forme indépendante, il suffit de faire une copie simple au lieu d'un shapebinder.
J'entendais par bug le fait que certaines lignes de code python ne soient pas générées lorsque des actions ont été effectuées depuis la boîte de dialogue de la configuration du "SubtractivePipe".

Sinon, je n'arrive pas à comprendre comment modifier le lien qui pointe vers un objet d'un shapebinder.

Code: Select all

App.ActiveDocument.ShapeBinder.Shape
me renvoit

Code: Select all

Wire object at 00000255D2B877A0
Je suppose qu'il doit s'agir du fil auto-généré qui est associé à l'objet "Helix"

J'ai essayé les 2 lignes suivantes mais celà ne fonctionne pas.

Code: Select all

# This line make an error : "TypeError: Property 'Shape': type must be 'Shape', not list"
App.ActiveDocument.ShapeBinder.Shape = [App.getDocument('Sans_nom').getObject('Hélice')]
# this line make an error : TypeError: Property 'Shape': type must be 'Shape', not NoneType
App.ActiveDocument.ShapeBinder.Shape = App.getDocument('Sans_nom').getObject('Hélice')
L'objet de type Shape sous FreeCAD, ça correspond à quels types d'objets ?
Last edited by DeeJayOne on Fri Sep 20, 2019 6:33 am, edited 3 times in total.
L'important est de ne pas arrêter de poser des questions. La curiosité a sa propre raison d'exister
The important thing is not to stop questioning. Curiosity has its own reason for existing.
Albert Einstein
openBrain
Veteran
Posts: 9041
Joined: Fri Nov 09, 2018 5:38 pm
Contact:

Re: v0.18-16131 - Macro - Balayage de profil soustractif (SubstractivePipe)

Post by openBrain »

Shape est la variable qui contient la représentation physique de l'objet. On ne peut pas lui affecter de valeur. Je n'ai pas de PC sous la main, mais je pense que si tu crées juste un shapebinder à la main, tu verras dans la console quelle est la variable qui définit l'objet source. ;)
User avatar
DeeJayOne
Posts: 332
Joined: Thu Sep 05, 2019 9:18 am

Re: v0.18-16131 - Macro - Balayage de profil soustractif (SubtractivePipe)

Post by DeeJayOne »

Après re-lecture, mes lignes de commande ne pouvaient pas fonctionner !!!
Ces 2 lignes fonctionnent :

Code: Select all

App.ActiveDocument.ShapeBinder.Shape = App.ActiveDocument.Helix.Shape
App.ActiveDocument.ShapeBinder.Shape = App.getDocument('Sans_nom').getObject('Helix').Shape
En revanche, après avoir créé et paramétré le SubtractivePipe, je fais un "recompute()" et j'ai des points d'exclamation sur l'objet lui-même (SubtractivePipe) "No spine linked" et le Body "Tip shape is empty". Le résultat de l'opération n'apparait pas à l'écran.

Ensuite, si j'édite les paramètres en "mode GUI" (onglet tâches), le champ objet (pour définir le chemin) est vide. Ce qui est curieux car dans les propriétés de l'objet (onglet données), le nom du ShapeBinder est bien spécifié.

J'ai également testé sous FC v0.19-18234 (15/09/2019) et le résultat est similaire :
J'ai un point d'exclamation sur l'objet lui-même (SubtractivePipe) "No spine linked" mais pas sur le body cette fois !
Rem. : Le chanfrein s'affiche correctement dans la v0.19.18234_x64 contrairement à la v0.18-16131, ce qui est une amélioration ! (Le Pad, un chanfrein et le "détourage soustractif" étaient tous visibles en même temps, ce qui est logiquement impossible)
Attachments
Test_play_modified_macro_v0.18.png
Test_play_modified_macro_v0.18.png (136.18 KiB) Viewed 1026 times
Test_play_modified_macro_v0.19.png
Test_play_modified_macro_v0.19.png (142.47 KiB) Viewed 1026 times
Last edited by DeeJayOne on Sat Sep 21, 2019 3:31 pm, edited 8 times in total.
L'important est de ne pas arrêter de poser des questions. La curiosité a sa propre raison d'exister
The important thing is not to stop questioning. Curiosity has its own reason for existing.
Albert Einstein
User avatar
DeeJayOne
Posts: 332
Joined: Thu Sep 05, 2019 9:18 am

Re: v0.18-16131 - Macro - Balayage de profil soustractif (SubtractivePipe)

Post by DeeJayOne »

En résumé voici les lignes de code pour la macro :

Code: Select all

# Step 1 - Create a SubtractivePipe
App.activeDocument().Body.newObject("PartDesign::SubtractivePipe","SubtractivePipe")
App.activeDocument().SubtractivePipe.Profile = App.activeDocument().Sketch001
# Step 2 - Create a ShapeBinder
App.activeDocument().Body.newObject('PartDesign::ShapeBinder','ShapeBinder')
App.ActiveDocument.ShapeBinder.Shape = App.ActiveDocument.Helix.Shape
# Step 3 - Set params for the SubtractivePipe
FreeCAD.getDocument("Sans_nom").getObject("SubtractivePipe").Sections = [App.getDocument('Sans_nom').getObject('ShapeBinder')]
FreeCAD.getDocument("Sans_nom").getObject("SubtractivePipe").Mode = u"Frenet"
# Step 4 - Recompute
App.ActiveDocument.recompute()
Lors de l'enregistrement de la macro, seuls les étapes 1 et 4 sont réalisés. Les étapes 2 et 3 réalisés via le mode d'édition "GUI" ne sont pas pris en compte et n'apparaissent pas dans la console. J'ai du les ajouter manuellement.
L'important est de ne pas arrêter de poser des questions. La curiosité a sa propre raison d'exister
The important thing is not to stop questioning. Curiosity has its own reason for existing.
Albert Einstein
Post Reply