L'Air du Bois est une plateforme Open Source de partage collaboratif ouverte à tous les amoureux du travail du bois. (En savoir plus)

Rejoindre l'Air du Bois Se connecter

lecreole

Sketchup 2022 vers Vitap K2.0

Bonjour à tous.

L'atelier a fait l'acquisition d'un machine numérique, la VITAP K2 2.0.
J'utilise actuellement l'excellent plugin OpenCutList 6.2 pour Sketchup pour la conception et la liste des débits, mais je souhaite allez plus loin, crée les fichiers .tcn pour être utilisable pour les logiciels de la VITAP ( TpaCad, WSCM, etc.. )
Pour l'instant j'ai crée un début de code qui export chaque pièce avec ses dimensions au format
tcn,
Mais je souhaite pourvoir inclure / convertir aussi les perçages et rainures.
Existe-t-il déjà un plugin ou des exemples de codes en Ruby pour extraire ces informations ?
Je débute sur Ruby, mais code déjà en javascript, css, html.

Une aide me serait utile, et je pourrais aussi partager mon expérience.

Merci.

Connectez-vous pour ajouter un commentaire.
?

2 réponses

0
lecreole

Bonjour.

Je me suis pas mal documenté sur OCL et l'Api SketchUp ( en langage Ruby ).
Et ce n'est pas aussi simple que je pensais ( une cinquantaines de lignes de code et c'était bon 😁 )
Mais grâce à l'énorme travail de l'équipe OCL, j'ai un point de départ qui me fera gagner énormément en temps de codage.

Donc, j'ai plusieurs questions :

Est-il possible d'intégrer à OCL une option supplémentaire pour automatiser l'exportation des faces de tous les pièces de la liste de débit ( Actuellement, on doit le faire face par face 😅 ) ?
L'idée serait d'avoir un Object comprenant la liste des pièces, comprenant pour chaque face la liste des tracés, percements qui serait ensuite traitée par un post-processeur.

Ne pas avoir une sortie spécifique un un programme particulier ( pour moi TpaCad ).
Comme cela cet Object pourra être traité par la suite pour divers processeurs de machines CNC.

Pour l'intégration, j'ai commencé à ajouter cette option dans la version 7.0 de développement de OCL, pour faire des essais.

A valider avec les développeurs si c'est une option qui pourra être intégrer par la suite.

Le but serait que OCL puisse ajouter des post-processeurs et l'exécuter avec l'Object en paramètres cité plus haut.

Dites moi si cela peut aussi intéresser d'autres boiseux qui utilise des machines numériques 😜

Boris Beaulant

Cool, je vois que tu as su te débrouiller pour avancer.

C'est une idée intéressante d'avoir cette notion de post-processor personnalisable.

L'idée serait d'avoir un Object comprenant la liste des pièces, comprenant pour chaque face la liste des tracés, percements qui serait ensuite traitée par un post-processeur.

Hmm, l'objet avec toutes les pièces, je sais pas trop. Mais peut-être est-il imaginable de faire comme dans les formules d'export en ruby.

Dans ce cas, ça serait un code personnalisé ruby qui serait appelé par une boucle sur les pièces gérée par OCL...

Il ressemble à quoi ton code qui écrit le TCN ?

lecreole

Il ressemble à quoi ton code qui écrit le TCN ?

