Sites


CampOSV

Utilisation de PyOSV

Installation

La façon la plus simple d'utiliser pyOSV pour l'instant est d'utiliser des notebooks empaqueté sous forme d'image Docker.

Docker est un utilitaire permettant de déployer simplement des projets web.

Sur un ordinateur doté d'une distribution linux récente (par Exemple Ubuntu 16.04, Debian 8 ou 9) disposant de 20Go d'espace libre :

  • installer Docker (community edition)

En fonction de la distribution Linux utilisée:
https://docs.docker.com/install/linux/docker-ce/ubuntu/
https://docs.docker.com/install/linux/docker-ce/debian/
https://docs.docker.com/install/linux/docker-ce/centos/
https://docs.docker.com/install/linux/docker-ce/fedora/

 

  • clôner pyosv-binderhub

$ git clone https://github.com/osv-team/pyosv-binderhub

 

  • Installer l’image pyosv

$ cd pyosv-binderhub
$ ./install_pyosv.sh

Attendre plusieurs heures ..... la construction de l’image compile PythonOCC et d’autres projets, en
plus du téléchargement d’une image de base assez lourde.

  • Test de fonctionnement

$ /start_pyosv.sh


prompt Docker container > cd /home/jovyan
prompt Docker container > jupyter notebook
Copier l’url affichée en résultat de la commande jupyter notebook dans un navigateur
Exécuter un notebook ( /home/jovyan/work/notebooks ) et vérifier que tout se passe sans erreur (les
warnings de deprecation sont normaux).

Un exemple de notebook

Un des notebooks donné en exemple pour le campOSV est une plaque avec 4 vis nommé "plate_with_screws"

Après avoir importé les dépendances, on crée une plaque avec 4 trous à l'aide de l'exécution du script python "plate_with_holes.py" :

# coding: utf-8

r"""Flat plate with holes Python creation script"""

from __future__ import division

from ccad.model import prism, filling, ngon, cylinder, translated, box

units = 'mm'

e = 5
l = 20
w = 30

hole_d = 2

hole_positions = ((l/4, -w/4), (l/4, w/4), (-l/4, -w/4), (-l/4, w/4))

plate = translated(box(l, w, e), (-l /2, -w/2, 0))

cylinders = list()

for (x, y) in hole_positions:
    cylinders.append(translated(cylinder(hole_d / 2., e), (x, y, 0)))

for c in cylinders:
    plate -= c
part = plate

anchors = dict()
for i, (x, y) in enumerate(hole_positions, 1):
    anchors[str(i)] = {"position": (x, y, e),
                  "direction": (0., 0., -1.),
                  "dimension": hole_d,
                  "description": "%s mm hole" % hole_d}

Voici le résultat obtenu dans le notebook :

On crée ensuite 4 vis à partir de library_part. Ce programme permet de créer des pièces standards comme les vis avec leurs ancres qui permettront ensuite de les placer par rapport à la plaque.

Le code qui permet d'obtenir une liste contenant 4 vis est le suivant :

screws = [PartGeometryNode.from_library_part(
    library_file_path="libraries/ISO4014_library.json",
    part_id="ISO4014_M2_grade_Bx21") for _ in range(4)]

L'ancre est représenté dans la figure suivante par la flèche jaune.

 

On crée ensuite un noeud "assemblage" avec la plaque comme origine. 
A = AssemblyGeometryNode(root=plate_gn)
On ajoute à cet assemblage chacune des 4 vis en précisant l'ancre à laquelle elle doit s'attacher. 
for i, screw in enumerate(screws, 1):
    A.add_edge(plate_gn,
               screw,
               object=ConstraintAnchor(anchor_name_master=str(i),
                                       anchor_name_slave=1,
                                       distance=0,
                                       angle=0))

Il n'y a plus qu'à construire l'objet :

A.build()

Quelques instructions sont encore nécessaire pour créer le rendu graphique. On obtient ainsi l'assemblage suivant ainsi que le graphe affiché en bas de la capture d'écran.

 

 On retrouve les 5 pièces composants l'assemblage, chacune des quatre vis étant lié à la plaque.

Il y a une erreur de communication avec le serveur Booktype. Nous ne savons pas actuellement où est le problème.

Vous devriez rafraîchir la page.