CAD

openSCAD cylinder

openSCAD cylinder
När jag förberedde den här artikeln ville jag ta reda på vad människor har problem med openSCAD. Till min förvåning var den vanligaste frågan om att skapa en cylinder. Det finns ett cylinderkommando som du först lär dig detaljerna om. Efter det kommer du att se innovativa sätt att skapa cylindrar efter eget tycke. Du kan också ta bort cylindrar från andra delar för att skapa mer intressanta saker. De flesta läsare som kommer hit vill förmodligen se en ihålig cylinder eller ett rör av något slag. Fortsätt läsa, vi har mycket i butiken för dig.

Cylinderkommandot

Om du använder den enklaste versionen av cylinderkommandot behöver du bara en parameter. Detta gör en solid enhetlig cylinder och inget mer. Observera att cylindern har en standardradie och höjden på värdet inom parentes. Kommandot har dock många alternativ, låt oss gräva igenom dem.

cylinder (r1 = 20);
cylinder (r1 = 20, r2 = 5);
cylinder (r1 = 20, h = 40);
cylinder (r = 20, h = 40);
cylinder (r1 = 20, r2 = 5, h = 40, center = true);

De två första cylindrarna i koden ovan ger ingen mening eftersom de inte har någon höjd. Ett vanligt misstag är när du glömmer värdet och det ser inte ut som du tänkt. När du använder variabler händer samma sak om du använder en odefinierad variabel. I detta fall för höjd, men kontrollera konsolloggen när du kör den.

En kon

Den tredje är en kon, anledningen är att r2-värdet har en standardstorlek. Prova den fjärde och se vad som händer. Den sista skapar en kon där du har full kontroll över måtten. Den här är enkel att använda för solida kottar. Du ställer in de två radierna och höjden och du är klar. Du kan också använda diametern om det passar dig bättre.

Center = true-värdet gäller för z-axeln och lämnar konen halvvägs upp från "marken". Standard är falsk, vilket gör att botten av konen hamnar på "marken" så att säga. Du kan också välja hur nära kottens väggar är att vara cirkulära med parametern '$ fn'.

Ihålig cylinder

Vänta lite! Detta skapar bara solida delar, hur borrar jag hål i dem? Du frågar, tack! jag ska berätta för dig. Svaret är helt i skillnad. Kommandot som är. Tänk på koden nedan, den innehåller två cylindrar som omfamnas med lockiga parenteser och skillnadskommandot.

skillnad()
cylinder (r = 30, h = 40);
cylinder (r = 28, h = 41);

Enkelt uttryckt, när du har flera bitar, skär du bort material från den första delen med alla följande bitar. I det här fallet skär du en cylinder ur en cylinder. Om du vill klippa ut någon annan form kan du också göra det. Prova en kub eller en sfär! Observera de intressanta och ibland förödande effekterna som $ fn-värdet kan ha på den här koden.

Ihålig kon

Du kan också göra detta med en kon, använd bara värdena med dubbel radie. Eftersom du definierar båda kottarna har du mycket kontroll över slutresultatet. Den enklaste ihåliga konen är bara två koner inuti varandra med en tjocklek för materialet.

skillnad ()
cylinder (r1 = 30, r2 = 12, h = 50);
cylinder (r1 = 25, r2 = 7, h = 45);

Denna kon är täckt överst, du kan öppna den genom att helt enkelt ställa in den andra höjden högre än den första. Eftersom du har två cylindrar kan du ändra någon av de två. Som ett exempel kan du klippa ett rakt hål genom det genom att byta den andra cylindern. Du kan också välja en kub, men tänk på att detta kan skära för mycket material ur konen.

Pyramid

Detta kan tyckas vara irrelevant men det är ett användbart trick du måste tänka på när du fortsätter att använda openSCAD. Alla cylindrar och andra element är en approximation av en form. Du läste om parametern $ fn tidigare, här utnyttjar du den. Med detta i åtanke kanske du tänker: En pyramid är en kon med fyra sidor. Korrekt! använd $ fn = 4 och du har en kon med fyra sidor, vilket betyder en pyramid.