Pour l'instant, pour aller plus vite, j'ai crée des modèles de fichier TCN type pour les caissons basics, les perçages et les autres usinages sont déjà fait et configurer en paramétrique dans les fichier ( s'adapte avec les dimensions du panneau )
Example pour un caisson bas :
MBT01_Base.tcn
MBT01_CôtéDroit.tcn
MBT01_CôtéGauche.tcn
MBT01_Raidisseur.tcn
MBT01_Étagère.tcn
Etc..
Dans Sketchup les composants ont le même nom et j'ouvre le fichier corespondant et modifie juste leur dimensions à l'aide de tag :

modified_content = file_content.gsub("#width#", data.length.to_s)
Pour les composants non reconnu, j'utilise le fichier default.tcn.

Tu peux regarder sur mon Github
le fichier ab_design_create.rb et les modèles

Voilà, je suis en peu long à répondre, je travaille de nuit, je suis à l'atelier que l'après midi ( pas assez d'heures dans une journée 😁 )

Boris Beaulant
( Modifié )

Merci pour les liens. Ton code est donc indépendant des exports d’OpenCutList.

lecreole

Pour l'instant oui, j'ai commencé simplement à coder ma propre extension, mais je souhaite allez plus loin, c'est pour cela que OCL est un bon point de départ 😊

Boris Beaulant

Il y a une base d'analyse de la géométrie 2D, c'est certain, mais beaucoup à faire ou à imaginer pour servir le cas général.
Il ne serait pas vraiment intéressant d'ajouter une fonction à OCL qui ne donne des résultats que sur des pièces avec une façon spécifique d'être dessinées.

lecreole
( Modifié )

OK, mais j'essai de comprendre, chaque composant se représente dans une boite englobante qui par définition est un parallélépipède à 6 faces, non ?
La projection de ces 6 faces est commune à toutes les pièces.
Cela m'aidera à comprendre pour la suite de mon projet 😜
Merci.

Boris Beaulant
( Modifié )

Oui, chaque pièce est contenue dans une boîte englobante parallélépipédique.

La projection de ces 6 faces est commune à toutes les pièces.

Le calcul de la projection de chaque face sur cette boîte peut être appliqué sur toutes les pièces, oui.

Mais ne va vraiment donner quelque chose d'exploitable que si la pièce est bien calée sur les axes et que ses faces 6 faces sont elles-même parallèles à celles de la boîte.

Une coupe à 45, par exemple et la projection va "déformer" les usinages qui y sont fait.

lecreole

Coucou.

Besoin d'aide 😜
Dans le fichier part_drawing_helper.rb
Comment définir les autres vues ?

PART_DRAWING_TYPE_2D_RIGHT = ?
PART_DRAWING_TYPE_2D_LEFT = ?
PART_DRAWING_TYPE_2D_FRONT = ?
PART_DRAWING_TYPE_2D_BEHIND = ?

if part_drawing_type == PART_DRAWING_TYPE_2D_BOTTOM
local_x_axis = local_x_axis.reverse
local_z_axis = local_z_axis.reverse
elseif part_drawing_type == PART_DRAWING_TYPE_2D_RIGHT
?
?
[...]
end

Merci d'avance 👍

Boris Beaulant

Regarde les derniers commits sur la branche 7.0. J'avais ajouté les 6 vues suite à nos échanges.

lecreole

Super! 😜, trop cool, c'est exactement ce que je cherchais, encore bravo pour le travail 😁👍

lecreole

Salut, j'ai bien avancé, demain je ferais une petite vidéo 😜

bonne soirée.

Boris Beaulant

Vivement demain !

lecreole

Lien vers vidéo 😜
Video rapide pour montrer l'avance du projet, je commenterais plus tard, là je vais me coucher.😴

Boris Beaulant

Ca semble très prometteur 👍

Et ça semble bien intégré au reste. Hâte de voir le code :)

lecreole

Ca semble très prometteur 👍
Merci 😜

Et ça semble bien intégré au reste. Hâte de voir le code :)

