projecto em openscad

Upload: manuel-pereira

Post on 13-Oct-2015

27 views

Category:

Documents


0 download

TRANSCRIPT

  • 5/23/2018 Projecto Em Openscad

    1/19

    / / os parmetros dos pneus:

    larguraRoda = 5; / / A largura (ou a espessura) da roda na jante.diametroTransversalPneu = 4; / / Dimetro transversal (CS) - Qual a espessura daborracha de pneu?diametroInternoPneu = 93; / / Dimetro interno (ID) - Qual a largura a abertura para dentro?excertoPneu = 1,01; / / Porcentagem estiramento circunferencial (geral

    mente 1 + 0-5%, por exemplo, 1,02) - Como

    / / propriedades Rim

    alturaAro = 10; / / A altura da poro de aro da roda.buracosSincronizados = 20; / / O nmero de orifcios de temporizaara esculpir no arotempoSincronizacaoBuraco = [1,0.5,3]; / / A [dentro, meio fora] preenchimento para os buracos sincronismodirecional = true; / / A codificador direcional torna dois conjuntos de slots, 90 graus fora de fase

    / / Parmetros Tread:

    estiloPiso = "v-grooves"; / / nenhum, cruz, o-rings, v-grooves, praas, esferas, cylindersX, / / CylindersY, cylindersZ, pontos, caa-nqueis,x, zigX, vtamanhoArco = [90,1.5,1]; / / O tamanho de cada boto [em frente da roda,ao longo do permetro, prodruding] / / Ou para v-grooves, [ngulo, profundidade, ignorado]conjuntoPisoRadial = 15; / / Quantos conjuntos de passos para tornar em torno da roda (2 linhas por conjunto).

    numeroArcos = 4; / / O nmero de botes para processar por linha.distanciaEscalonada = 2; / / A distncia para compensar as linhas escalonadas.espessuraLinha = 1; / / A espessura da linha para estilos "desenhados", como "x" e "zigX"numMaxPneus = 3; / / Para o-rings/v-grooves, o nmero mximo de pneus por rodaespacoEntrePneus = 2; / / Para o-rings/v-grooves, o espao entre cadapneu, se mais de um

    / / Parmetros relacionados com a Interveno de

    estiloRaio = "retngulo"; / / Nenhum, risco biolgico, crculo, circlefit, diam

    te, linha, retngulo, espiral, preencherinsercaoRaio = [0,0]; / / A [exterior interior,] insero da rea de raio aartir da superfcienumRaios = 7; / / Nmero de "raios". Defina esta opo para trs, sc estiver fazendo o design de risco biolgicolarguraRaio = 3; / / Este o quo grande cada raio.proporo = [1.5,1.0]; / / Proporo de borda, proporo de larguracurvatura = 0,66; / / Para "espiral", assim que os raios so curvey.> 0, mas

  • 5/23/2018 Projecto Em Openscad

    2/19

    reverter = false; / / Para "espiral", definindo-o como "true" inverte o sentido das espiraisdiametroExternoFuro = 13; / / Para "circlefit", o dimetro dos furos exteriores, ou zero para nenhumconcavidade = [0,0]; / / Concavidade distncia da rea falou por [dentro,fora] da roda

    / / Parmetros Hub:

    incluirEixo = false; / / Coloque false para remover o hub e incluem apenas o buraco dimetro do eixo.

    diametroEixo = 15; / / O dimetro da poro do ncleo da rodaalturaEixo = 12; / / A altura total do cuboposicaoZEixo = 0; / / A posio Z do cubo, os nmeros negativos a partda superfcie da rodadiametroCirculoInterno = 30; / / O dimetro do crculo interno slido sob o hub, zero para nenhum.

    baseRaioFaixa = 2; / / O raio do filete (parte arredondada) entre ocubo ea roda.superiorRaioFaixa = 2; / / O raio do filete (parte arredondada), na parte superior do cubo.apenasChanfre = false; / / Definir para true para usar chanfros (retas ngulos de 45 graus) em vez de filetes.

    //parametros de acessorios

    diametroVeioMotor = 22; / / O dimetro do veio do motordiametroPlanoVeioMotor = 3; / / O dimetro do veio do motor, no plano, ou shaftDiameter para no plana.

    numParafusosFixacao = 1; / / O nmero de parafusos de fixao / porcas para rderizar, uniformemente espaados em torno do eixodiametroParafuso = 3; / / O dimetro do parafuso de ajuste. 3 o padro pa um parafuso M3.porcaParafuso = [5,4, 2,3]; / / Tamanho [indiameter, espessura] do porca set

    . A profundidade definida automaticamente.diametroPorcaParafuso = 5,4; / / O "dimetro" da porca em cativeiro, de plano aplano (o "in-" de dimetro)espessuraPorca = 2,3; / / A espessura da porca cativodeslocamentoPorca = 0; / / A distncia de deslocamento da porca a partirdo centro do material. - / + = In / out

    diametroRosca = 0; / / O dimetro dos furos servo brao hounting, ou zero se nenhum buracodistanciaEntreRoscas1 = 25; / / Distncia atravs servo chifre de buraco em buraco (0 a ignorar)distanciaEntreRoscas2 = 21; / / Distncia atravs servo chifre de buraco em buraco, rotao de 90 graus (0 a ignorar)

    rotacaoTotalRoscas = 45; / / A rotao total de todos os furos de servotamanhoBracoRoscas = [4,1.6]; / / Tamanho [indiameter, profundidade] de servobrao porca cativo, ou 0 (nenhum) para nenhum.

    tamanhoPorca = [12.5,5.5]; / / Tamanho [indiameter, profundidade] de uma porca em cativeiro, ou 0 (nenhum) para nenhum.

    / / Parmetros de qualidade:

  • 5/23/2018 Projecto Em Openscad

    3/19

    $ Fn = 50; / / Qualidade padro para a maioria das partes docrculo.

    // Algum geometria bsica pneu

    diametroInterior = diametroInternoPneu;diametroCentro = diametroInternoPneu + diametroTransversalPneu;outroDiametro = diametroInternoPneu + ( diametroTransversalPneu *2 );circunferenciaInterior = diametroInterior*PI;circunferenciaCentro = diametroCentro*PI;

    outraCircunferencia = outroDiametro*PI;

    / / Geometria pneu esticadacircunferenciaExcertoCentro = circunfereiaCentro * excertoPneu;diametroExcertoCentro = circunferenciaExcertoCentro / PI;diametroExcertoInterno = diametroExcertoCentro - diametroTransversalPneu;diametroOutroExcerto = diametroExcertoCentro + diametroTransversalPneu;circunferenciaExcertoInterno = diametroExcertoInterno * PI;circunferenciaOutroExcerto = diametroOutroExcerto * PI;

    // geometria da jantediametroJante = diametroExcertoCentro;

    raioJante = diametroJante / 2;raioPneu = diametroTransversalPneu / 2;raioEixo = diametroEixo / 2;

    Geometria do arco da janteoutroDiametroArco = diametroJante + (2 * tamanhoArco [2]);outraCircunferenciaArco = outroDiametroArco * PI;

    / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / // / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / // / Relatrio de algumas informaes bsicas para o usurio .../ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /

    / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /

    / / Alguns dados do pneu, esticado e no esticadoecho (str ("dimetro transversal do pneu ", tireCSDiameter));echo (str ("Tire estiramento circunferencial ", tireStretch));

    echo (str ("pneu (no esticada): [interior, centro, exterior]"));eco (str ("* Dimetro:", o dimetro interior, ",", centerDiameter, ",", outerDiameter));echo (str ("* Circunferncia:" round2 (innerCircumference), ",", round2 (centerCircumference),

    ",", Round2 (outerCircumference)));

    echo (str ("Tire esticada: [interior, centro, exterior]"));echo (str ("* Dimetro:" round2 (innerDiameterStretched), ",", round2 (centerDiameterStretched),

    ",", Round2 (outerDiameterStretched)));echo (str ("* Circunferncia:" round2 (innerCircumferenceStretched), ",",

    round2 (centerCircumferenceStretched), ",", round2 (outerCircumferenceStretched)));

    echo (str ("Tire Knobbed: [exterior]"));

  • 5/23/2018 Projecto Em Openscad

    4/19

    eco (str ("* Dimetro:", round2 (outerDiameterKnobbed)));echo (str ("* Circunferncia:" round2 (outerCircumferenceKnobbed)));

    echo (str ("Dimetro da roda ser", wheelDiameter));

    / / Aqui uma funo auxiliar que ir arredondar um valor com duas casas decimais.funo round2 (valor) = round (valor * 100) / 100;funo concaveRadius (wheelDiameter, profundidade) = (wheelDiameter / 2) / sen (2 *atan (profundidade / (wheelDiameter / 2)));

    / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /

    / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / // / Render a roda .../ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / // / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /

    roda ();

    roda mdulo () {

    / / Nmero de pneus - Se a largura superior a 1,5 vezes com pneu CS, ento/ / Podemos ter vrios pneus na roda, se definido.tireDistance = tireCSDiameter + spaceBetweenTires;numTires = min (maxTires, max (1, andar ((wheelWidth + (tireDistance) /

    2) / tireDistance)));echo (str ("Nmero de pneus ser", numTires));

    Largura / / Roda definida acima , na verdade, a largura na borda. Vamos redefinir wheelWidth aqui

    / / E tomar os deslocamentos de superfcie falou em conta. Vamos adicionaruma nova varivel para a largura da borda.

    larguraJante = larguraRoda;larguraRoda = larguraJante - insercaoRaio [0] - insercaoRaio [1];

    diametroRaio = diametroJante - 2 * larguraJante;

    union () {

    / / a jantedifference () {

    jante (larguraJante, alturaJante, diametroJante);

    / / Retirar o sincronismo buracosif (buracosSincronizado > 0) {

    if (direcional) {assign(alturaBuraco = (alturaJante - tem

    poSincronizacaoBuraco [0] - tempoSincronizacaoBuraco [2] - tempoSincronizacaoBuraco [1]) / 2) {

    / / orifcios externoslucalBuracosSincronizados (burac

    osSincronizados, alturaBuraco, larguraJante, (diametroJante / 2)- tempoSincroniz

    acaoBuraco [2]);

    / / furos interioresgirar ([0,0,90 / timingHoles])lucalBuracosSincronizados (burac

    osSincronizados, holeHeight, rimWidth,(diametroJante / 2) - te

    mpoSincronizacaoBuraco [2] - holeHeight - tempoSincronizacaoBuraco [1]);}atribuir (len1 = outerCircumferenceStret

  • 5/23/2018 Projecto Em Openscad

    5/19

    ched / (timingHoles * 2),len2 = outerCircumferenc

    eKnobbed / (timingHoles * 2)) {echo (str ("Para o-rings, cada m

    arca de sincronismo (mesma borda) ", round2 (len1), "mm (",round2 (len1/25.4), "in)

    ."));echo (str ("Para passos knobbed,

    cada marca de sincronismo (mesma borda) mais ou menos", round2 (len2),"Mm (", round2 (len2/25.

    4), "in)."));

    }} Else {placeTimingHoles (timingHoles, rimHeight

    -timingHolePad [0]-timingHolePad [2],rimWidth, (diametroJante / 2)-ti

    mingHolePad [2]);atribuir (len1 = outerCircumferenceStret

    ched / (timingHoles),len2 = outerCircumferenc

    eKnobbed / (timingHoles)) {echo (str ("Para o-rings, cada m

    arca de sincronismo (mesma borda) ", round2 (len1), "mm (",round2 (len1/25.4), "in)

    .")); echo (str ("Para passos knobbed,cada marca de sincronismo (mesma borda) mais ou menos", round2 (len2),

    "Mm (", round2 (len2/25.4), "in)."));

    }}

    }

    / / Perfurar pneusif ((treadStyle == "o-rings") | | (treadStyle == "v-groo

    ves")) {atribuir (medida = (numTires-1) * (tireDistance

    / 2)) {for (x = [-extenso: tireDistance: extenso]

    ) {traduzir ([0,0, x]) {

    if (treadStyle == "o-rings")

    pneu (diametroJante, tireCSDiameter);

    else if (treadStyle == "v-grooves")

    vGroove (diametroJante, knobSize [0], knobSize [1]);

    }

    }}

    } Else if (treadStyle == "slots") {/ / perfurar ranhurasse necessrio

    atribuir (separao = (rimWidth-(numberOfKnobs * knobSize [0])) / (numberOfKnobs +1))

    atribuir (dist = knobSize [0] + separao) {traduzir ([0,0,-rimWidth / 2])for (i = [0: numberOfKnobs-1]) {

    traduzir ([0,0, separao + (dist *

  • 5/23/2018 Projecto Em Openscad

    6/19

    i)])diferena () {

    cilindro (r = (diametroJante / 2), h = knobSize [0]);

    cilindro (r = (diametroJante / 2)-knobSize [2], h = knobSize [0]);

    }}

    }}

    }

    / / Traduzir raios e cubo para acomodar inserestraduzir ([0,0, rimWidth / 2 - wheelWidth / 2 - spokeInset [0]])

    {/ / Os raiosdiferena () {

    unio () {atribuir (d = diametroJante - (rimHeight

    * 2)) {if (spokeStyle == "encher") {

    cilindro (h = wheelWidth, r = d / 2, centro = true);

    } Else if (spokeStyle == "Biohaz

    ard") { biohazardSpokes (d, wheelWidth, numberOfSpokes);

    } Else if (spokeStyle == "circlefit") {

    circlefitSpokes (d, hubDiameter, wheelWidth, outerHoleDiameter);

    } Else if (spokeStyle == "linha") {

    lineSpokes (d, wheelWidth, numberOfSpokes, spokeWidth);

    } Else if (spokeStyle == "retngulo") {

    rectangleSpokes (d, wheelWidth, spokeWidth, proporo, numberOfSpokes);

    } Else if (spokeStyle == "diamante") {

    diamondSpokes (d, wheelWidth, spokeWidth, proporo, numberOfSpokes);

    } Else if (spokeStyle == "crculo") {

    circleSpokes (d, wheelWidth, spokeWidth, proporo, numberOfSpokes);

    } Else if (spokeStyle == "espiral") {

    spiralSpokes (d, wheelWi

    dth, numberOfSpokes,spokeWidth, curv

    atura, reverso, spiralSpoke);}

    }

    / / Se h um crculo slido interior, adicioo aqui.

    if (innerCircleDiameter> 0) {cilindro (h = wheelWidth, r = in

  • 5/23/2018 Projecto Em Openscad

    7/19

    nerCircleDiameter / 2, centro = true);}

    }

    / / Esculpir concavidadeif (concavidade [0]> 0) {/ / dentro

    traduzir ([0,0, concaveRadius (spokeDiameter, concavidade [0]) + wheelWidth / 2-concavidade [0]])

    esfera (r = concaveRadius (spokeDiameter, concavidade [0]));

    }

    if (concavidade [1]> 0) {/ / foratraduzir ([0,0,-concaveRadius (spokeDiameter, concavidade [1]) - wheelWidth / 2 + concavidade [1]])

    esfera (r = concaveRadius (spokeDiameter, concavidade [1]));

    }

    / / Esculpir um local para um centro de insero, senecessrio

    if (includeHub) {traduzir ([0,0, hubHeight / 2 + wheelWid

    th / 2 + hubZOffset - concavidade [0]])cilindro (h = hubHeight, r = hub

    Diameter / 2, centro = true); } Else {mountingHoles (shaftDiameter, wheelWidth

    , concavidade, servoHoleDiameter,servoHoleDistance1, servoHoleDis

    tance2, servoArmRotation, servoNutTrap);}

    / / Esculpir menor armadilha porca se necessrio -no esculpir o buraco

    if (outerNutTrap [0] * outerNutTrap [1]! = 0) {traduzir ([0,0,-wheelWidth / 2 + outerNu

    tTrap [1] / 2 -1])

    porca (outerNutTrap [0], outerNutTrap [1] 1);

    }}

    / / O hubif (includeHub) {

    traduzir ([0,0, hubHeight / 2 + wheelWidth / 2 +hubZOffset - concavidade [0]])

    hub (hubHeight, hubDiameter, shaftDiameter, shaftFlatDiameter,

    setScrewCount, setScrewTrap, setScrewDiameter, setScrewNutOffset,

    hubZOffset, baseFilletRadius, topFilletRadius, chamferOnly);

    }}

    / / A banda de rodagemif (treadStyle == "o-rings") {

    para (x = [- (numTires-1) * (tireDistance / 2): tireDistance: (numTires-1) * (tireDistance / 2)])

    traduzir ([0,0, x])

  • 5/23/2018 Projecto Em Openscad

    8/19

    % De cor ("preto", 0,5) pneu (diametroJante, tireCSDiameter);

    } Else if (treadStyle == "slots") {/ / No h necessidade de tornar qualquer coisa aqui ...

    } Else {/ / O resto so todos os projetos de botoplaceKnobs (wheelWidth, diametroJante, treadStyle, knobS

    ize, radialTreadSets, numberOfKnobs,staggerOffset, linethickness);

    }}

    }

    / / Constri no espao extra para melhor prestaomountingHoles mdulo (shaftDiameter, wheelWidth, concavidade, servoHoleDiameter, servoHoleDistance1,

    servoHoleDistance2, servoArmRotation, servoNutTrap) {

    NewWidth = wheelWidth-concavidade [0]-concavidade [1];

    cilindro (r = shaftDiameter / 2, h = NewWidth +1, centro = true);

    / / Se estamos montando um servo ...if (servoHoleDiameter> 0) {

    traduzir ([0,0, -wheelWidth/2-1]) {

    girar ([0,0, servoArmRotation])holeSet (servoHoleDistance1, servoHoleDiameter,wheelWidth 2, servoNutTrap + [0,1 concavidade + [1]]);

    girar ([0,0, servoArmRotation 90])holeSet (servoHoleDistance2, servoHoleDiameter,

    wheelWidth 2, servoNutTrap + [0,1 concavidade + [1]]);}

    }}

    mdulo holeSet (distncia, dimetro, comprimento, nutTrap) {if (distncia> 0) {

    for (i = [distncia / 2: distncia: a distncia / 2]) {traduzir ([i, 0, nutTrap [1] / 2]) {

    captiveNut (nutTrap, dimetro, 0, comprimento nutTrap-[1], 0);

    }}

    }}

    placeTimingHoles mdulo (holeCount, holeHeight, wheelWidth, raio) {traduzir ([0,0, - (wheelWidth +1) / 2]) {

    for (i = [0: holeCount-1]) { rodar (i * (360/holeCount), [0, 0, 1])

    arco (holeHeight, wheelWidth +1, raio, graus = 180/holeCount);

    }}

    }

    placeKnobs mdulo (wheelWidth, diametroJante, treadStyle, knobSize, radialTreadSets, numberOfKnobs,

    staggerOffset, linethickness) {

  • 5/23/2018 Projecto Em Openscad

    9/19

    atribuir (knobDistance = knobSize [0] + ((wheelWidth - knobSize [0] * numberOfKnobs - staggerOffset) /

    (NumberOfKnobs-1))) {

    doTreadSet (wheelWidth, diametroJante, treadStyle, knobSize, radialTreadSets, numberOfKnobs,

    knobDistance, linethickness);girar ([180, 0, 180/radialTreadSets])

    doTreadSet (wheelWidth, diametroJante, treadStyle, knobSize, radialTreadSets, numberOfKnobs,

    knobDistance, linethickness);

    }}

    / / Processa metade da banda de rodagem. A outra metade processado rodado de 180% para produzir o deslocamento cambalearmdulo doTreadSet (wheelWidth, diametroJante, treadStyle, knobSize, radialTreadSets, numberOfKnobs,

    knobDistance, linethickness) {

    Raio = diametroJante / 2;halfy = knobSize [1] / 2;teta = atan (halfy / raio);x = sqrt ((raio * raio) + (halfy * halfy));

    y = x - raio;foundationHeight = (y / cos (theta));

    traduzir ([0,0, knobSize [0] / 2 - wheelWidth / 2]) {for (i = [0: radialTreadSets-1],

    j = [0: numberOfKnobs-1]) { rodar (i * 360 / radialTreadSets, [0, 0, 1]) traduzir ([wheelDiameter / 2, 0, j * knobDistanc

    e])doKnob (treadStyle, knobSize, linethickn

    ess, foundationHeight);}

    }

    }

    / / quadrados, esferas, cylindersX, cylindersY, cylindersZ, pontos, cruz, x, zigX, v/ / Nyi: Zigy, vReverse/ / DebugKnob ("v");mdulo debugKnob (estilo) {

    knobSize = [5,5,5];linethickness = 1;

    raio = 25;

    halfy = knobSize [1] / 2;teta = atan (halfy / raio);x = sqrt ((raio * raio) + (halfy * halfy));y = x - raio;foundationHeight = (y / cos (theta));

    / / Rodatraduzir ([-25,0,0])

    % Cilindro (r = 25, h = 10, centro = true);/ / Extenses

  • 5/23/2018 Projecto Em Openscad

    10/19

    traduzir ([knobSize [2] / 2,0,0])girar ([90,90,90])

    % Cubo (knobSize, centro = true);/ / Foundationtraduzir ([-foundationHeight / 2,0,0])

    girar ([90,90,90])cor ("vermelho", 0,15)

    * Cubo ([knobSize [0], knobSize [1], foundationHeight], centro = true);

    doKnob (estilo, knobSize, linethickness, foundationHeight);

    }

    mdulo doKnob (treadStyle, knobSize, linethickness, foundationHeight) {

    / / slots e o-rings no so boto projetos

    / / Retrgrada conhecer elementos uma vez que por isso no tem que ficar repetindo isso

    newSize = [knobSize [2] + foundationHeight, knobSize [1], knobSize [0]];newSizeTall = [2 * (knobSize [2] + foundationHeight), knobSize [1], knob

    Size [0]];

    render ()

    if (treadStyle == "quadrados") {traduzir ([newSize [0] / 2 - foundationHeight, 0,0]) cubo (newSize, centro = true);

    } Else if (treadStyle == "esferas") {traduzir ([-foundationHeight, 0,0])diferena () {

    escala (newSizeTall) esfera (r = 0,5, centro = true);

    traduzir ([-newSize [0] / 2,0,0]) cubo (newSize + [0,1,1], centro = true);

    }} Else if (treadStyle == "cylindersX") {

    traduzir ([-foundationHeight, 0,0])

    diferena () {escala (newSizeTall)

    girar ([0,0,90]) cilindro (r = 0,5, h = 1, centro = true)

    ;traduzir ([-newSize [0] / 2,0,0]) cubo (newSize + [0,1,1], centro = true);

    }} Else if (treadStyle == "cylindersY") {

    traduzir ([-foundationHeight, 0,0])diferena () {

    escala (newSizeTall)girar ([90,0,0])

    cilindro (r = 0,5, h = 1, centro = true);

    traduzir ([-newSize [0] / 2,0,0]) cubo (newSize + [0,1,1], centro = true);

    }} Else if (treadStyle == "cylindersZ") {

    traduzir ([newSize [0] / 2 foundationHeight, 0,0])escala (newSize)girar ([0,90,0])

    cilindro (r = 0,5, h = 1, centro = true);

  • 5/23/2018 Projecto Em Openscad

    11/19

    } Else if (treadStyle == "picos") {traduzir ([(newSize [0]-foundationHeight) / 2,0,0])escala (newSize)girar ([0,90,0])unio () {

    cilindro (R1 = 0,5, r2 = 0, h = 1, centro = true);}

    } Else if (treadStyle == "cruz") {traduzir ([newSize [0] / 2 foundationHeight, 0,0])unio () { cubo ([newSize [0], linethickness, newSize [2]], centro

    = true); cubo ([newSize [0], newSize [1], linethickness], centro= true);

    }} Else if (treadStyle == "x") {

    atribuir (= len sqrt (pow (newSize [2], 2) + pow (newSize [1], 2)),

    teta = atan (newSize [1] / newSize [2]))traduzir ([newSize [0] / 2 foundationHeight, 0,0])interseo () {

    unio () {girar ([theta, 0,0])

    cubo ([newSize [0], linethickness, len],

    centro = true); girar ([-theta, 0,0])cubo ([newSize [0], linethickness, len],

    centro = true);}

    / / Corte a caixa Tamanhocubo (newSize, centro = true);

    }} Else if (treadStyle == "zigX") {

    atribuir (Seglen = sqrt (pow (newSize [2] / 4, 2) + pow (newSize[1] / 2, 2)),

    teta = atan ((newSize [1] / 2) / (newSize [2] / 4)))

    traduzir ([newSize [0] / 2 foundationHeight, 0,0])interseo () {

    union () {/ / estender Seglen assim padres de corresponder a padres vizinhos

    traduzir ([0,-newSize [1] / 4,-newSize [2] / 2 +newSize [2] / 8])

    girar ([theta, 0,0])cubo ([newSize [0], linethicknes

    s, Seglen * 2], centro = true);girar ([-theta, 0,0])

    cubo ([newSize [0], linethickness, Seglen * 2], centro = true);

    traduzir ([0, newSize [1] / 4, newSize [2] / 2 -

    newSize [2] / 8])girar ([theta, 0,0])

    cubo ([newSize [0], linethickness, Seglen * 2], centro = true);

    }

    / / Corte a caixa Tamanhocubo (newSize, centro = true);

    }} Else if (treadStyle == "v") {

  • 5/23/2018 Projecto Em Openscad

    12/19

    atribuir (Seglen = sqrt (pow (newSize [2] / 2, 2) + pow (newSize[1], 2)),

    teta = atan ((newSize [1]) / (newSize [2] / 2)))traduzir ([newSize [0] / 2 foundationHeight, 0,0])interseo () {

    unio () {traduzir ([0,0, newSize [2] / 4])

    girar ([-theta, 0,0])cubo ([newSize [0], linethicknes

    s, Seglen], centro = true);traduzir ([0,0,-newSize [2] / 4])

    girar ([theta, 0,0])cubo ([newSize [0], linethickness, Seglen], centro = true);

    }

    / / Corte a caixa Tamanhocubo ([newSize [0], newSize [1], newSize [2]], centro = true

    );}

    } Else if (treadStyle == "Zigy") {/ / Ainda no implementado

    } Else if (treadStyle == "vReverse") {/ / Ainda no implementado

    }}

    / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / // / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / // / Falou Estilos .../ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / // / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /

    padro / / Diamantes raiosdiamondSpokes mdulo (diametroJante, wheelWidth, largura de linha, proporo, numberSpokes) {

    echo ("Diamantes de estilo ...");interseo () {

    cilindro (h = wheelWidth, r = diametroJante / 2, centro = true);

    para (passo = [0: numberofSpokes-1]) { rodar (um passo = * (360/numberofSpokes), v = [0, 0, 1])

    diamondSpoke (diametroJante, wheelWidth, 'lineWidth, proporo);

    }}

    }mdulo diamondSpoke (diametroJante, wheelWidth, 'lineWidth, proporo) {

    / / Vamos fazer as linhas a espessura correta, mesmo aps as transformaes/ / So feitos ... Talvez haja uma maneira melhor?render ()atribuir (perna = sqrt (2 * pow (diametroJante / 4,2))) / / rochas Eucli

    des.atribuir (p = (diametroJante / 2) * proporo [0], q = (diametroJante / 2) *

    proporo [1])atribuir (a = sqrt ((p * p) / 4 + (q * q) / 4))atribuir (h = (p * q) / (2 * a))

  • 5/23/2018 Projecto Em Openscad

    13/19

    atribuir (theta = 2 * asin (q / (2 * a)))atribuir (prop = (2 * cos (teta / 2) * (h-(2 'lineWidth *))) / (sin (tet

    a) * p)) {traduzir ([p-/ 2, 0, 0]) {

    diferena () {escala ([proporo [0], a proporo [1], 1]) {

    girar ([0,0,45])cubo ([perna, perna, wheelWidth]

    , centro = true);}

    escala ([prop, prop, 1]) {escala ([proporo [0], a proporo [1], 1]) girar ([0,0,45]) / / Minha espos

    a o eptome do awesomeness.cubo ([perna, perna, whe

    elWidth +1], centro = true);}

    }}

    }}

    }

    / / Crculos padro raioscircleSpokes mdulo (diametroJante, wheelWidth, largura de linha, proporo, numberopokes) {

    echo ("Estilo Circles ...");interseo () {

    cilindro (h = wheelWidth, r = diametroJante / 2, centro = true);

    para (passo = [0: numberofSpokes-1]) { rodar ([0, 0, * passo (360/numberofSpokes)])

    circleSpoke (diametroJante, wheelWidth, 'lineWidth, proporo);

    }

    }

    }mdulo circleSpoke (diametroJante, wheelWidth, 'lineWidth, proporo) {

    render ()atribuir (ox = (diametroJante / 2) * proporo [0], oy = (diametroJante / 2)

    * proporo [1])atribuir (ix = boi-('lineWidth * 2), iy = oy-(' lineWidth * 2)) {

    traduzir ([-boi / 2, 0, 0]) {diferena () {

    escala ([proporo [0], a proporo [1], 1])cilindro (r = diametroJante / 4, h = whe

    elWidth, centro = true);

    escala ([(ix / boi) * proporo [0], (iy / oy) * proporo [1], 1])

    cilindro (r = diametroJante / 4, h = wheelWidth +1, centro = true);

    }}

    }}

    Padro raios / / Retngulo

  • 5/23/2018 Projecto Em Openscad

    14/19

    rectangleSpokes mdulo (diametroJante, wheelWidth, largura de linha, proporo, numbofSpokes) {

    echo ("retngulos Style ...");interseo () {

    cilindro (h = wheelWidth, r = diametroJante / 2, centro = true);

    para (passo = [0: numberofSpokes-1]) { rodar (um passo = * (360/numberofSpokes), v = [0, 0, 1])

    rectangleSpoke (diametroJante, wheelWidth, 'lineWidth, proporo);

    }}}mdulo rectangleSpoke (diametroJante, wheelWidth, 'lineWidth, proporo) {

    render ()atribuir (ox = (diametroJante / 2) * proporo [0], oy = (diametroJante / 2)

    * proporo [1])atribuir (ix = boi-('lineWidth * 2), iy = oy-(' lineWidth * 2)) {

    traduzir ([-boi / 2, 0, 0]) {diferena () {

    cubo ([boi, oy, wheelWidth], centro = true);cubo ([ix, iy, wheelWidth +1], centro = true);

    }

    } }}

    / / raios padro espiralspiralSpokes mdulo (dimetro, wheelWidth, nmero, spokeWidth, curvatura, reverso) {

    echo ("Spiral Style ...");interseo () {

    cilindro (h = wheelWidth, r = dimetro / 2, centro = true);

    for (passo = [0: Nmero-1]) { rodar (um passo = * (360/number), v = [0, 0, 1])

    spiralSpoke (wheelWidth, spokeWidth, (dimetro / 4) * 1/cu

    rvature, reverso);}

    }}mdulo spiralSpoke (wheelWidth, spokeWidth, spokeRadius, inverta = false) {

    render ()interseo () {

    traduzir ([-spokeRadius, 0, 0]) {diferena () {

    cilindro (r = spokeRadius, h = wheelWidth, centro = true);

    cilindro (r = spokeRadius-(spokeWidth / 2), h =wheelWidth 1, centro = true);

    }}if (reverso)

    traduzir ([-spokeRadius,-spokeRadius / 2, 0])cubo ([spokeRadius * 2, spokeRadius, wheelWidth

    +1], centro = true);outro

    traduzir ([-spokeRadius, spokeRadius / 2, 0])cubo ([spokeRadius * 2, spokeRadius, wheelWidth

    +1], centro = true);

  • 5/23/2018 Projecto Em Openscad

    15/19

    }}

    Padro raios / / BiohazardbiohazardSpokes mdulo (dimetro, largura, nmero) {

    echo ("Biohazard Style ...");

    scale = (dimetro / 2) / 88;interseo () {

    cilindro (h = largura, r = dimetro / 2, centro = true);escala ([escala, escala, 1]) {

    for (passo = [0: Nmero-1]) { rodar (um passo = * (360/number), v = [0, 0, 1])biohazardSpoke (largura);

    }}

    }

    }mdulo biohazardSpoke (largura) {

    render ()traduzir ([-60, 0, 0])diferena () {

    traduzir ([10, 0, 0])

    cilindro (h = largura, r = 50, centro = true);traduzir ([-1, 0, 0]) / / compensar um pouco por isso colectorcilindro (h = largura 2, r = 40, centro = true);

    }}

    Padro raios / / Circlefit/ / Ainda precisa da matemtica para a colocao / dimensionamento dos furos exterios ... deixe-me saber se voc descobrir isso e eu vou adicion-lo.circlefitSpokes mdulo (dimetro, hubDiameter, largura, outerHoleDiameter) {

    echo ("Circlefit Style ...");

    preenchimento = 2;

    paddedHoleRadius = (dimetro hubDiameter) / 4;holeRadius = paddedHoleRadius - estofamento / 2;hubRadius = hubDiameter / 2;

    / / Descobrir quantos crculos vai caber.crculos = andar (360 / (2 * (asin (paddedHoleRadius / (paddedHoleRadius +

    hubRadius)))));diferena () {

    cilindro (h = largura, r = dimetro / 2, centro = true);

    for (i = [0: crculos-1]) { rodar (i * (360/circles), [0, 0, 1]) traduzir ([+ hubRadius paddedHoleRadius, 0, 0])

    cilindro (h = largura +1, r = holeRadius, centro = true);

    }

    Buracos / / menores para conservar filamento rodar (360/circles/2, [0, 0, 1])

    for (i = [0: crculos-1]) { rodar (i * (360/circles), [0, 0, 1]) traduzir ([diameter/2-outerHoleDiameter/2, 0, 0]) cilindro (h = largura +1, r = outerHoleDiameter / 2, ce

  • 5/23/2018 Projecto Em Openscad

    16/19

    ntro = true);}

    }}

    Padro / / Linha de raioslineSpokes mdulo (dimetro, wheelWidth, nmero, spokeWidth) {

    echo ("Linhas Estilo ...");interseo () {

    cilindro (h = wheelWidth, r = dimetro / 2, centro = true);

    for (passo = [0: Nmero-1]) { rodar (um passo = * (360/number), v = [0, 0, 1])lineSpoke (wheelWidth, spokeWidth);

    }}

    }mdulo lineSpoke (wheelWidth, spokeWidth) {

    traduzir ([-60 / 2, 0, 0])cubo ([60, spokeWidth, wheelWidth], centro = true);

    }

    / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /

    / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / // / Mdulos .../ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / // / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /

    / / O cubo (a parte que segura a roda sobre o motorhub mdulo (altura, dimetro, boreDiameter, shaftFlatDiameter, nozes, nutSize, setScrewDiameter, setScrewNutOffset = 0,

    hubZOffset = 0, baseFilletRadius = 0, topFilletRadius = 0, chamferOnly =false) {

    hubWidth = (dimetro boreDiameter) / 2;

    unio () {diferena () {

    / / Forma hub principalunio () {

    diferena () {unio () {

    cilindro (h = altura, r = dimetro/ 2, centro = true);

    / / Primeiro chanfro na base ...rotate_extrude ()

    traduzir ([dimetro / 2, -

    (altura / 2)-hubZOffset, 0])polgono (pontos =

    [[0,0], [0, baseFilletRadius], [baseFilletRadius, 0]]);}

    / / Chanfro cima ...rotate_extrude ()

    traduzir ([dimetro / 2, altura /2,0])

    polgono (pontos = [[0.5,0

  • 5/23/2018 Projecto Em Openscad

    17/19

    .5], [-topFilletRadius-0,5, 0,5], [0,5,-topFilletRadius-0.5]]);

    / / Esculpir o fil fundo do chanfroif (chamferOnly!) {

    rotate_extrude () {traduzir ([(dimetro / 2)

    + baseFilletRadius,- (Altura (2 * b

    aseFilletRadius)) / 2-hubZOffset, 0]) {crculo (r = baseF

    illetRadius);

    }}}

    }

    / / Adicionar o fil de volta ao topo do topo chanfro

    if (chamferOnly!) {rotate_extrude () {

    traduzir ([(Dimetro / 2)-topFilletRa

    dius,(Altura (2 * topFilletRa

    dius)) / 2, 0])crculo (r = topFilletRadi

    us);}

    }}

    / / Remover o furodiferena () {

    cilindro (h = altura 1, r = boreDiameter / 2, centro = true);

    traduzir ([(boreDiameter shaftFlatDiameter-1) /

    2 + (boreDiameter / 2) - (boreDiameter - shaftFlatDiameter), 0,0])cubo ([boreDiameter-shaftFlatDiameter +1

    , boreDiameter, altura +2], centro = true);}

    / / Remover a porca cativafor (i = [0: nozes-1]) {

    girar ([0,0, (360/nuts) * i])traduzir ([boreDiameter / 2 + (dimetro-boreDiamet

    er) / 4 + setScrewNutOffset,0, altura / 2 - (altura + hubZOf

    fset) / 2]) {girar ([0, -90,0]) {

    captiveNut (nutSize, setScrewDiameter,

    profundidade = altura /2 +1, holeLengthTop = hubWidth / 2 + setScrewNutOffset + (boreDiameter-shaftFlatDiameter),

    holeLengthBottom = hubWidth + baseFilletRadius-setScrewNutOffset);

    }}

    }

  • 5/23/2018 Projecto Em Openscad

    18/19

    }}

    }

    / / A borda (a rea slida entre os raios e pneus)borda do mdulo (largura, altura, dimetro) {

    diferena () {/ / Jantecilindro (h = largura, r = dimetro / 2, centro = true);

    / / Punch out centro

    cilindro (h = largura +1, r = dimetro / 2 - altura, centro = true);}

    }

    / / O pneu, onde "dimetro" o dimetro do centro-a-centro (no ID ou OD)mdulo de pneu (dimetro, csDiameter) {

    render () {rotate_extrude (convexidade = 10)

    traduzir ([dimetro / 2, 0, 0])crculo (r = csDiameter / 2, $ fn = 20);

    }}

    / / O V-grooves - almofadas a profundidade por um milmetro por isso torna bem quando usado para diferenamdulo vGroove (dimetro, ngulo, profundidade) {

    dist = tan (ngulo / 2) * (profundidade 1);render () {

    rotate_extrude (convexidade = 10)traduzir ([dimetro / 2, 0, 0])

    polgono ([[1, dist], [profundidade, 0], [1, dist-]]);

    }}

    / / Este o mdulo porca cativa eu ??uso em vrios de meus projetos.mdulo captiveNut (nutSize, setScrewHoleDiameter = 3,

    profundidade = 10, holeLengthTop = 5, holeLengthBottom = 5){

    render ()unio () {

    porca (nutSize);

    if (profundidade> 0)traduzir ([profundidade / 2,0,0])

    cubo ([profundidade, nutSize [0], nutSize [1]],centro = true);

    traduzir ([0,0, - (nutSize [1] / 2)-holeLengthBottom])cilindro (r = setScrewHoleDiameter / 2, h = nutSize [1]

    + + holeLengthTop holeLengthBottom, $ fn = 15);}

    }

    / / NutSize = [inDiameter, espessura]porca mdulo (nutSize) {

    lado = nutSize [0] * tan (180/6);

  • 5/23/2018 Projecto Em Openscad

    19/19

    if (nutSize [0] * nutSize [1]! = 0) {for (i = [0: 2]) {

    rodar (i * 120, [0, 0, 1])cubo ([lado, nutSize [0], nutSize [1]], centro =

    true);}

    }}

    / / Por isso no fcil em openSCAD? :/ Este o mesmo cdigo que eu uso na roda doicador

    arco mdulo (altura, profundidade, raio, graus) {/ / Este morre uma morte horible se no for prestado aqui/ / - Suga toda a memria e gira fora de controlerender () {

    diferena () {/ / Anel externorotate_extrude ($ fn = 100)

    traduzir ([raio - altura, 0, 0])quadrado ([altura, profundidade]);

    / / Meia Cut offtraduzir ([0, - (raio 1), - 0,5])

    cubo ([raio 1, (raio 1) * 2, uma profundidade]);

    / / Tampa a outra metade, se necessriogirar ([0,0,180 graus])traduzir ([0, - (raio 1), - 0,5])

    cubo ([raio 1, (raio 1) * 2, uma profundidade]);}

    }}