skillnad ()
cylinder (r1 = 30, r2 = 12, h = 40, $ fn = 4);
cylinder (r1 = 25, r2 = 7, h = 35, $ ​​fn = 4);

Den inre cylindern skär samma cylinder som den yttre. Tills du börjar spela med parametern $ fn. För att bekanta dig med effekterna av denna parameter, försök att göra en fyrbent avföring. Hur påverkar parametern $ fn resultatet? Hur kan du också täcka toppen eller botten?

Kombinera många

För att ha mycket användning av cylindrar bör du lära dig att kombinera många av dem. Det slutliga resultatet kan vara mycket komplext och ibland till och med användbart. Att sätta en topp på din cylinder är ett alternativ. För att göra detta bra måste du börja använda variabler. Gör det till en vana att placera dem högst upp på det du designar. Det gör det lättare att skapa moduler senare.

tjocklek = 5;
baser = 30;
topr = 12;
höjd = 50;
union ()
// Den nedre konen
skillnad ()
cylinder (r1 = baser, r2 = topp, h = höjd);
cylinder (r1 = bas-tjocklek, r2 = topp - tjocklek, h = höjd + tjocklek);

// Den översta bollen
översätt ([0, 0, höjd])
skillnad()
sfär (r = topp);
sfär (r = topr-tjocklek);
översätt ([0, 0, -topr])
kub (storlek = topr * 2, center = true);

Från början har du variabler. De är för tjocklek, basradie, toppradie och höjd. Fackligt uttalande för samman bitarna. Inuti hängslen har du konen och sedan den övre bollen. Eftersom de är inom unionen kommer de att bli en del i slutet. Du kan göra ännu mer när du använder många cylindrar i många vinklar.

Att göra ett provrör

Fortsätt från kottar, gör ett provrör. Först måste du överväga vilka former som gör ett provrör. Huvuddelen är en cylinder, inget snyggt, bara den vanliga skillnaden mellan två cylindrar. Om du ställer in längden som en variabel kan du använda det värdet som referens. Du måste veta var röret slutar och blir halvsfären längst ner. Du kommer också att använda radien för röret för att definiera sfären.

tubr = 20;
tubl = 80;
tjocklek = 2;
skillnad ()
cylinder (r1 = tubr, r2 = tubr, h = tubl);
cylinder (r1 = tubr - thickn, r2 = tubr - thickn, h = tubl);

Prova detta så har du bara en enkel cylinder, för att göra hela röret måste du smälta det tillsammans med halvsfären. Det finns ingen halvsfär i standard openSCAD, du måste göra det. Använd skillnaden mellan två sfärer för att skapa en ihålig sfär och ta sedan bort en annan kub som skär av sfären.

skillnad ()
sfär (tubr);
sfär (tubr - tjocklek);
översätt ([0, 0, -tubr])
kub (storlek = tubr * 2, center = true);

Nu har du två separata bitar. Nästa steg är att sätta ihop dem. Här kan du använda unionskommandot. Liksom skillnadskommandot tar facket alla delar i ordning. I union är ordningen inte lika viktig eftersom den är ett tillägg. Koden kommer att se lite ful ut eftersom vi inte använder moduler här.

union ()
// Huvudrör
skillnad ()
cylinder (r1 = tubr, r2 = tubr, h = tubl);
cylinder (r1 = tubr - thickn, r2 = tubr - thickn, h = tubl);

// Botten sfär
översätt ([0, 0, tubl])
skillnad ()
sfär (tubr);
sfär (tubr - tjocklek);
översätt ([0, 0, -tubr])
kub (storlek = tubr * 2, center = true);


// Toppring
skillnad ()
cylinder (r = tubr + tjocklek, h = tjocklek);
cylinder (r = tubr, h = thickn);