Oui, j'ai au maximum évité de modifier les codes originaux, j'ai dupliqué les workers et modifié pour mon export, ajout d'une fenêtre spécifique pour les paramètres d'export.
Les post-processeurs seront chargés dynamiquement pour éviter de mettre à jour OCL lors d'ajout d'un nouveau post-processeur ou mise à jour.
Je finalise le code, il reste encore pas mal de taf ( màj fichier traduction, enregistrement du preset par défaut, export tracé en SETUP d'usinage, détection des perçage traversant ou borgne etc...
!!! ATTENTION fichiers de développement à utiliser à vos risques !!! sur mon github ladb_opencutlist_2024_07_11.zip et le fichier sketchup testOpen.skp pour le test.
Les post-processeurs "default.rb" et "grbl.rb" ne sont pas fonctionnels pour l'instant 😜
les fichiers ajoutés ont process dans leur noms, et les modifications des fichiers existants fait une recherche sur le mot "Lecreole" les code modifiés sont dessous.
Si ce n'est pas claire, je reste dispo 👍

Boris Beaulant

Merci pour l'archive !
C'est intéressant de voir comment tu t'es débrouillé avec le code.

Sur le long terme, je pense que pour qu'un telle fonctionnalité soit intégrée à la version officielle, il faudrait surement une base (interface et itération sur les pièces) plus générique et une sorte d'API pour y écrire en externe le code qu'on veut pour chaque pièce. Faut que je réfléchisse à ça...

lecreole
( Modifié )

Avec OCL, j'ai gagné beaucoup de temps de développement a mon projet d'origine, je termine le phase de débogage pour avoir une version utilisable.
Cela pourrais faire gagner à l'atelier plus d'une semaine ( avec Sketchup + vms_up pour assemblage + OCL pour liste des débits et export et bien sûr la machine numérique Vitap ) sur des gros projets 😁.
Si par la suite c'est intégré à OCL ce sera un plus je pense pour la communautée.
Pour example sur le projet "banquette" de la vidéo, il a fallut plus de 7h00 pour sortir les plans de chaque pièce et les traduire dans l'application TpaCad, alors que là, une fois que le plan 3D est terminé en quelques secondes les fichiers sont prêt à être envoyer à la machine 😎
Merci pour ton aide 👍

lecreole

Bonjour,
j'ai un petit problème sur l'orientation de certaines faces :

2 des 4 champs sont mal orientés, il y a t-il une solution ?
Merci d'avance.

Boris Beaulant
( Modifié )

Normal, sur les faces dessou, arrière et gauche, j’inverse respectivement l’axe z, y et x pour que la vue soit toujours par rapport au sens de la normale de la face dans un repère direct.

lecreole
( Modifié )

Petite vidéo sur l'avancement de mon projet avec l'export des tracés 🙂

Boris Beaulant : Peut-on détecter les tracés qui sont périphérique à la pièce 😅 ?

Boris Beaulant

👍

Qu'est-ce que tu appelles les tracés extérieurs ?

lecreole

Salut, ce sont les tracés de la face / contre-face qui correspondent au contour de Face ( voir image en rouge )

lecreole

voici une image

Boris Beaulant
( Modifié )

Oui, c'est possible.

L'objet DrawingProjectionDef que tu as après calcul de la projection contient une liste de calques (DrawingProjectionLayerDef) qui contiennent chacun une liste de polygones ou polylines.

Chaque calque correspond à une profondeur d'usinage. Le premier calque est le calque OUTER, c'est le contour.

Attention que ce calque OUTER n'est calculé que si tu actives l'option merge_holes.

lecreole

Merci pour ta réponse, j'utilise déjà les calques pour optimiser le traitement des percements, sinon doublon avec le calque 0 😜, c'est vrai je n'est pas vérifier pour les polygones et polylines.
Je suis enfin en vacances 😁
je vais pouvoir finir d'optimiser le code et le mettre à disposition pour ceux à qui cela intéresse.
je laisse une image des tracés voulus dans mon exemple ( en vert découpe sur l'épaisseur total de la pièce ).
Bon week-end.

Boris Beaulant

Il n'y a pas de doublon sur les calques si tu actives bien le paramètre merge_holes.

(Par contre chaque calque peut contenir plusieurs polygones non superposés. Même OUTER si la pièce est composée de deux volumes disjoints.)

Il y a d'ailleurs un moyen très simple de visualiser ça avec l'outil Exporter une pièce 2D.

Bleu foncé = OUTER
Bleu pâle = une profondeurs non traversante
Violet = HOLES (usinages traversants)

Connectez-vous pour ajouter un commentaire.
0
Boris Beaulant
( Modifié )

Il me semble que TpaCAD accepte l'importation de fichier DXF.

Si c'est bien le cas, tu peux exporter toutes les pièces en DXF avec OpenCutList (en activant bien l'analyse de percements) et les importer dans TpaCAD qui devrait reconnaitre les cercles comme des percements, non ?

Sinon, je ne connais pas de plugins qui fasse des fichiers TCN directement.

Pour ce qui est d'exporter tous les détails d'une pièces en 2D avec du code Ruby, à par t'envoyer vers les sources d'OpenCutList qui combinent une petite centaine de lignes de code en ruby et bien plus dans une lib en C++ pour décomposer la projection 2D, j'ai pas mieux.

Mis à jour
lecreole

Merci pour ta réponse.
Bravo pour l'extension OpenCutList, c'est vraiment génial, rapidité et une interface bien pensé.
J'ai déjà utilisé l'exportation en DXF, mais si je me trompe pas, cela export que la face ou la contre-face et pas les champs ( pour les trous des tourillons ).
Je vais approfondir la doc de OpenCutList et son code, pour ne pas réinventer la roue si cela existe déjà :)

Boris Beaulant

Merci d'apprécier OpenCutList 😊

Oui, en passant par la liste de débit, il n'y a le choix qu'entre face et contre face. Mais si ça a du sens, je peux ajouter les chants. Mais tu aurais besoin des 4 chants dans le même fichier ?

Sinon, en passant par l'outil Exporter, tu peux choisir n'importe quel côté pour l'exporter.

doc : docs.opencutli...art-export-tool

Le truc c'est qu'il faut faire ça pièce à pièce.

Boris Beaulant
( Modifié )

Je vais approfondir la doc de OpenCutList et son code, pour ne pas réinventer la roue si cela existe déjà :)

