CAD

openSCAD-cilinder

openSCAD-cilinder
Bij het opstellen van dit artikel wilde ik weten welke mensen problemen hebben met openSCAD. Tot mijn verbazing ging de meest gestelde vraag over het maken van een cilinder. Er is een cilinderopdracht waarover u eerst de details zult leren. Daarna zult u innovatieve manieren zien om cilinders naar uw wens te maken. Je kunt ook cilinders van andere stukken weghalen om interessantere dingen te maken. De meeste lezers, die hier komen, willen waarschijnlijk een holle cilinder of een soort buis zien. Blijf lezen, we hebben veel voor je in petto.

Het cilindercommando

Als je de eenvoudigste versie van het cilindercommando gebruikt, heb je maar één parameter nodig. Dit maakt één solide uniforme cilinder en niets meer. Houd er rekening mee dat die cilinder een standaardstraal heeft en de hoogte van de waarde tussen haakjes. De opdracht heeft echter veel opties, laten we ze doornemen.

cilinder ( r1 = 20 );
cilinder( r1 = 20, r2 = 5);
cilinder( r1 = 20, h = 40);
cilinder( r = 20, h = 40);
cilinder( r1 = 20, r2 = 5, h = 40, centrum = waar);

De eerste twee cilinders in de bovenstaande code slaan nergens op omdat ze geen hoogte hebben. Een veelgemaakte fout is wanneer u de waarde vergeet en het er niet uitziet zoals u het bedoeld had. Wanneer u variabelen gebruikt, gebeurt hetzelfde als u een ongedefinieerde variabele gebruikt. In dit geval voor hoogte, maar controleer het consolelogboek wanneer u het uitvoert.

Een ijshoorntje

De derde is een kegel, de reden is dat de r2-waarde een standaardgrootte heeft. Probeer de vierde en kijk wat er gebeurt. De laatste creëert een kegel waar je volledige controle hebt over de afmetingen. Deze is eenvoudig te gebruiken voor massieve kegels. Je stelt de twee stralen en de hoogte in en je bent klaar. Je kunt ook de diameter gebruiken als dat beter bij je past.

De middelste = werkelijke waarde is geldig voor de z-as, waarbij de kegel halverwege de "grond" blijft. Standaard is onwaar, waardoor de onderkant van de kegel als het ware op de "grond" terechtkomt. Je kunt ook kiezen hoe dicht de kegelwanden bij cirkelvormig zijn met de '$fn'-parameter.

Holle cilinder

Hé, wacht even! Hierdoor ontstaan ​​alleen stevige stukken, hoe boor ik daar gaten in?? Je vraagt, dank je! ik zal het je vertellen. Het antwoord zit 'm in het verschil. Het commando dat is. Overweeg de onderstaande code, deze bevat twee cilinders die zijn omarmd met accolades en het verschilcommando.

verschil()
cilinder (r = 30, h = 40);
cilinder (r = 28, h = 41);

Simpel gezegd, als je meerdere stukken hebt, dan knip je materiaal weg van het eerste stuk met behulp van alle volgende stukken. In dit geval knip je een cilinder uit een cilinder. Als je een andere vorm wilt uitknippen, kan dat ook. Probeer een kubus of een bol! Let op de interessante en soms verwoestende effecten die de $fn-waarde op deze code kan hebben.

holle kegel Con

Je kunt dit ook doen met een kegel, gebruik gewoon de dubbele radiuswaarden. Omdat je beide kegels definieert, heb je veel controle over het eindresultaat. De eenvoudigste holle kegel is slechts twee kegels in elkaar met een dikte voor het materiaal.

verschil()
cilinder( r1 = 30, r2 = 12, h = 50);
cilinder( r1 = 25, r2 = 7, h = 45);

Deze kegel is aan de bovenkant bedekt, je kunt hem openen door simpelweg de tweede hoogte hoger in te stellen dan de eerste. Omdat je twee cilinders hebt, kun je elk van de twee veranderen. U kunt er bijvoorbeeld een recht gat doorheen snijden door de tweede cilinder te verwisselen. Je kunt ook een kubus kiezen, maar houd er rekening mee dat dit te veel materiaal uit de kegel kan snijden.

Piramide

