la macro FCSpring Helix Variable

Forum destiné aux questions et discussions en français
Forum rules
Be nice to others! Read the FreeCAD code of conduct!
mario52
Veteran
Posts: 4673
Joined: Wed May 16, 2012 2:13 pm

Re: la macro FCSpring Helix Variable

Post by mario52 »

Bonjour
flachyjoe wrote: Thu Dec 10, 2020 8:49 am Tu peux peut-être utiliser un QToolBox plutôt que des QGroupBox.
oui j’essayerai

j'ai fait tabWidget avec Connect And Sweep et la fenêtre ne s'élargit pas

il y a toujours quelque chose qui ne va pas avec l'un ou l'autre il n'y a qu'a suivre les posts pour voir

mais il est possible que je ne n'utilise pas bien les outils !

j'utilise QTdesigner 4.6.2 (pas long à mettre en route) (je vais regarder pour QT5Designer s'il y a des nouveautés)

et je converti avec Python36 > pyuic5.exe

mon .bat

Code: Select all

@"C:\Python36\Scripts\pyuic5.exe" -x %1.ui -o%1.py
mario
Maybe you need a special feature, go into Macros_recipes and Code_snippets, Topological_data_scripting.
My macros on Gist.github here complete macros Wiki and forum.
User avatar
freecadjam
Veteran
Posts: 1994
Joined: Tue Jul 17, 2018 10:47 am
Contact:

Re: la macro FCSpring Helix Variable

Post by freecadjam »

salut
les ressorts conique et spires rapprochées de fada3d donnent des résultats inattendus avec des absences
le premier en illustration (spires meulées) est correct mais quoi penser des froissements sur l'enveloppe ?
Attachments
Deepin Capture-écran_zone de sélection _20201215181406.png
Deepin Capture-écran_zone de sélection _20201215181406.png (154.65 KiB) Viewed 2171 times
Deepin Capture-écran_zone de sélection _20201215181317.png
Deepin Capture-écran_zone de sélection _20201215181317.png (73.16 KiB) Viewed 2171 times
Deepin Capture-écran_zone de sélection _20201215181258.png
Deepin Capture-écran_zone de sélection _20201215181258.png (69.46 KiB) Viewed 2171 times
User avatar
Chris_G
Veteran
Posts: 2579
Joined: Tue Dec 31, 2013 4:10 pm
Location: France
Contact:

Re: la macro FCSpring Helix Variable

Post by Chris_G »

Ça c'est typique d'un défaut de tesselation.
La forme est valide, mais FreeCAD a merdé en créant le mesh de visualisation.
Ça devrait disparaitre en diminuant les valeurs "Deviation" et "Deflection angulaire".
User avatar
freecadjam
Veteran
Posts: 1994
Joined: Tue Jul 17, 2018 10:47 am
Contact:

Re: la macro FCSpring Helix Variable

Post by freecadjam »

salut
les ressorts faits sur une hélice à partir d'un sketch de cercle et en choisissant mode standart et transformation constante peuvent donner des résultats surprenants pour preuve celui ci et bien d'autres aussi :
Deepin Capture-écran_zone de sélection _20201218175402.png
Deepin Capture-écran_zone de sélection _20201218175402.png (802.74 KiB) Viewed 2120 times
Deepin Capture-écran_zone de sélection _20201218174943.png
Deepin Capture-écran_zone de sélection _20201218174943.png (988.95 KiB) Viewed 2114 times
Deepin Capture-écran_zone de sélection _20201218194651.png
Deepin Capture-écran_zone de sélection _20201218194651.png (114.78 KiB) Viewed 2093 times
User avatar
papyblaise
Veteran
Posts: 7870
Joined: Thu Jun 13, 2019 4:28 pm
Location: France

Re: la macro FCSpring Helix Variable

Post by papyblaise »

@Mario
je pense à toi pour secourir ce po'v Venu sur le site anglais
https://forum.freecadweb.org/viewtopic.php?f=3&t=54533
Je sais faire un ersatz de câble , ou de toron droit , mais je sais pas faire le faire en "anse de panier" tressée
Attachments
amortisseur à cable.FCStd
(57.96 KiB) Downloaded 59 times
amortisseur à cable.PNG
amortisseur à cable.PNG (36.2 KiB) Viewed 2067 times
mario52
Veteran
Posts: 4673
Joined: Wed May 16, 2012 2:13 pm

Re: la macro FCSpring Helix Variable

Post by mario52 »

Bonjour