Sans vouloir te faire peur, le problème n'est pas aussi basique qu'il semble l'être.
Tout d'abord, dans SketchUp, la courbe n'existe pas. Donc, les cercles non plus et donc l'ouverture d'un percement cylindrique est avant tout un polygone. Pour palier à ça, j'ai écrit un code qui tente de détecter les ellipses en recherchant leur équation mathématique à partie de des points du modèle (code) pour les exporter comme de vrais cercles dans le SVG ou DXF. En plus de ça, un autre module combine les différentes profondeurs pour détecter où sont les cavités visibles sous l'angle de la projection 2D.

Tout ça pour dire qu'une simple lecture des faces de la géométrie ne marche que pour les parallélépipèdes rectangles pour les autres formes quelconques, il faut calculer une projection.


Il est fichu comment le format TCN ? Je n'ai pas trouvé de spec sur le net.

lecreole

Voici un Example de fichier TCN : piece_example_200x100x20.tcn
Dans ce fichier une pièce de 200mm x 100mm x 20mm, sur chaque face au centre un perçage de 8mm de diamètre traversant, sur la face 1 un deuxième trou de 8mm, de 10mm de profondeur en X=150mm, Y=50mm.
Ce qui donne dessiné dans SketchUp : fichier à récupérer : piece_example_200x100x20.skp
J'ai un code qui me trouve les trous et les diamètres, mais si la pièce est déplacée ou pris un angle, les coordonnées des trous sont plus bonnes.
En exportant en DXF avec OpenCutList, je n'ai que les trous de la face 1 d'exportés.
Le format DXF me convient aussi, mais s'il est exporté avec toutes les faces :).
Voici un fichier DXF qui ouvert dans TpaCad, on a bien les trous sur plusieurs faces.
Sur le dernier projet, plus de 48 pièces, trop long à exporter face par face.
Merci de prendre le temps pour m'orienté, je continu à parcourir la doc.

Boris Beaulant
( Modifié )

Voici un Example de fichier TCN

Arg, il est pas si "limpide" que ça le format TCN :)

Voici un fichier DXF qui ouvert dans TpaCad [...]

Pour le DXF qui exporte les trous sur toutes les faces, j'avoue que je ne comprends pas bien comment TpaCAD s'y retrouve. Il manque les informations de profondeur ou de hauteur des trous sur les chants, non ? Et où est dessiné la contre-face ?

J'ai un code qui me trouve les trous et les diamètres, mais si la pièce est déplacée ou pris un angle, les coordonnées des trous sont plus bonnes.

Oui au mieux tu as qqch par rapport à l'axe du composant si tu n'as pas de sous groupe dans ton composant.

C'est pour ça que dans OCL, j'ai été obligé d'aller plus loin que la seule lecture des faces et des loops. Dans mon code, il y a un worker qui "aplati" la géométrie selon un repère et un autre qui "calcule" la projection dans le plan XY du précédent repère et un dernier qui dessine cette projection en lignes continues et peut détecter les cercles.

lecreole
( Modifié )

Oui, cela me parait bien compliquer tout ça 😅, Mon approche pour le fichier TCN c'est de créer un fichier modèle et de remplacer par des tags les valeurs à modifier.
exemple :

TPA\ALBATROS\EDICAD\02.00:1665:r0w0s1
::SIDE=0;
::ATTR=hide;varv
::UNm DL={{width}} DH={{heigth}} DS={{depth}}
'tcn version=2.9.20
'code=ansi [...]

SIDE#1{
{{side1}}
}SIDE

pour un trou :

W#81{ ::WTp WS={{count}} #8015=0 #1={{posx}} #2={{posy}} #3={{posz}} #1002={{dia}} #201=1 #203=1 #1001={{borgne}} #9505={{borgne}} }W

Puis je remplace les tags dans le fichier 😁.
C'est simplifié l'example, mais c'est juste que tu as une idée.

Boris Beaulant
( Modifié )

Hmm, ça me semble pas insurmontable à intégré à OCL vue comme ça. Mais en l'état, ça n'exporterait que les trous ronds. Ce qui n'est donc qu'une fraction du problème.

Sinon quelques questions :

  • Est-ce qu'un fichier TCN symbolise qu'une seule pièce ?
  • Est-ce qu'une pièce part forcément d'un parallélépipède rectangle (UNm ...) ? Et n'a donc que 6 "sides" ?
  • A quoi correspond le WS={{count}} pour un trou ?
lecreole
( Modifié )

Est-ce qu'un fichier TCN symbolise qu'une seule pièce ?

Oui

Est-ce qu'une pièce part forcément d'un parallélépipède rectangle (UNm ...) [...]?

