Aller au contenu

Boîte API pour SCAD

?
Qualité de la création : 0,0/5 (0 votes)
Évaluation des membres sur l’imprimabilité, l'utilité, les détails, etc.
  • 687 vues
  • 2 téléchargements

Description du modèle 3D

Introduction

Cette chose est juste un script SCAD qui fournit une API pour manipuler des parties de modèles en les plaçant les unes par rapport aux autres.

Lors de l'écriture des modèles SCAD, j'ai découvert que les scripts de résultats ne sont pas lisibles. Même lorsque je les lis moi-même plusieurs jours plus tard, je ne comprends pas ce que j'ai écrit et pourquoi je les ai écrits de cette façon.

La raison principale est que j'utilise beaucoup de valeurs constantes calculées ou mesurées sur des pièces dans la vie réelle et même avec des commentaires en code, c'est difficile à lire. De plus, lorsque je veux faire des modifications, je ne sais pas où les appliquer dans le code.

Cette API simplifie tous mes dessins en me permettant de placer les pièces les unes par rapport aux autres.

Cet objet est conçu à partir de cette bibliothèque : http://www.thingiverse.com/thing:2005142

Comment ça marche

Les bases des boîtes

Chaque partie élémentaire du modèle (cube, cylindre etc...) peut être délimitée par une boîte que vous créez en utilisant l'api boxCreate().

Les faces des boîtes sont toujours alignées avec les axes x, y, z. La boîteCreate api prend juste la taille de la boîte sur [x,y,z] avant toute rotation :

boundingBox = boxCreate ( [1, 1, 1] ) ;

L'objet renvoyé est un tableau sur lequel on peut obtenir des valeurs calculées à l'aide d'index (qui sont tous listés au début ou dans le fichier box.scad).

Par exemple, ces indices renvoient les éléments de taille de la boîte. Lorsque la boîte est créée pour la première fois, ce ne sont que les valeurs que nous avons données :

boundingBox [idx]


boundingBox [idy]


boundingBox [idz]

Les indices suivants renvoient les valeurs de position sur x,y,z du centre de la boîte. Le centre de la boîte est le point que nous déplaçons à l'aide de transformations, il peut se trouver n'importe où dans la boîte. Lorsque la boîte est créée pour la première fois, le centre est le barycentre de tous ses points et il est placé à la coordonnée [0,0,0] :

boundingBox [ix]


boundingBox [iy]


boundingBox [iz]

Les indices suivants renvoient la position x de la face gauche :

boundingBox [ixmin]


boundingBox [ileft]

Les équivalences sont faites de telle sorte que vous êtes l'observateur qui regarde dans la direction de l'axe Y, Z allant en haut et X à droite :

ixmin = ileft


ixmax = iright


iymin = ifront


iymax = iback


izmin = ibottom


izmax = itop

Transformations

La boîte peut être traduite, tournée et redimensionnée.

L'objet contient actuellement deux boîtes : la boîte extérieure que nous venons de voir (coordonnées globales) et la boîte intérieure (coordonnées locales).

Pour accéder aux coordonnées locales, il suffit d'ajouter un "l" dans les index :

ilxmin = illeft


ilxmax = ilright


ilymin = ilfront


ilymax = ilback


ilzmin = ilbottom


ilzmax = iltop

Lorsque la boîte est créée pour la première fois, les coordonnées locales et globales ont les mêmes valeurs. Mais elles diffèrent lorsque vous utilisez des transformations :

  • Lorsque vous traduisez la boîte en utilisant les fonctions boxTranslatexxx ou boxMovexxx, seule la boîte globale est traduite, la boîte locale reste inchangée,

  • Lorsque vous faites pivoter la boîte en utilisant les fonctions "boxRotatexxx", seule la boîte globale est recalculée afin de contenir la partie pivotée de la boîte locale.

  • Lorsque vous redimensionnez la boîte en utilisant les fonctions "boxResizexxx" ou "boxExtrudexxx", la boîte locale est redimensionnée et la boîte globale est recalculée afin de contenir la partie rotative de la boîte locale.

Une autre façon d'expliquer cela est : La boîte globale est la boîte de délimitation de la boîte locale après traduction/rotation.

Rendu

