la macro FCSpring Helix Variable

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
mario52
Veteran
Posts: 3964
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: 1440
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 1057 times
Deepin Capture-écran_zone de sélection _20201215181317.png
Deepin Capture-écran_zone de sélection _20201215181317.png (73.16 KiB) Viewed 1057 times
Deepin Capture-écran_zone de sélection _20201215181258.png
Deepin Capture-écran_zone de sélection _20201215181258.png (69.46 KiB) Viewed 1057 times
User avatar
Chris_G
Veteran
Posts: 2129
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: 1440
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 1006 times
Deepin Capture-écran_zone de sélection _20201218174943.png
Deepin Capture-écran_zone de sélection _20201218174943.png (988.95 KiB) Viewed 1000 times
Deepin Capture-écran_zone de sélection _20201218194651.png
Deepin Capture-écran_zone de sélection _20201218194651.png (114.78 KiB) Viewed 979 times
User avatar
papyblaise
Veteran
Posts: 4887
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 23 times
amortisseur à cable.PNG
amortisseur à cable.PNG (36.2 KiB) Viewed 953 times
mario52
Veteran
Posts: 3964
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: 3776
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: 3964
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 874 times
CableElectrique01.png
CableElectrique01.png (32.99 KiB) Viewed 874 times
CableElectrique00.FCStd
(987.04 KiB) Downloaded 34 times

Code: Select all

#################### Section object selected for follow Begin ####################################################
##Macro_D_Un_Jour_Rotation_D_Un_Fil_Sur_Un_Fil
##20/01/2020
##Mario52
##https://forum.freecadweb.org/viewtopic.php?f=12&t=52069&start=40
##Portion FCSpring_Helix_Variable
##
import PySide2
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

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


precision = 360/5    # = 72 points par tour
rayon = 2.0         # rayon du ressort sur le fil selectionne
pas = 10.0           # pas du ressort
epaisseurRessort = 0 # rayon du fil si fil = 0 alors pas de sweep

rotationX = 0        # rotation sur l'axe X pour rotation autour du fil selectionne cas plusieurs ressorts
rotationY = 0        # rotation sur l'axe Y pour rotation autour du fil selectionne
rotationZ = 0        # rotation sur l'axe Z pour rotation autour du fil selectionne
#pas = epaisseurRessort * 2.0 # spires jointives


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

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

    ## follow the path 
    switchFollowThePath = 1
    compFollowThePath = -1
    followThePath = []
    rotationXTR = 0.0    # Axe de travail
    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("________________")
            FreeCADGui.updateGui()                                 # rafraichi l'ecran
            #### 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=[FreeCAD.Vector(0, 0, 0),FreeCAD.Vector(rayon , 0.0, 0.0)]
            ligne = Draft.makeWire(vecligne,closed=False,face=False,support=None) #creation de la ligne de base
#            print(ligne.Length)

            for i in range(len(followThePath)):    # boucle chemin sur ligne

                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=FreeCAD.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

                a = ligne.End                                              # fin de ligne
                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 " remis pour facilite avec axes
    ressort.ViewObject.LineColor  = (1.0,0.0,0.0)                          # give line LineColor
    FreeCAD.ActiveDocument.recompute()

    if epaisseurRessort != 0:
        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 droit   2=courbe
        mySweep.Label = "Ressort"
    
        FreeCAD.ActiveDocument.recompute()

##################### Section object selected for follow End  ####################################################


bon amusement chez les Anglais

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
papyblaise
Veteran
Posts: 4887
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: 3776
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