Oui, il y a la possibilité de créer des faces fictives, mais au départ c'est bien un parallélépipède à 6 faces.
A savoir, la face 2 ne peut pas être usiner ( au premier passage ), il faut retourner la pièce.

A quoi correspond le WS={{count}} pour un trou ?

C'est juste le numéro d'usinage qui s'incrémente à chaque ajout d'usinage.

Voilà 😁

Pour info, sur OCL, lorsque j'exporte en DXF avec l'option "Lisser les cercles et arcs (Expérimental)", il converti bien en trou de perçage les cercles, sans l'option, il crée un setup pour la fraise.

Boris Beaulant
( Modifié )

sans l'option, il crée un setup pour la fraise.

Lorsque tu actives l'option de lissage des cercles dans OCL, l'export DXF remplacera les polygones par des entités ELLIPSE qui a donc un centre et 2 rayons. Je pense que c'est ce que TpaCAD doit reconnaitre.

A savoir, la face 2 ne peut pas être usiner ( au premier passage ), il faut retourner la pièce.

Mais les usinages sur cette face peuvent être définis quand même ?

Oui, il y a la possibilité de créer des faces fictives

Donc il faut déjà lui faire faire un usinage de coupe pour créer cette face fictive ?


Et sinon, les "cavités" ou "feuillures" seraient définies comment dans le fichier TCN ?

lecreole

Mais les usinages sur cette face peuvent être définis quand même ?

Non, il faut un autre fichier.

Donc il faut déjà lui faire faire un usinage de coupe pour créer cette face fictive ?

C'est cela 👍

Et sinon, les "cavités" ou "feuillures" seraient définies comment dans le fichier TCN ?

Il crée un setup avec fraise qui suit le traçé de la cavité ou feuillure.

Example dans une pièce de 500m x 200mm x 20mm, une rainure de 8.7mm sur la longueur ( 500mm ) au centre de la pièce :

W#89{ ::WTs WS=131 #8015=0 #1=0 #2=100 #3=-10 #201=1 #203=1 #205=1021 #1001=100 #9502=0 #9503=0 #9505=0 #9506=0 #9504=0 #8101=0 #8096=0 #8095=0 #37=0 #40=0 #39=0 #46=0 #8135=0 #8136=0 #38=0 #8180=0 #8181=0 #8185=0 #8186=0 }W
W#2201{ ::WTl #8015=1 #1=500 #42=0 #49=0 }W
W#2201{ ::WTl #8015=1 #2=-0.7 #42=0 #49=0 }W
W#2201{ ::WTl #8015=1 #1=-500 #42=0 #49=0 }W

W#89 - Setup fraisage
#1=0 - position départ en X
#2=100 - position départ en Y
#3=-10 - position départ en Z ( profondeur )
#205=1021 - Id de l'outil ( 1021 - fraise de 8mm, pour ma machine )
W#2201 - points suivants ( en relatif dans l'exemple ).

A mon avis il faut juste prendre en compte que les perçages et les tracés, sinon trop de paramètres à gérer.

L'application du setup au tracé, ce sera fait manuellement.

Après plusieurs projets réalisés, c'est les perçages des trous de tourillons qui demande le plus de travail et surtout puisque que l'on travail pièce par pièce que les trous sont placés à l'identique de la pièce qui la reçois.

Boris Beaulant

Oui du coup, ça peut pas vraiment être intégré officiellement à OCL si c’est incomplet. Et faire complet c’est en effet trop de boulot.

lecreole

Boris Beaulant
Oui, c'est vrai, je souhaite juste m'inspirer de OCL que je trouve excellent 👍.
Dernière petite question, est t-il possible d'une extension personnel de faire appel à des fonctions de OCL.
Par exemple "getAllGenerateComponentsFromOCL()" 😁
Return un object avec leurs dimensions et attributs ?

Boris Beaulant

Non, il n'y a pas vraiment de méthode bien faite pour récupérer les pièces d'OCL. Ca fait pas mal de temps que j'ai l'envie de permettre des extensions à OCL, mais c'est un gros gros boulot et pour l'instant c'est juste au stade de l'idée.

lecreole

Boris Beaulant Merci, je continu à me documenter sur OCL et l'api Sketchup, je verrais quel orientation je prendrais pour arriver à mon objectif.
Je me répète peut-être, mais OCL est une pépite pour les artisans du bois 😜, un gain de temps énorme et je découvre encore des fonctionnalités intéressantes.
à très bientôt 🙂

Connectez-vous pour ajouter un commentaire.
0 coup de coeur
200 vues
2 réponses
0 vote

Publications associées

0 collection

Licence

Licence Creative Commons
Voir aussi
Navigation