314 lines
14 KiB
HTML
314 lines
14 KiB
HTML
<html><head><title>Macro Arch Axis System Repartition/fr</title><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><link type='text/css' href='wiki.css' rel='stylesheet'></head><body><h1>Macro Arch Axis System Repartition/fr</h1></div>
|
|
|
|
<div id="mw-content-text" lang="fr" dir="ltr" class="mw-content-ltr"><hr/><div class="mw-parser-output"><table class="fcinfobox wikitable ct" width="100%" style="float: right; width: 230px; margin-left: 10px;">
|
|
<tr>
|
|
<td class="ctTitle">
|
|
<h3><span class="mw-headline" id="Arch_Axis_System_Repartition"><a href="https://www.freecadweb.org/wiki/index.php?title=File:Text-x-python.png" class="image"><img alt="Text-x-python.png" src="32px-Text-x-python.png" width="32" height="32" srcset="/wiki/images/2/2c/Text-x-python.png 1.5x" /></a> Arch Axis System Repartition</span></h3>
|
|
</td></tr>
|
|
<tr>
|
|
<th class="ctOdd">Description
|
|
</th></tr>
|
|
<tr>
|
|
<td class="ctEven left">Créer un système d'axes le long d'une ligne.
|
|
</td></tr>
|
|
<tr>
|
|
<th class="ctOdd">Auteur
|
|
</th></tr>
|
|
<tr>
|
|
<td class="ctEven"><a href="https://www.freecadweb.org/wiki/index.php?title=User:Rockn" title="User:Rockn">rockn</a>
|
|
</td></tr>
|
|
<tr>
|
|
<th class="ctOdd">Liens
|
|
</th></tr>
|
|
<tr>
|
|
<td class="ctEven"><a href="https://www.freecadweb.org/wiki/index.php?title=Macros_recipes/fr" title="Macros recipes/fr">Recettes macros</a><br /><a href="https://www.freecadweb.org/wiki/index.php?title=How_to_install_macros/fr" title="How to install macros/fr">Comment installer une macro</a><br /><a href="https://www.freecadweb.org/wiki/index.php?title=Customize_Toolbars/fr" title="Customize Toolbars/fr">Comment ajouter une barre d'outils</a>
|
|
</td></tr>
|
|
<tr>
|
|
<th class="ctOdd">Version
|
|
</th></tr>
|
|
<tr>
|
|
<td class="ctEven macro-version">1.0
|
|
</td></tr>
|
|
<tr>
|
|
<th class="ctOdd">Date dernière modification
|
|
</th></tr>
|
|
<tr>
|
|
<td class="ctEven macro-date">2014-12-22
|
|
</td></tr>
|
|
<tr>
|
|
<th class="ctOdd">
|
|
</th></tr>
|
|
<tr>
|
|
<td class="ctToc"><br /><div id="toc" class="toc"><div class="toctitle"><h2>Contents</h2></div>
|
|
<ul>
|
|
<li class="toclevel-1"><a href="#Arch_Axis_System_Repartition"><span class="tocnumber">1</span> <span class="toctext">Arch Axis System Repartition</span></a></li>
|
|
<li class="toclevel-1 tocsection-1"><a href="#Description"><span class="tocnumber">2</span> <span class="toctext">Description</span></a></li>
|
|
<li class="toclevel-1 tocsection-2"><a href="#Utilisation"><span class="tocnumber">3</span> <span class="toctext">Utilisation</span></a></li>
|
|
<li class="toclevel-1 tocsection-3"><a href="#Script"><span class="tocnumber">4</span> <span class="toctext">Script</span></a></li>
|
|
<li class="toclevel-1 tocsection-4"><a href="#Liens"><span class="tocnumber">5</span> <span class="toctext">Liens</span></a></li>
|
|
</ul>
|
|
</div>
|
|
|
|
</td></tr>
|
|
</table><a href="https://www.freecadweb.org/wiki/index.php?title=File:ArchAxisSystemRepartition.png" class="image" title="ArchAxisSystemRepartition"><img alt="ArchAxisSystemRepartition" src="480px-ArchAxisSystemRepartition.png" width="480" height="320" srcset="/wiki/images/8/87/ArchAxisSystemRepartition.png 1.5x" /></a>
|
|
<div style="clear:both"></div>
|
|
<p><br />
|
|
</p>
|
|
<h3><span class="mw-headline" id="Description">Description</span></h3>
|
|
<p>Voici une macro qui va vous aider dans la création d'un système d'axes de l'atelier Architecture. Pour rappel, l'outil Système d'Axes de l'atelier Architecture permet de créer une répartition où chaque espacement est paramétrable. On peut ensuite l'associer à un objet FreeCAD afin de le répartir.
|
|
</p>
|
|
<h3><span class="mw-headline" id="Utilisation">Utilisation</span></h3>
|
|
<ul><li> Lancer la macro avec ou sans ligne selectionnée.</li>
|
|
<li> Une fenêtre s'ouvre dans l'onglet tâches.</li>
|
|
<li> Régler la longueur : si une ligne est sélectionnée, la longueur est définie est forcée par la longueur de la ligne ; si rien n'est sélectionné la longueur peut être ajustée.</li>
|
|
<li> Régler la longueur de l'écartement régulier de la répartition.</li>
|
|
<li> Ou régler le nombre d'espacement souhaité ; L'écartement régulier est automatiquement recalculé.</li>
|
|
<li> Choisir si vous souhaitez que l'espace restant soit placé au début ou à la fin de la répartition ou de chaque coté.</li>
|
|
<li>Cocher la case si vous souhaitez une pièce au début de la répartition et régler un éventuel décalage.</li>
|
|
<li> Cocher la case si vous souhaitez une pièce à la fin de la répartition et régler un éventuel décalage.</li>
|
|
<li> Pour valider cliquer sur le bouton Ok.</li>
|
|
<li> Si une ligne est sélectionnée le système d'axes aura le même placemeent sinon le système est placé à l'origine du modèle.</li>
|
|
<li> Si la Librairie FreeCAD est ouverte le fichier sélectionné sera la base du système structurel créé avec le système d'axes. </li></ul>
|
|
<h3><span class="mw-headline" id="Script">Script</span></h3>
|
|
<p>Repartition.FCMacro
|
|
</p>
|
|
<pre>#!/usr/bin/env python
|
|
# -*- coding: utf-8 -*-
|
|
|
|
#***************************************************************************
|
|
#* *
|
|
#* Copyright (c) 2014 Jonathan Wiedemann <wood.galaxy@gmail.com *
|
|
#* *
|
|
#* This program is free software; you can redistribute it and/or modify *
|
|
#* it under the terms of the GNU Lesser General Public License (LGPL) *
|
|
#* as published by the Free Software Foundation; either version 2 of *
|
|
#* the License, or (at your option) any later version. *
|
|
#* for detail see the LICENCE text file. *
|
|
#* *
|
|
#* This program is distributed in the hope that it will be useful, *
|
|
#* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
|
#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
|
#* GNU Library General Public License for more details. *
|
|
#* *
|
|
#* You should have received a copy of the GNU Library General Public *
|
|
#* License along with this program; if not, write to the Free Software *
|
|
#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
|
|
#* USA *
|
|
#* *
|
|
#***************************************************************************
|
|
|
|
__title__="Repartition"
|
|
__author__ = "Jonathan Wiedemann"
|
|
__url__ = "http://www.freecad-france.com"
|
|
|
|
import FreeCAD, FreeCADGui, DraftGeomUtils, DraftVecUtils
|
|
import Arch
|
|
import Part
|
|
import math
|
|
from PySide import QtCore, QtGui
|
|
|
|
class _RepartitionTaskPanel:
|
|
def __init__(self):
|
|
self.title = QtGui.QLabel('Repartition')
|
|
self.grid = QtGui.QGridLayout()
|
|
self.grid.addWidget(self.title, 1, 0)
|
|
|
|
self.longueurLabel = QtGui.QLabel('Longueur')
|
|
|
|
self.dSBLongueur = QtGui.QDoubleSpinBox()
|
|
self.dSBLongueur.setRange(0., 9999999.)
|
|
self.sel = FreeCADGui.Selection.getSelection()
|
|
if self.sel:
|
|
self.longueur = self.sel[0].Shape.Length
|
|
self.dSBLongueur.setValue(self.longueur)
|
|
else:
|
|
self.dSBLongueur.setValue(5000.)
|
|
|
|
self.grid.addWidget(self.longueurLabel, 2, 0)
|
|
self.grid.addWidget(self.dSBLongueur, 2, 1)
|
|
|
|
self.ecartementLabel = QtGui.QLabel('Ecartement')
|
|
self.ecartementDSB = QtGui.QDoubleSpinBox()
|
|
self.ecartementDSB.setRange(0., 9999999.)
|
|
self.ecartementDSB.setValue(500.)
|
|
self.grid.addWidget(self.ecartementLabel, 3, 0)
|
|
self.grid.addWidget(self.ecartementDSB, 3, 1)
|
|
|
|
self.qteLabel = QtGui.QLabel('Quantite')
|
|
self.qteSB = QtGui.QSpinBox()
|
|
self.qteSB.setRange(0,99999)
|
|
self.grid.addWidget(self.qteLabel, 4, 0)
|
|
self.grid.addWidget(self.qteSB, 4, 1)
|
|
|
|
self.infoText = QtGui.QLabel('Espace restant = ')
|
|
self.grid.addWidget(self.infoText, 5, 0)
|
|
self.combobox = QtGui.QComboBox()
|
|
items = ["Debut","Fin","Divise"]
|
|
self.combobox.addItems(items)
|
|
self.combobox.setCurrentIndex(items.index("Fin"))
|
|
self.grid.addWidget(self.combobox, 5, 1)
|
|
|
|
self.debutLabel = QtGui.QLabel('Debut')
|
|
self.grid.addWidget(self.debutLabel, 6, 0)
|
|
|
|
self.debutRepartitionCB = QtGui.QCheckBox()
|
|
self.debutRepartitionCB.setCheckState(QtCore.Qt.CheckState.Checked)
|
|
self.grid.addWidget(self.debutRepartitionCB, 6, 1)
|
|
|
|
self.decalageDebutLabel = QtGui.QLabel('Decalage')
|
|
self.grid.addWidget(self.decalageDebutLabel, 7, 0)
|
|
|
|
self.decalageDebutDSB = QtGui.QDoubleSpinBox()
|
|
self.decalageDebutDSB.setRange(0., 9999999.)
|
|
self.grid.addWidget(self.decalageDebutDSB, 7, 1)
|
|
|
|
self.finLabel = QtGui.QLabel('Fin')
|
|
self.grid.addWidget(self.finLabel, 8, 0)
|
|
|
|
self.finRepartitionCB = QtGui.QCheckBox()
|
|
self.finRepartitionCB.setCheckState(QtCore.Qt.CheckState.Checked)
|
|
self.grid.addWidget(self.finRepartitionCB, 8, 1)
|
|
|
|
self.decalageFinLabel = QtGui.QLabel('Decalage')
|
|
self.grid.addWidget(self.decalageFinLabel, 9, 0)
|
|
|
|
self.decalageFinDSB = QtGui.QDoubleSpinBox()
|
|
self.decalageFinDSB.setRange(0., 9999999.)
|
|
self.grid.addWidget(self.decalageFinDSB, 9, 1)
|
|
|
|
groupBox = QtGui.QGroupBox()
|
|
groupBox.setLayout(self.grid)
|
|
self.form = groupBox
|
|
|
|
QtCore.QObject.connect(self.dSBLongueur,QtCore.SIGNAL("valueChanged(double)"),self.changerLongueur)
|
|
QtCore.QObject.connect(self.ecartementDSB,QtCore.SIGNAL("valueChanged(double)"),self.changerEcartement)
|
|
QtCore.QObject.connect(self.qteSB,QtCore.SIGNAL("valueChanged(int)"),self.changerQte)
|
|
QtCore.QObject.connect(self.combobox,QtCore.SIGNAL("currentIndexChanged(int)"),self.afficherResultats)
|
|
self.changerLongueur()
|
|
|
|
def recupererDonnees(self):
|
|
self.sel = FreeCADGui.Selection.getSelection()
|
|
if self.sel:
|
|
self.longueur = self.sel[0].Shape.Length
|
|
else:
|
|
self.longueur = self.dSBLongueur.value()
|
|
self.ecartementRegulier = self.ecartementDSB.value()
|
|
self.qteEcartement = self.qteSB.value()
|
|
|
|
self.objetDebut = self.debutRepartitionCB.isChecked()
|
|
self.decalageDebut = self.decalageDebutDSB.value()
|
|
self.plEspaceRestant = self.combobox.currentIndex()
|
|
self.objetFin = self.finRepartitionCB.isChecked()
|
|
self.decalageFin = self.decalageFinDSB.value()
|
|
|
|
def changerLongueur(self):
|
|
self.recupererDonnees()
|
|
self.qteEcartement = int(math.ceil(self.longueur/self.ecartementRegulier))
|
|
self.afficherResultats()
|
|
|
|
def changerEcartement(self):
|
|
self.recupererDonnees()
|
|
self.qteEcartement = int(math.ceil(self.longueur/self.ecartementRegulier))
|
|
self.afficherResultats()
|
|
|
|
def changerQte(self):
|
|
self.recupererDonnees()
|
|
self.ecartementRegulier = self.longueur/self.qteEcartement
|
|
self.afficherResultats()
|
|
|
|
def afficherResultats(self):
|
|
self.dSBLongueur.blockSignals(True)
|
|
self.dSBLongueur.setValue(self.longueur)
|
|
self.dSBLongueur.blockSignals(False)
|
|
|
|
self.ecartementDSB.blockSignals(True)
|
|
self.ecartementDSB.setValue(self.ecartementRegulier)
|
|
self.ecartementDSB.blockSignals(False)
|
|
|
|
|
|
self.qteSB.blockSignals(True)
|
|
self.qteSB.setValue(self.qteEcartement)
|
|
self.qteSB.blockSignals(False)
|
|
|
|
self.espaceRestant = self.longueur - (self.qteEcartement-1) * self.ecartementRegulier
|
|
if round(self.espaceRestant,2) == round(self.ecartementRegulier,2):
|
|
self.espaceRestant = 0.
|
|
if self.combobox.currentIndex() == 2:
|
|
self.infoText.setText( str('Espace restant = 2 x ') + str(round(self.espaceRestant/2,2)) + str(' mm') )
|
|
else:
|
|
self.infoText.setText( str('Espace restant = ') + str(round(self.espaceRestant,2)) + str(' mm') )
|
|
|
|
def accept(self):
|
|
self.recupererDonnees()
|
|
distancesListe = []
|
|
if self.objetDebut:
|
|
distancesListe.append(self.decalageDebut)
|
|
if self.plEspaceRestant == 0:
|
|
distancesListe.append(self.espaceRestant)
|
|
if self.plEspaceRestant == 1:
|
|
distancesListe.append(self.ecartementRegulier-self.decalageDebut)
|
|
if self.plEspaceRestant == 2:
|
|
distancesListe.append(self.espaceRestant/2-self.decalageDebut)
|
|
for i in range(self.qteEcartement-2):
|
|
distancesListe.append(self.ecartementRegulier)
|
|
if self.objetFin:
|
|
if self.plEspaceRestant == 0:
|
|
distancesListe.append(self.ecartementRegulier-self.decalageFin-self.decalageDebut)
|
|
if self.plEspaceRestant == 1:
|
|
distancesListe.append(self.espaceRestant-self.decalageFin)
|
|
if self.plEspaceRestant == 2:
|
|
distancesListe.append(self.ecartementRegulier)
|
|
distancesListe.append((self.espaceRestant/2)-self.decalageFin)
|
|
repartition = Arch.makeAxis(num=len(distancesListe), name="Repartition")
|
|
repartition.Length = 1000.00
|
|
repartition.Distances= distancesListe
|
|
|
|
self.sel = FreeCADGui.Selection.getSelection()
|
|
if self.sel:
|
|
edges = DraftGeomUtils.sortEdges(self.sel[0].Shape.Wires[0].Edges)
|
|
vec1 = edges[0].Vertexes[-1].Point.sub(edges[0].Vertexes[0].Point)
|
|
point1 = edges[0].Vertexes[0].Point
|
|
rot = math.degrees(DraftVecUtils.angle(vec1))*-1
|
|
repartition.Placement = App.Placement(App.Vector(point1),App.Rotation(App.Vector(0.0,0.0,1.0),rot))
|
|
FreeCAD.ActiveDocument.recompute()
|
|
else:
|
|
repartition.Placement = App.Placement(App.Vector(0.0,0.0,0.0),App.Rotation(App.Vector(0.0,0.0,1.0),0))
|
|
|
|
m = FreeCADGui.getMainWindow()
|
|
w = m.findChild(QtGui.QDockWidget,"PartsLibrary")
|
|
if w:
|
|
if w.isVisible():
|
|
index = w.folder_view.selectedIndexes()[0]
|
|
path = w.dirmodel.filePath(index)
|
|
if path.lower().endswith(".stp") or path.lower().endswith(".step") or path.lower().endswith(".brep"):
|
|
objetRepartit = Part.show(Part.read(path))
|
|
else:
|
|
objetRepartit = FreeCADGui.ActiveDocument.mergeProject(path)
|
|
repartitionStructurel = Arch.makeStructuralSystem([FreeCAD.ActiveDocument.Objects[-1],],[repartition,], name="RepartitionStructurelle")
|
|
return True
|
|
|
|
def reject(self):
|
|
return True
|
|
|
|
def getStandardButtons(self):
|
|
return int(QtGui.QDialogButtonBox.Ok </pre>
|
|
<h3><span class="mw-headline" id="Liens">Liens</span></h3>
|
|
<ul><li>Vidéo <a rel="nofollow" class="external text" href="https://www.youtube.com/watch?v=jfDTkH9-I5Q">Macro en action</a></li>
|
|
<li><a href="Macro_PartsLibrary.html" title="Macro PartsLibrary">Macro_PartsLibrary</a> Librairie FreeCAD </li>
|
|
<li>Github <a rel="nofollow" class="external text" href="https://github.com/wood-galaxy/FreeCAD-scripts">Macro wood galaxy</a></li></ul>
|
|
<div style="clear:both"></div>
|
|
</div>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
</div><div class="printfooter">
|
|
Online version: "<a dir="ltr" href="https://www.freecadweb.org/wiki/index.php?title=Macro_Arch_Axis_System_Repartition/fr&oldid=241048">http://www.freecadweb.org/wiki/index.php?title=Macro_Arch_Axis_System_Repartition/fr&oldid=241048</a>"</div>
|
|
<div id="catlinks" class="catlinks" data-mw="interface"></div><div class="visualClear"></div>
|
|
</div>
|
|
</div>
|
|
<div id="mw-navigation">
|
|
<h2>Navigation menu</h2>
|
|
|
|
</body></html> |