web-dev-qa-db-fra.com

Module Python pour paramétrique CAD

Je recherche un module CAD pour python. Voici ce que j'ai trouvé, corrigez-moi si je me trompe:

  • PythonCAD :
    • types de fichiers: DWG, DXF, SVG
    • orienté: cliquez dans une fenêtre
    • dernière mise à jour: 2012-06-15
    • documenté: pauvre et sale
  • PythonOCC :
    • types de fichiers: STEP, IGES, STL (import/export)
    • orienté: scripts
    • dernier entretien: 2013-01-12
    • documenté: bon et clair
    • L'installation est une telle douleur
  • Free-CAD (emballage en python)
    • types de fichier: ?
    • orienté: cliquer dans une fenêtre et créer un script python importable à partir de python
    • dernier entretien: jan 2013
    • documenté: très bien

Eh bien, il semble que les liaisons en python pour FreeCad soient les meilleures, mais existe-t-il autre chose?

16
Mermoz

J'ai trouvé que Freecad est la meilleure solution. Les liaisons en python vous permettent de concevoir des pièces de manière complète.

myShape = Part.makeBox(2,2,2)
myShape.translate(Base.Vector(2,0,0))

À partir de géométries simples, vous pouvez utiliser des opérations booléennes:

cylinder1 = Part.makeCylinder(3,10,Base.Vector(0,0,0),Base.Vector(1,0,0))
cylinder2 = Part.makeCylinder(3,10,Base.Vector(5,0,-5),Base.Vector(0,0,1))
common = cylinder1.common(cylinder2)

Le seul point négatif est l’installation avec mac os, je n’ai pas pu le compiler sur snow léopard (car trop de dépendances sur des librairies non gérées).

Mais pythonocc a le même problème et ce que je n’aime pas, c’est la documentation minimale et le synthax qui ressemble trop à opencascade et pas trop pythoniste.

6
Mermoz

occmodel est une petite bibliothèque autonome qui donne un accès de haut niveau au noyau de modélisation OpenCASCADE.

4
Volodimir Kopey

PythonOCC est probablement la plus complète des fonctionnalités. En voici d'autres:

CADDD - utilise PythonOCC, a une interface graphique en Qt.

NURBS - Module Python pour travailler avec NURBS.

lolcad - a l’air très bon mais il n’a pas été mis à jour depuis un certain temps.

Et bien sûr, vous pouvez essayer d’utiliser Blender, qui possède un interpréteur Python intégré et des plugins pour l’architecture et la modélisation de précision (comme this ).

3
Ecir Hana

avoir une vue à Salomé . Le code ressemble à ceci:

import sys
import salome

salome.salome_init()
theStudy = salome.myStudy

import salome_notebook
notebook = salome_notebook.NoteBook(theStudy)
sys.path.insert( 0, r'/tmp')

###
### GEOM component
###

import GEOM
from salome.geom import geomBuilder
import math
import SALOMEDS


geompy = geomBuilder.New(theStudy)

O = geompy.MakeVertex(0, 0, 0)
OX = geompy.MakeVectorDXDYDZ(1, 0, 0)
OY = geompy.MakeVectorDXDYDZ(0, 1, 0)
OZ = geompy.MakeVectorDXDYDZ(0, 0, 1)
Vertex_1 = geompy.MakeVertex(0, 0, 0)
Vertex_2 = geompy.MakeVertex(0, 2, 0)
Vertex_3 = geompy.MakeVertex(2, 2, 0)
Line_1 = geompy.MakeLineTwoPnt(Vertex_2, Vertex_3)
Line_1_vertex_2 = geompy.GetSubShape(Line_1, [2])
Line_1_vertex_3 = geompy.GetSubShape(Line_1, [3])
Curve_1 = geompy.MakeInterpol([Line_1_vertex_2, Line_1_vertex_3, Vertex_1], True, False)
geompy.addToStudy( O, 'O' )
geompy.addToStudy( OX, 'OX' )
geompy.addToStudy( OY, 'OY' )
geompy.addToStudy( OZ, 'OZ' )
geompy.addToStudy( Vertex_1, 'Vertex_1' )
geompy.addToStudy( Vertex_2, 'Vertex_2' )
geompy.addToStudy( Vertex_3, 'Vertex_3' )
geompy.addToStudy( Line_1, 'Line_1' )
geompy.addToStudyInFather( Line_1, Line_1_vertex_2, 'Line_1:vertex_2' )
geompy.addToStudyInFather( Line_1, Line_1_vertex_3, 'Line_1:vertex_3' )
geompy.addToStudy( Curve_1, 'Curve_1' )
2
steller

Pascale est une nouvelle bibliothèque Python de qualité professionnelle pour la CAO paramétrique. La bibliothèque est fournie avec un IDE et un lecteur intégrés. Une version d'évaluation gratuite et limitée, d'une durée de 90 jours, est disponible dans le Cloud. Il existe une très bonne documentation avec plusieurs exemples disponibles.

Voici un exemple de code d'une plaque avec un trou, créé en son centre:

import pascale
import aerion_tools

# Plate creation
length = 1
width = 2
height = .1
plate = pascale.body.Cuboid.from_bounding_box_corners(pascale.Origin, (length, width, height))

# Cylinder creation at plate center
diameter = .5
center_btm = (plate.centroid.x, plate.centroid.y, 0)
center_top = (plate.centroid.x, plate.centroid.y, height)
cylinder = pascale.body.Cylinder.from_centers_radius(center_btm, center_top, diameter / 2)

# Subtract the plate from the cylinder
plate_with_hole = plate - cylinder

# Get a geometric property from the body object and print it
print 'volume: ' + str(plate_with_hole.volume)

aerion_tools.viewer.show(plate_with_hole)

Divulgation complète: je suis développeur pour Pascale.

0
Ammon