TRIC TRAC Pouic Pencil Topper 3D Model Tutorial

Transcrição

TRIC TRAC Pouic Pencil Topper 3D Model Tutorial
TRICTRAC
PouicPencilTopper
3DModelTutorial
Schritt-für-Schritt-AnleitungzumModelliereneinesPouicPencilToppers.
PouicisteinblauerAxolotlunddasMaskottchenvonTricTrac,
demWeb-MagazinüberSpiele.
https://de.trictrac.net/
ZumModellierenbenötigtmandieSoftwareOpenSCAD.Diesekannkostenlos
heruntergeladenwerdenkannundistfürLinux,WindowsundMacOSXverfügbar.
http://www.openscad.org/downloads.html
http://www.openscad.org/documentation.html
DiesesPDF,die.scad-Dateiundauchdie.stl-DateienwurdenaufThingiverse
veröffentlicht.
http://www.thingiverse.com/thing:1624730
VielSpaßbeimnachbauen!–Wilson,06/2016
1 GRUNDFORM
2
2 FÖRMCHEN
3
2.1
2.2
2.3
2.4
3
5
8
11
MUND
AUGEN
HAARE
STIFT-LOCH
3 POUIC
12
4 KORREKTUR
14
5 FRISUR
16
1 Grundform
UnsererstesObjektisteineKugel.DieselässtsichmitderFunktionsphere()im
UrsprungdesKoordinatensystemserzeugen.DerParameterddefiniertden
DurchmesserderKugel.IchhabemichfüreineGrößevon30Millimetern,also3cm
entschieden.MitdemzweitenParameter$fngibtmandieAnzahlderFragmenteanaus
denendieKugelaufgebautseinsoll.JehöherdieAnzahldestorunderdieKugel.
sphere(d=30, $fn=60);
BeigenauererBetrachtungstelltmanallerdingsfest,dassderPouicnichtrundist,
sondernmehrdieFormeinerEllipsehat.AlsoskalierenwirdieKugelmitdemBefehl
scale().DieFunktionerwartetalsParametereinenVektor[x,y,z].Mitdemgebenwir
anaufwelcherKoordinatenachsedieKugelausdehntodergestauchtwird.DerWert1
entsprichthierbei100%.DieAngabe[1,1.2,1]bedeutetalso,dassdieKugelsichaufder
X-undZ-AchsenichtverändernsollundaufderY-Achse120%großseinsoll.D.h.die
BreiteunseresObjektsbeträgtnun36mm.UmdieseTransformationaufunsereKugel
anzuwendenschreibenwirdenSkalierungs-BefehlvordenKugel-Befehl.Wirkönnen
beliebigvieleBefehleaneinanderreihen,ausgewertetwirdimmervonrechtsnachlinks
unddasSemikolonmachtdeutlichwanneineBefehlsketteendet.
scale([1,1.2,1])
sphere(d=30, $fn=60);
2
2 Förmchen
DamithättenwirdieGrundformdesPouicfertig.AllesWeiteresindVertiefungenin
diesemObjekt,diewirerreichenindemwirdieFormenandererObjektevomPouicObjektabziehen.AlsoheißtesFörmchenbauen...
2.1
Mund
WirbeginnenmitderVertiefungfürdenMund.Alsersteserzeugenwirhierfürmitder
Funktioncirle()einenzweidimensionalenKreismiteinemRadiusvon30mm.
circle(r=30);
WaswirabereigentlichbenötigenisteinDreieck.Deshalbgebenwirmitden$fnParameteran,dassderKreisnurausdreiFragmentenbestehensoll.
circle(r=30, $fn=3);
UmausdemzweidimensionalenDreieckeindreidimensionalenKeilzumachen,
benutzenwirdieFunktionlinear_extrude().SieerwartetalsParameterdieHöheder
3
Extrusion.DiegenaueHöhespielthierkeineRolle,derKeilsolltespäternurbreitersein
alsdasPouic-Objekt.
linear_extrude(height=50)
DanachverschiebenwirdasKeil-Objektmitdertranslate()-Funktionim
Koordinatensystem.HierfürübergebenwiralsParametereinenVektor[x,y,z],mitdem
wirdieneuePositiondesObjektsbestimmenkönnen.
translate([-34,0,-25])
ZuguterLetztdrehenwirdasKeil-ObjektnochumdieX-Achseindemwirdierotate()FunktionbenutzenundproAchse[x,y,z]dieGradzahlbestimmen.
rotate([90,0,0])
4
DiesesObjektistnundasErgebnisvonvieraufeinanderfolgendenBefehlen.Damitwir
diesesObjektspäterwiedereinfachaufrufenkönnen,bettenwirdiegesamte
BefehlsketteineineeigeneFunktioneinundgebenihr,nachdemnotwendigen
SchlüsselwortmoduledenNamencreate_mouth().
DieZeilenumbrüchedienennurderbesserenLesbarkeit,dasProgrammwertetdie
BefehlskettevomSemikolonausgehendvonuntennachobenaus,genausoalshätten
wirdieBefehlehintereinandergeschrieben.
module create_mouth() {
rotate([90,0,0])
translate([-34,0,-25])
linear_extrude(height=50)
circle(r=30, $fn=3);
}
2.2
Augen
MitdenVertiefungenfürdieAugenläuftesähnlichwiebeimMund.Wirbeginnenmit
einemAugeundnutzenwiederdieFunktioncirle(),umeinenzweidimensionalenKreis
miteinemRadiusvon2mmzuerzeugen.
circle(r=2, $fn=60);
5
DaderPouicaberkeinerundenKnopfaugenhat,nutzenwirdiescale()-Funktion,um
denKreiszueinerEllipseauszudehnen.MitdemVektor[x,y,z]gebenwiran,dassder
KreissichaufderY-Achseumdaseineinhalbfacheausdehnt.DadurchbeträgtdieBreite
desKreisesnun3mm.
scale([1,1.5,1])
AnschließendnutzenwirdieFunktionlinear_extrude(),umeindreidimensionales
Objektzuerzeugen.MitdemParameterheightgebenwirwiegewohntdieHöheder
Extrusionan(10mmsindausreichend)undmitdemParameterscalekönnenwirdie
obereFlächedesObjektserneutskalieren.DerWert1.5vergrößertdieobereFlächedes
ObjektsumdasEineinhalbfache.DieGrößederunterenFlächebleibtunverändert.
DadurcherhaltenwirkeinegradezylindrischeForm,sonderneineKegel-ähnlicheForm,
diespätereinenschönen,optischenEffekterzielt.
linear_extrude(height=10, scale=1.5)
6
DamitdasAugeanderrichtigenStellesitzt,drehenwiresmitderrotate()-Funktion...
rotate([-25,-25,120])
...undbewegenesmitdertranslate()-Funktion.
translate([-5,-5,10])
7
MitfünfBefehlenhabenwirnuneineFormfürdasrechteAugeerzeugtundplatziert.
DamitwirdiesfürdaslinkeAugenichtwiederholenmüssenspiegelnwirdasObjekt
einfachentlangderY-Achse.HierfüreignetsichdieFunktionmirror().Leiderkopiert
dieStandard-FunktionabernichtdasObjekt,sondernplatziertesnurneu.Dadurch
hättenwirzwareinlinkesAugeaberkeinrechtesmehr.Deshalbnutzenwirstattdessen
eineeigene,generischeFunktion,diediemirror()-Funktionaufruftaberaußerdemauch
dasUrsprungsobjektbeibehält.SobaldwirsieindenCodekopierthaben,könnenwirsie
mitdemNamencopy_mirror()benutzen.
module copy_mirror(vector=[0,1,0]) {
children();
mirror(vector) children();
}
AlsErgebnishabenwirnundieFormenfürdiebeidenAugen.Damitwirdiebeiden
Objektespäterwiedereinfachaufrufenkönnen,bettenwirdiegesamteBefehlskette
erneutineineeigeneFunktioneinundgebenihrdenNamencreate_eyes().
module create_eyes() {
copy_mirror() {
translate([-5,-5,10])
rotate([-25,-25,120])
linear_extrude(height=10, scale=1.5)
scale([1,1.5,1])
circle(r=2, $fn=60);
}
}
2.3
Haare
FürdieHaarebrauchenwirinsgesamtsechsVertiefungen.WirbeginnenmiteinemHaar
underzeugenmitderFunktioncylinder()direkteindreidimensionalesObjekt.Mitdem
ParameterdgebenwirdenDurchmesseran.Dieserist0,5mmgrößeralsdieHaare,die
8
spätereinenDurchmesservon2mmbekommenwerden.Dadurchentstehteinwenig
SpielunddieHaarelassensichspäterleichtereinsetzen.MitdemParameterhgeben
wirdieHöhedesZylindersan.DieHöhespieltfürdieVertiefungeigentlichkeinegroße
Rolleabermansiehtdadurchbesser,obdieHaarespäterrichtigsitzen.
cylinder(d=2.5, h=15, $fn=60);
AnschließendbewegenwirdasObjektmitdertranslate()-Funktion...
translate([0,10,10])
...unddrehenwiresmitderrotate()-Funktion.
rotate([-25,20,0])
9
DiesedreiBefehlewiederholenwirnochzweimal,umzweiweitereHaarezuerzeugen.
LediglichdieWertefürHöhe,BewegungundDrehungunterscheidensicheinwenig.
DamithättenwiralledreiHaarederlinkenSeiteundspiegelndiesemitunserer
copy_mirror()-Funktion,umdieseHaareauchaufderrechtenSeitezuerhalten.
AuchdieseBefehlskettebettenwirwiederineineeigeneFunktioneinundnennensie
create_hairs().
10
module create_hairs() {
copy_mirror() {
rotate([-10,20,0])
translate([0,5,10])
cylinder(d=2.5, h=18, $fn=60);
rotate([-15,20,0])
translate([0,8,10])
cylinder(d=2.5, h=21, $fn=60);
rotate([-25,20,0])
translate([0,10,10])
cylinder(d=2.5, h=15, $fn=60);
}
}
2.4
Stift-Loch
FürdenPouichabenwiralleFormenzusammenabernochkönnenwirihnnichtauf
einenStiftsetzen.WasnochfehltistdasLochfürdenStift.Hierfürnutzenwirwiederdie
cylinder()-Funktion.DiesmalgebenwirabernichteinenDurchmesseran,sondern
zwei.MitdemParameterd1bestimmenwirdenDurchmesserderunterenFlächeund
mitdemParameterd2denDurchmesserderoberenFläche.Dadurchbekommtdas
ObjekteinekonischeFormundmankanndenStiftspäterindieVertiefungschiebenbis
ersteckenbleibt.
cylinder(d1=10, d2=7, h=20, $fn=60);
UmdenZylinderindierichtigePositionzubringen,bewegenwirihninentlangderZAchsemitdertranslate()-Funktion.
translate([0,0,-22])
11
AuchdieseBefehlskettebettenwirwiederineineeigeneFunktioneinundnennensie
create_pencil_hole().
module create_pencil_hole() {
translate([0,0,-22])
cylinder(d1=10, d2=7, h=20, $fn=60);
}
3 Pouic
Nunistesendlichsoweit.WirhabendieGrundformundalleVertiefungs-Objektegebaut
undkönnendieseüberdieFunktionsnamenaufrufen.Alsomachenwirdas.Das
Prozentzeichenvordersphere()-Funktionbewirkt,dassdieGrundformtransparent
angezeigtwird.DadurchkönnenwirbessererkennenwodieVertiefungeninder
Grundformentstehenwerden.
scale([1,1.2,1]) %sphere(d=30, $fn=60);
create_eyes();
create_mouth();
create_hairs();
create_pencil_hole();
12
UmnundieVertiefungeninderGrundformzuerzeugen,nutzenwirdiedifference()Funktion.MitdieserFunktionkannmaneineBoolscheOperationdurchführen,umalle
Objektemiteinanderzukombinieren(KonstruktiveFestkörpergeometrie).Dabeiistdas
ersteObjektdasObjektaufdemdieOperationangewendetwird,d.h.allefolgenden
ObjektewerdenausdemerstenObjektherausgeschnitten.Etvoilà.
difference() {
scale([1,1.2,1])
sphere(d=30, $fn=60);
create_mouth();
create_eyes();
create_hairs();
create_pencil_hole();
}
13
4 Korrektur
BetrachtetmandenPouicvonuntenkannmangutdasLochfürdenStifterkennen.
LeiderstelltmanaberaucheinProblemfest:DasObjekthatuntensogutwiekeine
Grundfläche.DieistabernotwendigwennmandasObjektspätermitdemFDMVerfahrendruckenmöchte.DennwenndasObjektnichtgenugHalthatwirdeswährend
desDrucksvonderDruckplattegerissen.
DamitdiesnichtpassiertvergrößernwirdieGrundflächedesPouic.Hierfürerzeugen
wireinenWürfelmitdercube()-Funktion.DerersteParameterbestimmtdie
KantenlängefürjedeAchse[x,y,z].DerzweiteParametercentergibtan,dassdasObjekt
imUrsprungdesKoordinatensystemserzeugtwerdensoll.
cube([20,20,20], center=true);
DanachbewegenwirdenWürfelmitdertranslate()-Funktion.
translate([0,0,-23])
14
AnschließendbettenwirdiesebeidenBefehleineineeigeneFunktionmitdemNamen
create_stand()einundrufendieseFunktionzusätzlichinunsererdifference()Funktionauf.DadurchwirdaucheinTeildesWürfelsvonunsererGrundform
abgeschnittenundesistausreichendGrundflächefürdenDruckentstanden.
module create_stand() {
translate([0,0,-23])
cube([20,20,20], center=true);
}
difference() {
scale([1,1.2,1])
sphere(d=30, $fn=60);
create_mouth();
create_eyes();
create_hairs();
create_pencil_hole();
create_stand();
}
15
5 Frisur
ZuguterLetztfehlennochdieHaare.WirhattenzwarschonObjektemodelliertabersie
dientennurfürdieVertiefungen.FürdieHaarediespäterindenPouicgestecktwerden
existierteinezweiteDatei.DerCodeistetwasanspruchsvollerundrichtetsichan
diejenigendenendasTutorialbisherzulangweiligwar.
JedeseinzelneHaarkannmittelsdieserBefehlsketteerzeugtwerden:ZweiKugelnund
einZylinder,diemitderunion()-Funktionmiteinanderverschmolzenwerden.
union () {
sphere(d=2, $fn=60);
rotate([90,0,0])
cylinder(d=2, h=15, $fn=60);
translate([0,-15,0])
sphere(d=2, $fn=60);
}
EswürdealsoausreichendieseBefehlskette6xzukopierenundjeweilslediglichdie
WertefürLängeundPositionauszutauschen.DasistlegitimundführtzumErgebnis.
NurleidererzeugtmandamitjedeMengeunleserlichenCode,derzu90%gleichist.
DerartigeRedundanzenversuchtmaninderProgrammierungzuvermeiden.Undman
erreichtdasindemmanmitVariablenundSchleifenarbeitet.
AlsodefinierenwirzweiVariablen,diebeijedemHaarverwendetwerden.DieDicke
desHaarsbeträgtimmer2mmundfürdieLängegebenwireineListemitWertenvon
15bis21mman.
hair_diameter
hair_length
= 2;
= [15, 15, 18, 18, 21, 21];
16
AnschließendersetzenwirdieabsolutenWertemitVariablenaufrufen.
union () {
sphere(d=hair_diameter, $fn=60);
rotate([90,0,0])
cylinder(d=hair_diameter, h=hair_length[i], $fn=60);
translate([0,-hair_length[i],0])
sphere(d=hair_diameter, $fn=60);
}
NunbettenwirunsereBefehlsketteineineFor-Schleife.ImKopfderFor-Schleife
definierenwireineweitereVariableiundlegenfest,dassimitdemWert0beginnt,
nachjedemSchleifendurchlaufum1erhöhtwirdundmaximaldenWert5erreicht.
DadurchwirdunsereBefehlskettefürdasHaar-Objekt6xdurchlaufen.Damitdiesechs
HaarenichtalleaufderselbenStelleerzeugtwerden,rufenwirbeijedemDurchlauf
nochdietranslate()-FunktionaufundverschiebendamitjedesHaarum10mmaufder
X-Achse.
for (i = [0 : 1 : len(hair_length)-1]) {
translate([(i*10)+10,0,0])
union () {
sphere(d=hair_diameter, $fn=60);
rotate([90,0,0])
cylinder(d=hair_diameter, h=hair_length[i], $fn=60);
translate([0,-hair_length[i],0])
sphere(d=hair_diameter, $fn=60);
}
}
17

Documentos relacionados