Problème avec Macro Shake_Sketch

Forum destiné aux questions et discussions en français
Forum rules
Be nice to others! Read the FreeCAD code of conduct!
chrisb
Veteran
Posts: 54276
Joined: Tue Mar 17, 2015 9:14 am

Re: Problème avec Macro Shake_Sketch

Post by chrisb »

Il y a des problèmes avec cette Sketch, par exemple l'arc en vert est double.
Je crois q'on peut construire cette Sketch compl`tement sans les petit cercle. Je vais essaier.
Attachments
Bildschirmfoto 2018-01-22 um 08.36.03.png
Bildschirmfoto 2018-01-22 um 08.36.03.png (17.95 KiB) Viewed 695 times
A Sketcher Lecture with in-depth information is available in English, auf Deutsch, en français, en español.
chrisb
Veteran
Posts: 54276
Joined: Tue Mar 17, 2015 9:14 am

Re: Problème avec Macro Shake_Sketch

Post by chrisb »

Voilà ton esquisse complètement contrainte.
Il y avait plusieur problème avec:
  • encore des ligne double:
    Bildschirmfoto 2018-01-22 um 09.08.23.png
    Bildschirmfoto 2018-01-22 um 09.08.23.png (14.2 KiB) Viewed 695 times
    Bildschirmfoto 2018-01-22 um 09.00.07.png
    Bildschirmfoto 2018-01-22 um 09.00.07.png (10.25 KiB) Viewed 695 times
  • on n'avait pas besoin des angle
  • un point/ligne/cercle étrange sur une ligne
    Bildschirmfoto 2018-01-22 um 09.26.04.png
    Bildschirmfoto 2018-01-22 um 09.26.04.png (18.18 KiB) Viewed 695 times
Attachments
EsquisseProtusionVanneCopie_cb.FCStd
(26.72 KiB) Downloaded 22 times
A Sketcher Lecture with in-depth information is available in English, auf Deutsch, en français, en español.
User avatar
meme2704
Veteran
Posts: 2926
Joined: Sat Apr 01, 2017 2:47 pm
Location: Vosges

Re: Problème avec Macro Shake_Sketch

Post by meme2704 »

Ya 1 outil qui permet de faire 1 octogone
ça donne ceci.
Il me semble comprendre que tu cherche à reproduire le volant de vanne de JeanMichel, pour ce je suis d'ac avec Glouglou,c'est plus simple de faire 1/8 puis 1 copie circulaire
Attachments
rosace.png
rosace.png (124.6 KiB) Viewed 694 times
User avatar
Henri33
Posts: 59
Joined: Sat Dec 23, 2017 3:43 pm

Re: Problème avec Macro Shake_Sketch

Post by Henri33 »

meme2704 wrote: Mon Jan 22, 2018 8:59 am Ya 1 outil qui permet de faire 1 octogone
ça donne ceci.
Il me semble comprendre que tu cherche à reproduire le volant de vanne de JeanMichel, pour ce je suis d'ac avec Glouglou,c'est plus simple de faire 1/8 puis 1 copie circulaire
.
C'est exact meme2704 cette vanne m'a tapée dans l'oeil et je me suis dit pour ne pas bruler les étapes que je pourrais consacrer un peu de temps et jongler également avec les outils et propriétés. Alors là vient une autre question, comment fait on une copie circulaire ?
User avatar
Henri33
Posts: 59
Joined: Sat Dec 23, 2017 3:43 pm

Re: Problème avec Macro Shake_Sketch

Post by Henri33 »

chrisb wrote: Mon Jan 22, 2018 8:49 am Voilà ton esquisse complètement contrainte.
Il y avait plusieur problème avec:
  • encore des ligne double:
    Bildschirmfoto 2018-01-22 um 09.08.23.png
    Bildschirmfoto 2018-01-22 um 09.00.07.png
  • on n'avait pas besoin des angle
  • un point/ligne/cercle étrange sur une ligne
    Bildschirmfoto 2018-01-22 um 09.26.04.png
.Merci Chrisb, tu me libère d'un gros poids, j'ai cherché et je ne voyais pas d’où pouvais venir la faute et je n'ai pas vu les doubles lignes, il faut dire que je n'ai plus une bonne vue, mais ceci n'explique pas tout. Je dois zoomer beaucoup plus pour mieux voir les détails.
Encore Merci.
User avatar
Henri33
Posts: 59
Joined: Sat Dec 23, 2017 3:43 pm