Här designar vi det upp och ner, det är upp till dig. Gör det som är lämpligt för det aktuella fallet. Du kan alltid rotera den när du använder den. Den övre ringen har skarpa kanter, du kan åtgärda detta genom att använda en cirkel och rotera_ekstrudera den. Det finns andra sätt att göra det, utforska och experimentera!

rotate_extrude (konvexitet = 10, $ fn = 100)
översätt ([tubr, 0, 0])
cirkel (r = tjocklek, $ fn = 100);

Kombinera många cylindrar

När du väl har gjort ett rör av flera cylindrar kanske du också vill ansluta dem på olika sätt. För att göra detta kan du använda en union igen. Låt oss säga att du vill ha ett rör i fyrtiofem graders vinkel mot det andra röret. För att göra detta placerar du det vinklade röret halvvägs upp i det stora röret.

union ()
rör (50, 4, 300);
översätt ([0, 0, totlängd / 2]) rotera ([45, 0, 0])
rör (50, 4, 150);

När du provar det ser det bra ut från utsidan. När du tittar inåt ser du att du har båda hela rören. Den korta blockerar flödet i det långa röret. För att åtgärda detta måste du radera båda cylindrarna inuti rören. Du kan överväga hela facket i ett stycke och placera motsvarande cylindrar efter det i en skillnad.

skillnad ()
union ()
rör (50, 4, 300);
översätt ([0, 0, totlängd / 2]) rotera ([45, 0, 0])
rör (50, 4, 150);


cylinder (r = 50 - 4, h = totallängd);
översätt ([0, 0, totlängd / 2]) rotera ([45, 0, 0])
cylinder (r = 50 - 4, h = totallängd / 2);

Som du ser sträcker den första cylindern hela rörets längd. Detta kommer att radera allt inuti det stora röret men det lilla röret som lutar måste också raderas. Translate-kommandot flyttar röret upp halvvägs, det roterar sedan och placerar cylindern inuti röret. Faktum är att koden kopieras uppifrån och röret byts ut mot en cylinder.

VVS

Om du vill göra fler rör kan du använda modulen i exemplet ovan och börja expandera. Koden finns tillgänglig på https: // github.com / matstage / openSCAD-cylindrar.git, I skrivande stund finns det bara dessa två men kom tillbaka ofta för att se mer. Du kanske kan skapa mer spännande saker.

Inuti ett kvarter

Om du siktar på att skapa en förbränningsmotor behöver du ett cylindriskt hål i en solid bit. Nedan följer ett exempel, det enklaste möjliga, för kylkanaler och kolvar finns det mycket mer att lägga till. Det är dock för en annan dag.

modulcylinderblock (
cylinderR = 3,
Edge = 1,
numCylinders = 8)

skillnad ()
kub ([cylinderR * 2 + Edge * 2,
cylinderR * 2 * numCylinders + Edge * numCylinders + Edge, 10]);
för (x = [0: 1: numCylinders-1])
översätt ([cylinderR + Edge, cylinderR * x * 2 + Edge * x + cylinderR + Edge, 0])
cylinder (r = cylinderR, h = 12);

Här har du en kub som växer efter antalet cylindrar du vill ha inuti blocket. Alla värden i modulen är standard så att du kan använda den utan värden. För att använda den, använd 'använd uttalande högst upp i filen och lägg sedan till cylinderblock (numCylinders = 8). Du kan använda eller utelämna valfritt värde, när du utelämnar dem tar det standard. Kort sagt, insidan av modulen börjar med värdena och skapar sedan en kub som är tillräckligt lång för att passa cylindrarna. Det fortsätter sedan genom att ta bort cylindrarna med en för uttalande. Tack vare för uttalandet kan du skapa ett större eller mindre block. För mer avancerade moduler kan du sätta begränsningar för att ändra design när vissa värden uppnås. Kanske vill du göra det till ett V om det är 8 eller fler cylindrar.