Dit lijkt misschien irrelevant, maar het is een handige truc die je in gedachten moet houden als je doorgaat met het gebruik van openSCAD. Alle cilinders en andere elementen zijn een benadering van een vorm. Je hebt eerder over de $fn-parameter gelezen, hier profiteer je van. Met dit in gedachten denk je misschien: een piramide is een kegel met vier zijden. Correct! gebruik $fn = 4 en je hebt een kegel met vier zijden, wat een piramide betekent.

verschil()
cilinder(r1 = 30, r2 = 12, h = 40, $fn = 4);
cilinder(r1 = 25, r2 = 7, h = 35, $fn = 4);

De binnenste cilinder snijdt dezelfde cilinder als de buitenste. Totdat je begint te spelen met de $fn-parameter. Probeer een vierpotige kruk te maken om vertrouwd te raken met de effecten van deze parameter. Hoe beïnvloedt de $fn-parameter het resultaat?? Ook, hoe kun je de boven- of onderkant bedekken??

Veel combineren

Om veel gebruik te maken van cilinders, moet je leren hoe je er veel kunt combineren. Het eindresultaat kan zeer complex en soms zelfs nuttig zijn. Een top op je cilinder zetten is een optie. Om dit goed te doen, moet je variabelen gaan gebruiken. Maak er een gewoonte van om ze bovenaan te plaatsen bij wat je aan het ontwerpen bent. Het maakt het later gemakkelijker om modules te maken.

dik = 5;
basis = 30;
boven = 12;
hoogte = 50;
unie()
// De onderste kegel
verschil()
cilinder (r1 = basis, r2 = topr, h = hoogte);
cylinder(r1 = baser-thickn, r2 = topr - thickn, h = hoogte + thickn);

// De bovenste bal
vertalen([0, 0, hoogte])
verschil()
bol(r = topr);
bol(r = topr -dik);
vertalen([0, 0, -topr])
kubus (grootte = topr*2, midden = waar);

Vanaf de top heb je variabelen. Ze zijn voor de dikte, basisradius, topradius en hoogte. De vakbondsverklaring brengt de stukken samen. Binnen de beugels heb je de kegel en dan de bovenste bal. Omdat ze zich in de unie bevinden, zullen ze aan het eind één geheel worden. Je kunt nog meer doen als je veel cilinders in veel hoeken gebruikt.

Een reageerbuis maken

Ga verder van kegels, maak een reageerbuis. Eerst moet je bedenken welke vormen een reageerbuis maken. Het belangrijkste onderdeel is een cilinder, niets bijzonders, alleen het normale verschil tussen twee cilinders. Als u de lengte als variabele instelt, kunt u die waarde als referentie gebruiken. Je moet weten waar de buis eindigt en onderaan de halve bol wordt. Je zult ook de straal voor de buis gebruiken om de bol te definiëren.

tubr = 20;
tubl = 80;
dik = 2;
verschil()
cilinder(r1 = tubr, r2 = tubr, h = tubl);
cilinder(r1 = tubr - dik, r2 = tubr - dik, h = tubl);

Probeer dit en je hebt slechts een eenvoudige cilinder, om de hele buis te maken, moet je hem samen met de halve bol smelten. Er is geen halve bol in de standaard openSCAD, je moet het maken. Gebruik het verschil tussen twee bollen om een ​​holle bol te maken en verwijder vervolgens een andere kubus die de bol afsnijdt.

verschil()
bol(tub);
bol(tubr - thickn);
vertalen([0, 0, -tubr])
kubus (grootte=tubr*2, midden = waar);

Nu heb je twee aparte stukken. De volgende stap is om ze samen te voegen. Hier kunt u het union-commando gebruiken. Net als het verschilcommando, neemt de vakbond alle stukjes op volgorde. In unie is de volgorde niet zo belangrijk omdat het een toevoeging is. De code ziet er een beetje lelijk uit omdat we hier geen modules gebruiken.

unie()
// Hoofdbuis
verschil()
cilinder(r1 = tubr, r2 = tubr, h = tubl);
cilinder(r1 = tubr - dik, r2 = tubr - dik, h = tubl);

// Bodembol
vertalen([0, 0, tubl])
verschil()
bol(tub);
bol(tubr - thickn);
vertalen([0, 0, -tubr])
kubus (grootte=tubr*2, midden = waar);


// Bovenring
verschil()
cilinder(r = tubr + dik, h = dik);
cilinder(r = tubr, h = dik);