Re: Problème avec Macro Shake_Sketch

Post by Henri33 »

mario52 wrote: Sun Jan 21, 2018 7:49 pm Bonjour

je viens de tester la macro et elle fonctionne bien

ici avec un sketch ouvert
Macro_ Shake_Sketch00.gif

ici avec un sketch fermé (je ferme le sketch puis je lance la macro)
Macro_ Shake_Sketch01.gif

le code utilisé:

Code: Select all

# -*- coding: utf-8 -*-

# FreeCAD macro to shake a sketch in order to discover its unconstrained parts.
#
# A Gaussian noise is introduced in all sketch points and the sketch is then
# solved.
# Beware that the sketch can look different because some constraints have
# several solutions. In this case, just undo.
#
# This file is released under the MIT License.
# Author: Gaël Ecorchard
# Version:
# - 1.1, 2014-10-31
#     * correct import for Part
# - 1.0, 2014-08, first release.

# Amplitude of the point displacements.
# The standard deviation of the Gaussian noise is the largest sketch dimension
# multiplied by this factor.
displacement_amplitude = 0.1

# End of configuration.

from random import gauss

import FreeCADGui as Gui
from FreeCAD import Base
import Part

# For each sketch geometry type, map a list of points to move.
g_geom_points = {
    Base.Vector: [1],
    Part.Line: [1, 2],  # first point, last point
    Part.Circle: [0, 3],  # curve, center
    Part.ArcOfCircle: [1, 2, 3],  # first point, last point, center
}


class BoundingBox(object):
    xmin = None
    xmax = None
    ymin = None
    ymax = None

    def enlarge_x(self, x):
        if self.xmin is None:
            self.xmin = x
            self.xmax = x
            return
        if self.xmin > x:
            self.xmin = x
            return
        if self.xmax < x:
            self.xmax = x
            return

    def enlarge_y(self, y):
        if self.ymin is None:
            self.ymin = y
            self.ymax = y
            return
        if self.ymin > y:
            self.ymin = y
            return
        if self.ymax < y:
            self.ymax = y
            return

    def enlarge_point(self, point):
        self.enlarge_x(point.x)
        self.enlarge_y(point.y)

    def enlarge_line(self, line):
        self.enlarge_x(line.StartPoint.x)
        self.enlarge_x(line.EndPoint.x)
        self.enlarge_y(line.StartPoint.y)
        self.enlarge_y(line.EndPoint.y)

    def enlarge_circle(self, circle):
        self.enlarge_x(circle.Center.x - circle.Radius)
        self.enlarge_x(circle.Center.x + circle.Radius)
        self.enlarge_y(circle.Center.y - circle.Radius)
        self.enlarge_y(circle.Center.y + circle.Radius)

    def enlarge_arc_of_circle(self, arc):
        # TODO: correctly compute the arc extrema (cf. toShape().BoundBox)
        self.enlarge_x(arc.Center.x)
        self.enlarge_y(arc.Center.y)


def get_sketch_dims(sketch):
    bbox = BoundingBox()
    for geom in sketch.Geometry:
        if isinstance(geom, Base.Vector):
            bbox.enlarge_point(geom)
        elif isinstance(geom, Part.Line):
            bbox.enlarge_line(geom)
        elif isinstance(geom, Part.Circle):
            bbox.enlarge_circle(geom)
        elif isinstance(geom, Part.ArcOfCircle):
            bbox.enlarge_arc_of_circle(geom)
    if (bbox.xmin is not None) and (bbox.ymin is not None):
        return bbox.xmax - bbox.xmin, bbox.ymax - bbox.ymin
    else:
        return 0, 0


def add_noise(point, sigma):
    """Add a Gaussian noise with standard deviation sigma"""
    point.x = gauss(point.x, sigma)
    point.y = gauss(point.y, sigma)


def move_points(sketch, geom_index, sigma):
    point_indexes = g_geom_points[type(sketch.Geometry[i])]
    # Direct access to sketch.Geometry[index] does not work. This would,
    # however prevent repeated recompute.
    for point_index in point_indexes:
        point = sketch.getPoint(geom_index, point_index)
        add_noise(point, sigma)
        sketch.movePoint(geom_index, point_index, point)

view_provider = Gui.activeDocument().getInEdit()

# Don't know how to exit from a macro.
do_move = True
if not view_provider:
    do_move = False

