Lines Matching refs:eng
281 PistonShaftPosition(const Engine *eng, int piston)
283 const int i = piston / (eng->Pistons / eng->Cranks);
285 assert(piston < eng->Pistons);
286 z = 1.5 * eng->CrankJournalLength + eng->CrankPlateThickness
287 + i * (2.0 * (eng->CrankJournalLength + eng->CrankPlateThickness));
288 if (eng->Pistons > eng->Cranks) {
290 z += eng->ConnectingRodThickness;
292 z -= eng->ConnectingRodThickness;
302 PistonSpacing(const Engine *eng)
304 const int pistonsPerCrank = eng->Pistons / eng->Cranks;
305 const float z0 = PistonShaftPosition(eng, 0);
306 const float z1 = PistonShaftPosition(eng, pistonsPerCrank);
331 CrankshaftLength(const Engine *eng)
333 float len = (eng->Cranks * 2 + 1) * eng->CrankJournalLength
334 + 2 * eng->Cranks * eng->CrankPlateThickness;
344 DrawPiston(const Engine *eng)
347 const float innerRadius = 0.9 * eng->PistonRadius;
348 const float innerHeight = eng->PistonHeight - 0.15;
349 const float wristPinLength = 1.8 * eng->PistonRadius;
354 glTranslatef(0, 0, -1.1 * eng->WristPinRadius);
359 gluDisk(Q, innerRadius, eng->PistonRadius, slices, 1/*loops*/);
373 gluCylinder(Q, eng->PistonRadius, eng->PistonRadius, eng->PistonHeight,
377 glTranslatef(0, 0, eng->PistonHeight);
378 gluDisk(Q, 0, eng->PistonRadius, slices, loops);
386 gluCylinder(Q, eng->WristPinRadius, eng->WristPinRadius, wristPinLength,
396 DrawPositionedPiston(const Engine *eng, float crankAngle)
398 const float pos = PistonStrokePosition(eng->Throw, crankAngle,
399 eng->ConnectingRodLength);
403 if (eng->PistonList)
404 glCallList(eng->PistonList);
406 DrawPiston(eng);
475 DrawCrankshaft(const Engine *eng)
478 const int n = eng->Cranks * 4 + 1;
479 const float phiStep = 360 / eng->Cranks;
490 glTranslatef(0, 0, 0.5 * eng->CrankPlateThickness);
491 DrawConnector(eng->Throw, eng->CrankPlateThickness,
492 eng->CrankJournalRadius, eng->CrankPinRadius);
499 gluCylinder(Q, eng->CrankJournalRadius, eng->CrankJournalRadius,
500 eng->CrankJournalLength, slices, stacks);
501 z += eng->CrankJournalLength;
506 glTranslatef(0, eng->Throw, 0);
507 gluCylinder(Q, eng->CrankPinRadius, eng->CrankPinRadius,
508 eng->CrankJournalLength, slices, stacks);
509 z += eng->CrankJournalLength;
521 DrawPositionedCrankshaft(const Engine *eng, float crankAngle)
525 if (eng->CrankList)
526 glCallList(eng->CrankList);
528 DrawCrankshaft(eng);
535 * \param eng description of connecting rod to draw
539 DrawPositionedConnectingRod(const Engine *eng, float crankAngle)
544 ComputeConnectingRodPosition(eng->Throw, crankAngle,
545 eng->ConnectingRodLength,
547 d = sqrt(eng->ConnectingRodLength * eng->ConnectingRodLength - x0 * x0);
553 if (eng->ConnRodList)
554 glCallList(eng->ConnRodList);
556 DrawConnector(eng->ConnectingRodLength, eng->ConnectingRodThickness,
557 eng->CrankPinRadius, eng->WristPinRadius);
670 DrawEngineBlock(const Engine *eng)
672 const float blockHeight = eng->Throw + 1.5 * eng->PistonHeight;
673 const float cylRadius = 1.01 * eng->PistonRadius;
674 const float blockSize = 0.5 * PistonSpacing(eng);
675 const int pistonsPerCrank = eng->Pistons / eng->Cranks;
678 for (i = 0; i < eng->Pistons; i++) {
679 const float z = PistonShaftPosition(eng, i);
688 glRotatef(k * -eng->V_Angle, 0, 0, 1);
692 glTranslatef(0, 0, eng->Throw * 2);
694 crank, eng->Cranks);
704 GenerateDisplayLists(Engine *eng)
706 eng->CrankList = glGenLists(1);
707 glNewList(eng->CrankList, GL_COMPILE);
708 DrawCrankshaft(eng);
711 eng->ConnRodList = glGenLists(1);
712 glNewList(eng->ConnRodList, GL_COMPILE);
713 DrawConnector(eng->ConnectingRodLength, eng->ConnectingRodThickness,
714 eng->CrankPinRadius, eng->WristPinRadius);
717 eng->PistonList = glGenLists(1);
718 glNewList(eng->PistonList, GL_COMPILE);
719 DrawPiston(eng);
722 eng->BlockList = glGenLists(1);
723 glNewList(eng->BlockList, GL_COMPILE);
724 DrawEngineBlock(eng);
733 FreeDisplayLists(Engine *eng)
735 glDeleteLists(eng->CrankList, 1);
736 eng->CrankList = 0;
737 glDeleteLists(eng->ConnRodList, 1);
738 eng->ConnRodList = 0;
739 glDeleteLists(eng->PistonList, 1);
740 eng->PistonList = 0;
741 glDeleteLists(eng->BlockList, 1);
742 eng->BlockList = 0;
748 * \param eng description of engine to draw
752 DrawEngine(const Engine *eng, float crankAngle)
754 const float crankDelta = 360.0 / eng->Cranks;
755 const float crankLen = CrankshaftLength(eng);
756 const int pistonsPerCrank = eng->Pistons / eng->Cranks;
760 glRotatef(eng->V_Angle * 0.5, 0, 0, 1);
766 DrawPositionedCrankshaft(eng, crankAngle);
768 for (i = 0; i < eng->Pistons; i++) {
769 const float z = PistonShaftPosition(eng, i);
779 glRotatef(k * -eng->V_Angle, 0, 0, 1);
780 rot += k * eng->V_Angle;
785 DrawPositionedPiston(eng, rot);
790 DrawPositionedConnectingRod(eng, rot);
805 if (eng->CrankList)
806 glCallList(eng->BlockList);
808 DrawEngineBlock(eng);