moi aussi je pense à vous Contrainte et multiplication
papyblaise wrote: Tue Jan 19, 2021 3:10 pm Je sais faire un ersatz de câble , ou de toron droit , mais je sais pas faire le faire en "anse de panier" tressée
la macro n'est pas encore au point (j'ai eu d'autres macrosOccupations) mais je vais essayé de faire plus court

regardez ici new feature twisted array strange behaviour

mario
Maybe you need a special feature, go into Macros_recipes and Code_snippets, Topological_data_scripting.
My macros on Gist.github here complete macros Wiki and forum.
User avatar
Vincent B
Veteran
Posts: 4713
Joined: Sun Apr 05, 2015 9:02 am
Location: La Rochelle, France

Re: la macro FCSpring Helix Variable

Post by Vincent B »

oui, l'idée était de créer une spire sur une autre spire.
https://forum.freecadweb.org/viewtopic.php?f=3&t=54533
Ce qui est possible avec approximate curve de atelier Curves.
Mais il y a un bug avec les points. :cry:
mario52
Veteran
Posts: 4673
Joined: Wed May 16, 2012 2:13 pm

Re: la macro FCSpring Helix Variable

Post by mario52 »

Bonsoir

ça a l'air de bien fonctionner rotationX permet de faire la rotation d'une autre spire autour du fil selectionner pour obtenir:

le bémol: il travaille sur un fil d'une pièce, ou 1 segment à la fois

CableElectrique00.png
CableElectrique00.png (19.53 KiB) Viewed 1988 times
CableElectrique01.png
CableElectrique01.png (32.99 KiB) Viewed 1988 times
CableElectrique00.FCStd
(987.04 KiB) Downloaded 90 times

Code: Select all

######Convert the following code to English and optimized: by Syres 
## https://forum.freecad.org/viewtopic.php?p=703590#p703590
## How to draw polygonal spirals in Freecad?
#################### Section object selected for follow Begin ####################################################
##Macro_D_Un_Jour_Rotation_D_Un_Fil_Sur_Un_Fil
##20/01/2020, 1/09/2023
##Mario52
##https://forum.freecadweb.org/viewtopic.php?f=12&t=52069&start=40
##Portion FCSpring_Helix_Variable
##
import PySide2.QtCore
import PySide2.QtWidgets
from PySide2 import (QtWidgets, QtCore, QtGui)
from PySide2.QtWidgets import (QWidget, QVBoxLayout, QStyle, QDockWidget, QToolBar, QDialog)
#from PySide2.QtGui import (QColor, QIcon)
from PySide2.QtCore import QSize

import Draft, Part, FreeCADGui

global numberSpires
global rayon
global pas
global precision
global typeLine
global helixS
global pasSpire
global radiusS
global affPoint
global debutAngle
global finAngle
global modifyAngle
global radius_2_Cone
global spireConeUne
global spireConeComp
global spireReverse
global lissageSpire
global lissageS
global points  ;  points = []

#global nomF
global ressort 			#global Spring


precision = 360/5    # = 72 points per turn
rayon = 5.0         # spring radius on selected wire mm
pas = 12.0           # pitch mm
epaisseurRessort = 1 # wire radius if wire = 0 then no sweep & keep small say 10-40% of rayon = radius

rotationX = 0        # rotation on the X axis for rotation around the wire selects case several springs
rotationY = 0        # rotation on the Y axis for rotation around the selected wire
rotationZ = 0        # rotation on the Z axis for rotation around the selected thread
#pitch = spring thickness * 2.0 # contiguous turns


#################### Section object selected for follow Begin ####################################################
if rayon != 0:
    doc = App.ActiveDocument
    if doc == None:
        doc = FreeCAD.newDocument()

#            #### Chrono begin ##################################
#            depart = time.clock()     # chrono begin          ##
#            ####################################################
    ressort = "" 	#ressort = spring

    ## follow the path 
    switchFollowThePath = 1
    compFollowThePath = -1
    followThePath = []
    rotationXTR = 180    # Line of work, 0 is default Try 180
    typeLine = 0

    if switchFollowThePath == 1:

            sel = FreeCADGui.Selection.getSelectionEx()                 #0# Select an object or sub object
            subObjet  = sel[0].SubObjects[0]
            #selobject = FreeCADGui.Selection.getSelection()            # Select an object
            longueurWire = subObjet.Length

            pasTravail = (pas / precision)
            followThePath = subObjet.discretize(Distance = pasTravail) 

            #### estimation
            print("Rayon          : ", rayon)
            print("Pas            : ", pas)
            print("Pas Travail    : ", pasTravail)
            print("LongueurWire   : ", longueurWire)
            print("NombrePoints   : ", len(followThePath))
            print("Epaisseur      : ", epaisseurRessort)
            print("________________")
            Gui.updateGui()                                 # refresh the screen
            #### estimation

            coor_X = coor_Y = coor_Z = 0
            plDirection = App.Placement(App.Vector(0, 0, 0), App.Rotation(App.Vector(0, 0, 0), 0), App.Vector(0, 0, 0))
            vecligne=[App.Vector(0, 0, 0),FreeCAD.Vector(rayon , 0.0, 0.0)]
            ligne = Draft.makeWire(vecligne,closed=False,face=False,support=None) #baseline creation