Les API suivantes vous permettent d'obtenir des modules SCAD avec des formes élémentaires délimitées dans une boîte :

  • boxRenderCube(bbox): ce module construit un SCADcube` délimité dans la boîte locale, tourné et traduit,

  • boxRenderCylinderX(bbox)` : ce module construit un "cylindre" SCAD orienté sur l'axe X de la boîte locale, tourné et déplacé,

  • boxRenderCylinderY(bbox)` : ce module construit un "cylindre" SCAD orienté sur l'axe Y de la boîte locale, tourné et déplacé,

  • boxRenderCylinderZ(bbox)` : ce module construit un "cylindre" SCAD orienté sur l'axe Z de la boîte locale, tourné et déplacé,

  • boxRenderConeRight(bbox, sd)` : ce module construit un "cylindre" SCAD orienté sur le X. Le petit diamètre (sd) du cône est placé sur la face droite de la boîte locale,

  • boxRenderConeLeft(bbox, sd)` : ce module construit un "cylindre" SCAD orienté sur le X. Le petit diamètre (sd) du cône est placé sur la face gauche de la boîte locale,

  • boxRenderConeBack(bbox, sd) : ce module construit un cylindre SCAD orienté sur le X. Le petit diamètre (sd) du cône est placé sur la face arrière de la boîte locale,

  • boxRenderConeFront(bbox, sd)` : ce module construit un "cylindre" SCAD orienté sur le X. Le petit diamètre (sd) du cône est placé sur la face avant de la boîte locale,

  • boxRenderConeTop(bbox, sd) : ce module construit un cylindre SCAD orienté sur le X. Le petit diamètre (sd) du cône est placé sur la face supérieure de la boîte locale,

  • boxRenderConeBottom(bbox, sd) : ce module construit un cylindre SCAD orienté sur le X. Le petit diamètre (sd) du cône est placé sur la face inférieure de la boîte locale.

Le diamètre des cylindres et le grand diamètre du cône sont calculés comme la valeur minimale des bords de la base du cylindre/cône.

Notez que l'objet résultant est délimité par la boîte globale.

Exemples

Les images de cette chose sont le résultat des scripts suivants, comme vous pouvez le voir, les seules valeurs scalaires sont les cases initiales délimitant les éléments. Ces boîtes sont ensuite déplacées et pivotées à l'aide de transformations de l'API des boîtes, puis rendues à l'aide de modules de l'API des boîtes (boxRenderxxx).

Exemple 1

Dans cette scène, nous voulons que la mainBox soit centrée à [0,0,0], que le cylindreX soit collé au centre de la face droite de la mainBox, alors que le cylindreY est en fait un cône basé au centre du cylindreX et tourné de 42°.

inclure <box-001.scad>





$fn = 180 ;





mainBoxSize = [8.4, 9.1, 10.5] ;


cylindreXTaille = [8,5, 1,2, 1,2] ;


cylinderYSize = [0,8, 5,4, 0,8] ;


cylinderYRotation = [ 42, 0, 0] ;





mainBox = boxCreate ( mainBoxSize ) ;


cylinderX = boxMoveLeftTo ( boxCreate ( cylinderXSize ), mainBox [ixmax] ) ;


cylindreY = boîteMoveFrontTo (


    boxMoveBottomTo (


        boxMoveLeftTo (


            boxRotate (


                boxCreate ( cylinderYSize )


                (en anglais, cylinderYRotation )


            , cylindreX[ix] )


        (voir aussi le document de travail, cylindreX[iy] )


    , cylinderX[iz]


) ;





couleur ("Blanc")


boxRenderCube ( mainBox ) ;





couleur ("Rouge")


boxRenderCylinderX ( cylinderX ) ;





couleur ("Vert")


boxRenderConeBack ( cylindreY ) ;

Exemple 2

Ce script génère des structures plus complexes avec un code encore simple :

// Test de certains modules


test =


    boxRotate (


        boxMoveTo (


            boxRotate (


                boxCreate ( [2, 10, 20] )


                , [110,30,20]


            )


            , [10, 20, 30]


        )


        , [10,0,0]


    )


;


testResized = boxResize ( test, 1 ) ;


avion = boxCreate ( [0.0001, 10, 10] ) ;


difference() {


    boxRenderCube( testResized ) ;


    boxRenderCube( boxResizeX ( test, 1 ) ) ;


    boxRenderCube( boxResizeY ( test, 1 ) ) ;


    boxRenderCube( boxResizeZ ( test, 1 ) ) ;


}


boxRenderCylinderX ( boxResizeX ( test, 1 ), $fn=100 ) ;


boxRenderCylinderY ( boxResizeY ( test, 1 ), $fn=100 ) ;


boxRenderCylinderZ ( boxResizeZ ( test, 1 ), $fn=100 ) ;


// boxRenderCylinderZ( test ) ;


#translate( [ testResized [ixmax], testResized [iy], testResized [iz] ] )


rotation ( [0,0,0] )


boxRenderCube( avion ) ;


#translate( [ testResized [ixmin], testResized [iy], testResized [iz] ] )


rotation ( [0,0,0] )


boxRenderCube( avion ) ;


#translate( [ testResized [ix], testResized [iymax], testResized [iz] ] )


rotation ( [0,0,90] )


boxRenderCube( avion ) ;


#translate( [ testResized [ix], testResized [iymin], testResized [iz] ] )


rotation ( [0,0,90] )


boxRenderCube( avion ) ;


#translate( [ testResized [ix], testResized [iy], testResized [izmax] ] )


rotation ( [0,90,0] )


boxRenderCube( avion ) ;


  #traduction
 ( [ testResized [ix], testResized [iy], testResized [izmin] ] )


rotate( [0,90,0] ) boxRenderCube( plan ) ;

Informations sur le fichier 3D

  • Format du design 3D : SCAD Détails du dossier Fermer
    • box-001.scad
    • box-sample-001.scad
  • Date de publication : 2021/01/26 à 5h42

License

CC BY

Mots-clefs

Créateur

Page traduite par traduction automatique. Voir la version originale.
Vous rencontrez un souci avec ce design ? Signaler un problème

Meilleures ventes de la catégorie Outils


Ajouter un commentaire


Vous souhaitez soutenir Cults ?

Vous aimez Cults et vous avez envie de nous aider à continuer l’aventure en toute indépendance ? Sachez que nous sommes une petite équipe de 3 personnes et qu’il est donc très simple de nous soutenir pour maintenir l’activité et créer les futurs développements. Voici 4 solutions accessibles à tous :

  • PUBLICITÉ : Désactivez votre bloqueur de publicité AdBlock et cliquez sur nos bannières publicitaires.

  • AFFILIATION : Réalisez vos achats en ligne en cliquant sur nos liens affiliés ici Amazon ou Aliexpress.

  • DON : Si vous voulez, vous avez la possibilité de nous faire un don via PayPal ici.

  • BOUCHE À OREILLE : Invitez vos amis à venir découvrir le site et les magnifiques fichiers 3D partagés par la communauté !