Hier ontwerpen we het ondersteboven, dit is aan jou. Doen wat handig is voor het specifieke geval. Je kunt hem altijd draaien als je hem gebruikt. De bovenste ring heeft scherpe randen, dit kun je verhelpen door een cirkel te gebruiken en deze te roteren_extruderen. Er zijn andere manieren om het te doen, te verkennen en te experimenteren!

roteer_extrude(convexiteit = 10, $fn = 100)
vertalen([tubr, 0, 0])
cirkel (r = dik, $ fn = 100);

Combineren van veel cilinders

Als je eenmaal een buis hebt gemaakt van meerdere cilinders, wil je ze misschien ook op verschillende manieren met elkaar verbinden. Om dit te doen, kunt u opnieuw een vakbond gebruiken. Laten we zeggen dat je een buis wilt in een hoek van vijfenveertig graden met de andere buis. Hiervoor plaats je de schuine buis halverwege de grote buis.

unie()
buis (50, 4, 300);
vertalen([0, 0, totlengte/2]) roteren([45, 0, 0])
buis (50, 4, 150);

Als je dit probeert, ziet het er van buiten geweldig uit. Als je naar binnen kijkt, zie je dat je beide hele buizen hebt. De korte blokkeert de stroom in de lange buis. Om dit te verhelpen, moet u beide cilinders in de buizen wissen. Je kunt de hele unie als één stuk beschouwen en de bijbehorende cilinders erna in een verschil plaatsen.

verschil()
unie()
buis (50, 4, 300);
vertalen([0, 0, totlengte/2]) roteren([45, 0, 0])
buis (50, 4, 150);


cilinder(r = 50 - 4, h = totlengte);
vertalen([0, 0, totlengte/2]) roteren([45, 0, 0])
cilinder(r = 50 - 4, h = totlengte/2);

Zoals je kunt zien, strekt de eerste cilinder zich uit over de hele lengte van de buis. Hiermee wordt alles in de grote buis gewist, maar de kleine buis die overhelt, moet ook worden gewist. Het vertaalcommando beweegt de buis tot halverwege omhoog, draait dan en plaatst de cilinder in de buis. In feite wordt de code van bovenaf gekopieerd en wordt de buis vervangen door een cilinder.

Loodgieter

Als je meer buizen wilt maken, kun je de module in het bovenstaande voorbeeld gebruiken en beginnen met uitbreiden. De code is beschikbaar op https://github.com/matstage/openSCAD-Cilinders.git, Op het moment van schrijven zijn er alleen deze twee, maar kom regelmatig terug om meer te zien. Misschien kun je nog meer spannende dingen maken.

Binnen een blok

Als je een verbrandingsmotor wilt maken, heb je een cilindrisch gat in een massief stuk nodig. Hieronder is een voorbeeld, zo eenvoudig mogelijk, voor koelkanalen en pistons is er nog veel meer toe te voegen. Dat is voor een andere dag hoor.

module cilinderblok(
cilinderR = 3,
Rand = 1,
aantalCilinders = 8)

verschil()
kubus ([cylinderR*2 + Edge * 2,
cylinderR*2*numCylinders+Edge*numCylinders + Edge,10]);
for(x = [0:1:aantalCilinders-1])
vertalen([cylinderR + Edge, cylinderR*x*2+Edge*x+ cylinderR+Edge,0])
cilinder(r = cilinderR, h = 12);

Hier heb je een kubus die groeit volgens het aantal cilinders dat je in het blok wilt hebben. Alle waarden in de module zijn de standaard, zodat u deze zonder waarden kunt gebruiken. Om het te gebruiken, gebruik de 'use' ' statement bovenaan je bestand en voeg dan cylinderblock(numCylinders = 8) toe. U kunt elke waarde gebruiken of weglaten, als u ze weglaat, wordt de standaardwaarde gebruikt. Kortom, de binnenkant van de module begint met de waarden en creëert vervolgens een kubus die lang genoeg is om in de cilinders te passen. Het gaat dan verder door de cilinders te verwijderen met een for-statement. Dankzij het for-statement kun je een groter of kleiner blok maken. Voor meer geavanceerde modules kunt u beperkingen opleggen die het ontwerp wijzigen wanneer bepaalde waarden zijn bereikt. Misschien wil je er een V van maken als het 8 of meer cilinders zijn.

Extruderen vanuit een platte vorm