#            print(ligne.Length)
            # FreeCAD.activeDocument().recompute(None,True,True)
            for i in range(len(followThePath)):    # line path loop

                compFollowThePath += 1  # FollowThePath    followThePath[compFollowThePath]
                ####
                try:
                    direction = followThePath[i+1].sub(followThePath[i])
                except Exception: None
                r=App.Rotation(App.Vector(0,0,1),direction)
                plDirection=App.Placement()
                plDirection.Rotation.Q = r.Q
                plDirection.Base = followThePath[i]
                ####

                rotationXTR += 360/precision
                if rotationXTR >= 360:
                    rotationXTR = 0
                ligne.Placement = plDirection
                plDirectionT = ligne.Placement.multiply(App.Placement(App.Vector(0, 0, 0), App.Rotation(rotationXTR + rotationX, rotationY, rotationZ), App.Vector(0, 0, 0)))
                ligne.Placement = plDirectionT
                FreeCAD.activeDocument().recompute()
                a = ligne.End                                              # end of line
                points.append(FreeCAD.Vector(a))                           # append the coordinates
#                Draft.makePoint(a)

    App.ActiveDocument.removeObject(ligne.Name)
    if typeLine == 1:
        ressort = Draft.makeWire(points,closed=False,face=False,support=None)# creation spring makeWire
    else:
        ressort = Draft.makeBSpline(points,closed=False)      # creation spring Draft " makeBSpline " handed over for ease with axles
    ressort.ViewObject.LineColor  = (1.0,0.0,0.0)                          # give line LineColor
    FreeCAD.ActiveDocument.recompute()


    if epaisseurRessort != 0:	#Spring thickness
        followThePath = []
        followThePath = ressort.Shape.Edge1.discretize(Distance = 0.2) 
        ####
        try:
            direction = followThePath[1].sub(followThePath[0])
        except Exception: None
        r=App.Rotation(App.Vector(0,0,1),direction)
        plDirection=FreeCAD.Placement()
        plDirection.Rotation.Q = r.Q
        plDirection.Base = followThePath[0]
        ####
        cercle = Draft.makeCircle(radius=epaisseurRessort, placement=plDirection, face=False, support=None)
        ####Sweep############
        mySweep            = App.ActiveDocument.addObject('Part::Sweep','mySweepTest')
        mySweep.Sections   = [cercle]
        mySweep.Spine      = ressort
        mySweep.Solid  = True
        mySweep.Frenet = True
        #mySweep.Transition = 1    #1=angle right   2=courbe #curve
        mySweep.Label = "Ressort"
    
        #FreeCAD.ActiveDocument.recompute()
        FreeCAD.activeDocument().recompute(None,True,True)
##################### Section object selected for follow End  ####################################################

bon amusement chez les Anglais

EDIT 01/09/2023 20h45 Paris : code converti en anglais et optimisé par syres How to draw polygonal spirals in Freecad?
(l'original semble ne pas fonctionner dans certaines configurations cause : manque de FreeCAD.activeDocument().recompute(None,True,True))

mario
Last edited by mario52 on Fri Sep 01, 2023 6:55 pm, edited 1 time in total.
Maybe you need a special feature, go into Macros_recipes and Code_snippets, Topological_data_scripting.
My macros on Gist.github here complete macros Wiki and forum.
User avatar
papyblaise
Veteran
Posts: 7870
Joined: Thu Jun 13, 2019 4:28 pm
Location: France

Re: la macro FCSpring Helix Variable

Post by papyblaise »

ça me parait être bien , sauf que j'en trave pas une bille avec les macros.....
je me suis simplifier la vie en dessinant un faut toron fait d'une sorte de marguerite , il suffirait donc d'utiliser une seule des spires de couleur le long de la noire , n'est-il pas :?:
User avatar
Vincent B
Veteran
Posts: 4713
Joined: Sun Apr 05, 2015 9:02 am
Location: La Rochelle, France

Re: la macro FCSpring Helix Variable

Post by Vincent B »

ca marche nickel!
faut sélectionner le chemin et lancer la macro. ;)
Post Reply