if do_move:
    sketch = view_provider.Object

    if sketch.TypeId != 'Sketcher::SketchObject':
        do_move = False

if do_move:
    sigma = max(get_sketch_dims(sketch)) * displacement_amplitude

    for i in range(len((sketch.Geometry))):
        move_points(sketch, i, sigma) 

pouvez vous mettre votre exemple en ligne pour le tester ?

je vous suggère de créer un bouton pour la facilité d'utilisation Customize_Toolbars

OS: Windows 10
Word size of OS: 64-bit
Word size of FreeCAD: 64-bit
Version: 0.16.6712 (Git)
Build type: Release
Branch: releases/FreeCAD-0-16
Hash: da2d364457257a7a8c6fb2137cea12c45becd71a
Python version: 2.7.8
Qt version: 4.8.7
Coin version: 4.0.0a
OCC version: 6.8.0.oce-0.17


mario
. Je te remercie pour m'avoir envoyé ce code et je comprends bien qu'avec une esquisse comme je l'ai présenté pose des problèmes.
Encore Merci d'avoir répondu .
A plus
User avatar
Henri33
Posts: 59
Joined: Sat Dec 23, 2017 3:43 pm

Re: Problème avec Macro Shake_Sketch

Post by Henri33 »

meme2704 wrote: Mon Jan 22, 2018 8:59 am Ya 1 outil qui permet de faire 1 octogone
ça donne ceci.
Il me semble comprendre que tu cherche à reproduire le volant de vanne de JeanMichel, pour ce je suis d'ac avec Glouglou,c'est plus simple de faire 1/8 puis 1 copie circulaire
.Pour faire une esquisse, j'ai gardé les constructions que l'on était presque obligé de faire sur une planche à dessin pour obtenir un résultat.
Je dois absolument penser que c'est un autre outil et une autre façon de procédé, qui bien sur est beaucoup plus performante à tout point de vue que le dessin sur une planche. Je vais veiller à cela.
chrisb
Veteran
Posts: 54276
Joined: Tue Mar 17, 2015 9:14 am

Re: Problème avec Macro Shake_Sketch

Post by chrisb »

Henri33 wrote: Mon Jan 22, 2018 11:23 am Merci Chrisb, tu me libère d'un gros poids, j'ai cherché et je ne voyais pas d’où pouvais venir la faute et je n'ai pas vu les doubles lignes, il faut dire que je n'ai plus une bonne vue, mais ceci n'explique pas tout. Je dois zoomer beaucoup plus pour mieux voir les détails.
Encore Merci.
De rien. Je suis déja heureux, que tu peux comprendre mon Français :) .
On ne pouvait pas voir ces défaut. Je les ai trouvé quand j'ai refait les contraintes remplaçant les petit cercles. Enfin j'ai supprimé l'interieur complèt de lèsquisse et j'ai n'avait des degrés de liberté. Alors j'ai fait l'enverse et j'ai supprimé le grand cercle avec tout ces lignes de construction. Et enfin j'arrivait.
A Sketcher Lecture with in-depth information is available in English, auf Deutsch, en français, en español.
mario52
Veteran
Posts: 4696
Joined: Wed May 16, 2012 2:13 pm

Re: Problème avec Macro Shake_Sketch

Post by mario52 »

Bonjour
Henri33 wrote:j'ouvre le sketch à contrôler et je lance la Macro, rien ne se passe et puis apparait "Freecad ne repond plus en haut de l'écran.
c'est parce-que la macro travaille, il faut attendre qu'elle finisse
chrisb wrote:Voilà. Shake_Sketch ne fait rien.
oui comme le sketch de Henri33, mais si je bouge un point les lignes du sketch bougent

pour en revenir à la macro elle fonctionne normalement, si l'auteur passe par ici il pourra donner le bon jugement

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.
chrisb
Veteran
Posts: 54276
Joined: Tue Mar 17, 2015 9:14 am

Re: Problème avec Macro Shake_Sketch

Post by chrisb »

mario52 wrote: Mon Jan 22, 2018 12:42 pm c'est parce-que la macro travaille, il faut attendre qu'elle finisse
J'attendais pour une demi heures pour les 4 ligne, j'espère que ça suffit.
Peut-être j'ai fait un erreur:
- Je selectionne le sketch
- j'ouvre le Sketcher
- (je ne selectionne rien)
- j'exécute le macro
A Sketcher Lecture with in-depth information is available in English, auf Deutsch, en français, en español.
Post Reply