Een andere manier om een ​​cilinder te maken, is door een cirkel te maken en deze te extruderen. Een massieve cilinder bestaat uit slechts twee regels:

linear_extrude(15)
cirkel (20);

Dit creëert een 15 (geen eenheden in openSCAD) lang, met een straal van 20. U kunt de diameter gebruiken met behulp van de parameter d. Alleen een cilinder maken is niet erg handig, maar je kunt dezelfde techniek gebruiken voor elke 2D-vorm. Dit zie je later. Terwijl het een holle cilinder is, is de code iets langer.

linear_extrude(15)
verschil()
cirkel (20);
cirkel (18);

Dit is hetzelfde, maar zoals we eerder hebben gedaan, verwijder je de middencirkel. Je kunt het ook in een cirkel buigen met de versie roteren_extruderen. Dit is geweldig voor het maken van donuts, de eenvoudigste versie ziet er zo uit.

roteren_extruderen (hoek =180, convexiteit =10)
vertalen([30,0,0])
verschil()
cirkel (20);
cirkel (10);

Deze code creëert een halve cirkel die hol is. Een opmerking waar je voorzichtig mee moet zijn, is dat de vertaling nodig is, anders krijg je een foutmelding: "ERROR: alle punten voor roterenextrude() moeten hetzelfde X-coördinaatteken hebben (bereik is -2.09 -> 20.00)”. De cijfers zijn afhankelijk van de waarde in de cirkel. Aangezien dit dezelfde vorm als een cilinder creëert, lijkt het misschien nutteloos. Het is niet! Het beste gebruik van deze opdracht is om de platte vorm op de een of andere manier functioneel te maken. De handleiding heeft als voorbeeld een eenvoudige polygoon, het creëert een ronde vorm waar je een riem kunt laten lopen. Je kunt het ook omdraaien. De onderstaande code maakt een kurkentrekker.

vertalen([-80,0,0])
linear_extrude(80, twist = 900, schaal = 2.0, plakjes = 100)
vertalen([2, 0, 0])
vierkant (10);

Het voorbeeld in de handleiding toont een veelhoek die nuttig kan zijn. De onderstaande code kan van alles zijn, maar illustreert de kracht om het op deze manier te doen.

vertalen([0, -80, 0])
roteren_extruderen (hoek = 275)
vertalen([12,3,2])
polygoon(punten = [[0,0], [20,17], [34,12], [25,22], [20, 30]]);

U kunt experimenteren met de vorm van de polygoon totdat u het voor uw toepassing goed vindt. Als het een beetje ontmoedigend aanvoelt om alleen cijfers te gebruiken, kunt u het profiel in andere CAD-programma's maken en het dxf-resultaat importeren met de opdracht import().

Conclusie

Een cilinder maken is eenvoudig, maar slechts het begin van het proces. Het lastige is om er iets nuttigs mee te maken. Je moet het ook in je ontwerp opnemen en misschien complexere problemen creëren dan cilinders. Vind manieren en uitdagingen voor uw voortdurende uitbreiding van kennis met behulp van openSCAD. Vergeet niet om de documentatie te gebruiken en op andere software te leunen wanneer dit niet gemakkelijk kan worden bereikt met cijfers en dergelijke. Iets dat niet in dit bericht wordt behandeld, is dat je dingen kunt tekenen in Inkscape en Blender en het kunt importeren in openSCAD. Exporteren van openSCAD naar stl en andere formaten wordt goed ondersteund en als je echt nieuwsgierig bent, bekijk dan de creaties op Thingiverse. Ze hebben een stel enthousiastelingen die dingen bijdragen aan hun site.

Installeer de nieuwste Dolphin Emulator voor Gamecube & Wii op Linux
Met de Dolphin Emulator kun je de door jou gekozen Gamecube- en Wii-spellen spelen op Linux Personal Computers (pc). Omdat het een vrij beschikbare e...
Hoe de GameConqueror Cheat Engine in Linux te gebruiken
Het artikel bevat een handleiding over het gebruik van de GameConqueror cheat-engine in Linux. Veel gebruikers die games op Windows spelen, gebruiken ...
Beste gameconsole-emulators voor Linux
Dit artikel bevat een lijst van populaire emulatiesoftware voor gameconsoles die beschikbaar is voor Linux. Emulatie is een softwarecompatibiliteitsla...