Extruderar från en platt form

Ett annat sätt att skapa en cylinder är att skapa en cirkel och pressa ut den. En solid cylinder är bara två rader:

linear_extrude (15)
cirkel (20);

Detta skapar en 15 (inga enheter i openSCAD) lång, med en radie på 20. Du kan använda diametern med parametern d. Att bara skapa en cylinder är inte särskilt användbart men du kan använda samma teknik för alla 2D-former. Du kommer att se detta senare. Medan en ihålig cylinder är koden lite längre.

linjär_ekstrudering (15)
skillnad ()
cirkel (20);
cirkel (18);

Det här är detsamma, men som vi har gjort tidigare tar du bort mittcirkeln. Du kan också böja den i en cirkel med rotate_extrude-versionen. Det här är bra för att göra munkar, den enklaste versionen ser ut som en.

rotate_extrude (vinkel = 180, konvexitet = 10)
översätt ([30,0,0])
skillnad ()
cirkel (20);
cirkel (10);

Den här koden skapar en halvcirkel som är ihålig. En anmärkning som du bör vara försiktig med är att översättningen är nödvändig eller att du får ett fel: ”FEL: alla punkter för rotatextrude () måste ha samma X-koordinattecken (intervall är -2.09 -> 20.00) ”. Siffrorna beror på värdet i cirkeln. Eftersom detta skapar samma form som en cylinder kan det verka värdelöst. Det är det inte! Den bästa användningen av detta kommando är att göra platt form på något sätt funktionell. Handboken har en enkel polygon som ett exempel, den skapar en rund form där du kan köra ett bälte. Du kan också vrida det runt. Koden nedan skapar en korkskruv.

översätt ([- 80,0,0])
linear_extrude (80, twist = 900, scale = 2.0, skivor = 100)
översätt ([2, 0, 0])
kvadrat (10);

Exemplet i handboken visar en polygon som kan vara användbar. Koden nedan kan vara vad du vill men illustrerar kraften att göra det på detta sätt.

översätt ([0, -80, 0])
rotera_extrude (vinkel = 275)
översätt ([12,3,2])
polygon (poäng = [[0,0], [20,17], [34,12], [25,22], [20, 30]]);

Du kan experimentera med polygonens form tills du får det rätt för din applikation. Om det känns lite skrämmande med bara siffror kan du skapa profilen i andra CAD-program och importera dxf-resultatet med kommandot import ().

Slutsats

Att skapa en cylinder är enkelt men bara början på processen. Den knepiga delen är att göra något användbart med det. Du måste också integrera den i din design och kanske skapa mer komplexa problem än cylindrar. Hitta sätt och utmaningar för din pågående kunskapsutvidgning med openSCAD. Kom ihåg att använda dokumentationen och luta dig till annan programvara när det inte enkelt kan uppnås med siffror och sådant. Något som inte omfattas av det här inlägget är att du kan rita saker i Inkscape och Blender och importera det till openSCAD. Exportera från openSCAD till stl och andra format stöds väl och om du är riktigt nyfiken, kolla in skapelserna på Thingiverse. De har en bunt entusiaster som bidrar med saker till sin webbplats.

Användbara verktyg för Linux-spelare
Om du gillar att spela spel på Linux är chansen att du kan ha använt appar och verktyg som Wine, Lutris och OBS Studio för att förbättra spelupplevels...
HD Remastered Games för Linux som aldrig tidigare hade en Linux-version
Många spelutvecklare och utgivare kommer med HD-remaster av gamla spel för att förlänga livstiden för franchisen, snälla fans som begär kompatibilitet...
Hur man använder AutoKey för att automatisera Linux-spel
AutoKey är ett verktyg för desktopautomatisering för Linux och X11, programmerat i Python 3, GTK och Qt. Med hjälp av dess skript och MACRO-funktional...