J'ai fait ma première macro et elle fonctionne un coup de temps en temps.
Est-ce que c'est normal?
Code: Select all
# -*- coding: utf-8 -*-
import FreeCAD
import Part
import PartGui
from FreeCAD import Base
import Sketcher
import BOPTools.SplitFeatures
import CompoundTools
def maCourbe():
#import FreeCAD
#import Sketcher
### Begin command Sketcher_NewSketch
monDoc.addObject('Sketcher::SketchObject', 'Sketch')
monDoc.Sketch.Placement = App.Placement(App.Vector(0.000000, 0.000000, 0.000000), App.Rotation(0.000000, 0.000000, 0.000000, 1.000000))
monDoc.Sketch.MapMode = "Deactivated"
monDoc.getObject('Sketch').addGeometry(Part.Circle(App.Vector(-9.228558,-0.078137,0),App.Vector(0,0,1),10),True)
monDoc.getObject('Sketch').addConstraint(Sketcher.Constraint('PointOnObject',0,3,-1))
monDoc.getObject('Sketch').addGeometry(Part.Circle(App.Vector(-6.489166,6.165127,0),App.Vector(0,0,1),10),True)
monDoc.getObject('Sketch').addConstraint(Sketcher.Constraint('Weight',0,1.000000))
monDoc.getObject('Sketch').addConstraint(Sketcher.Constraint('Equal',0,1))
monDoc.getObject('Sketch').addGeometry(Part.Circle(App.Vector(6.379598,7.057021,0),App.Vector(0,0,1),10),True)
monDoc.getObject('Sketch').addConstraint(Sketcher.Constraint('Equal',0,2))
monDoc.getObject('Sketch').addGeometry(Part.Circle(App.Vector(20.713623,-0.014430,0),App.Vector(0,0,1),10),True)
monDoc.getObject('Sketch').addConstraint(Sketcher.Constraint('Equal',0,3))
monDoc.getObject('Sketch').addConstraint(Sketcher.Constraint('PointOnObject',3,3,-1))
monDoc.getObject('Sketch').addGeometry(Part.BSplineCurve([App.Vector(-9.22856,-0.0781365),App.Vector(-6.48917,6.16513),App.Vector(6.3796,7.05702),App.Vector(20.7136,-0.01443)],None,None,False,3,None,False),False)
conList = []
conList.append(Sketcher.Constraint('InternalAlignment:Sketcher::BSplineControlPoint',0,3,4,0))
conList.append(Sketcher.Constraint('InternalAlignment:Sketcher::BSplineControlPoint',1,3,4,1))
conList.append(Sketcher.Constraint('InternalAlignment:Sketcher::BSplineControlPoint',2,3,4,2))
conList.append(Sketcher.Constraint('InternalAlignment:Sketcher::BSplineControlPoint',3,3,4,3))
#print(conList)
monDoc.getObject('Sketch').addConstraint(conList)
monDoc.getObject('Sketch').exposeInternalGeometry(4)
App.ActiveDocument.recompute()
monDoc.recompute()
def surfacedeRevolution():
#import FreeCAD
#import Part
#Gui.runCommand('Part_Revolve',0)
monDoc.addObject("Part::Revolution","Surface")
maSurface=monDoc.getObject("Surface")
maSurface.Source = monDoc.Sketch
maSurface.Axis = (1.000000000000000,0.000000000000000,0.000000000000000)
maSurface.Base = (0.000000000000000,0.000000000000000,0.000000000000000)
maSurface.Angle = 360.000000000000000
maSurface.Solid = False
maSurface.AxisLink = None
maSurface.Symmetric = False
FreeCADGui.ActiveDocument.Sketch.Visibility = False
monDoc.recompute()
def mesPlans(position,longueur, largeur,j):
#import FreeCAD
#import Part
#import Part,PartGui
for i in range(j):
toto="Plane"+str(i)
monDoc.addObject("Part::Plane", toto)
#monPlan=monDoc.Plane1
monPlan=monDoc.getObject(toto)
monPlan.Length=longueur
monPlan.Width=largeur
angle = 360/j
monPlan.Placement=App.Placement(App.Vector(position,0.00,0.00),App.Rotation(App.Vector(1.00,0.00,0.00),angle*i))
#monPlan.Label='Plan'
monDoc.recompute()
def slice():
#import BOPTools.SplitFeatures
#Bizarement, le fait de charger l'atelier Part avant BOPTools résoud le problème de chargement de SplitFeatures
Gui.activateWorkbench("PartWorkbench")
f = BOPTools.SplitFeatures.makeSlice(name='Slice')
f.Base = monDoc.Surface
#f.Tools = [monDoc.Plane0, monDoc.Plane1, monDoc.Plane2, monDoc.Plane3, monDoc.Plane4, monDoc.Plane5, monDoc.Plane6, monDoc.Plane7]
f.Tools = monDoc.findObjects("Part::Plane")
f.Mode = 'Split'
f.Proxy.execute(f)
f.purgeTouched()
for obj in f.ViewObject.Proxy.claimChildren():
obj.ViewObject.hide()
#Explode.explodeCompound(...)
CompoundTools.Explode.explodeCompound(f)
f.ViewObject.hide()
monDoc.recompute()
#import Surface
def pseudoPlan():
# Pour l'instant, c'est la seule façon que j'ai trouvée pour récuppérer les bords des bordures.
# Gui.Selection.addSelection('Sans_nom','Slice_child1','Edge1',-4.45208,0.255546,0.786489)
bordures = monDoc.getObjectsByLabel("Exploded Slice")[0].Group
for i in range(len(bordures)):
surf = monDoc.addObject("Surface::GeomFillSurface", "Surface")
surf.BoundaryList = [(bordures[i-1], "Edge1"), (bordures[i], "Edge1")]
#Je ne sais pas comment changer le type de remplissage Stretch, coons, et curved
monDoc.recompute()
def miseAplat():
import FreeCAD
import MeshFlatteningCommand
Gui.Selection.addSelection('Sans_nom','Surface001','Face1',1.50694,4.68611,-1.03005)
Gui.runCommand('MeshPart_CreateFlatFace',0)
#App.ActiveDocument.getObjectsByLabel('Surface001')
#Gui.runCommand('MeshPart_CreateFlatFace',0)
monDoc = FreeCAD.newDocument('Dirigeable')
#monDoc = App.ActiveDocument
#monDoc = FreeCAD.ActiveDocument
maCourbe()
surfacedeRevolution()
#print(monDoc.getObject("Surface"))
#monDoc.
mesPlans(-10,31,5.6,5)
slice()
pseudoPlan()
#monDoc.findObjects("Surface::GeomFillSurface")
Ciola