From 6bed7f80ea8e67c388f1c52a60237e7ceb8c274e Mon Sep 17 00:00:00 2001 From: Adrian Kummerlaender Date: Tue, 17 Sep 2019 21:25:27 +0200 Subject: Extract indicators, drawing of geometric primitives --- geometry/cylinder.py | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 geometry/cylinder.py (limited to 'geometry/cylinder.py') diff --git a/geometry/cylinder.py b/geometry/cylinder.py new file mode 100644 index 0000000..b576a62 --- /dev/null +++ b/geometry/cylinder.py @@ -0,0 +1,72 @@ +import numpy + +from OpenGL.GL import * + +class Cylinder: + def __init__(self, x, y, z, r, h = 0, l = 0): + self.x = x + self.y = y + self.z = z + self.r = r + self.h = h + self.l = l + + self.circle = [] + for i in range(33): + alpha = 2 * numpy.pi * (i/32) + c0 = self.r * numpy.cos(alpha) + c1 = self.r * numpy.sin(alpha) + self.circle.append((c0, c1)) + + def indicator(self): + if self.h == 0: + return lambda x, y, z: (x - self.x)**2 + (z - self.z)**2 < self.r*self.r and y >= self.y and y <= self.y+self.l + else: + return lambda x, y, z: (x - self.x)**2 + (y - self.y)**2 < self.r*self.r and z >= self.z and z <= self.z+self.h + + def draw(self): + glBegin(GL_TRIANGLE_FAN) + + if self.h == 0: + glNormal(0,-1, 0) + glVertex(self.x, self.y, self.z) + for (c0, c1) in self.circle: + glNormal(0, -1, 0) + glVertex(self.x+c0, self.y, self.z+c1) + else: + glNormal(0, 0, -1) + glVertex(self.x, self.y, self.z) + for (c0, c1) in self.circle: + glVertex(self.x+c0, self.y+c1, self.z) + + glEnd() + + glBegin(GL_TRIANGLE_FAN) + if self.h == 0: + glNormal(0, 1, 0) + glVertex(self.x, self.y+self.l, self.z) + for (c0, c1) in self.circle: + glVertex(self.x+c0, self.y+self.l, self.z+c1) + else: + glNormal(0, 0, 1) + glVertex(self.x, self.y, self.z+self.h) + for (c0, c1) in self.circle: + glVertex(self.x+c0, self.y+c1, self.z+self.h) + + glEnd() + + glBegin(GL_TRIANGLE_STRIP) + + if self.h == 0: + for (c0, c1) in self.circle: + glNormal(c0, 0, c1) + glVertex(self.x+c0, self.y, self.z+c1) + glVertex(self.x+c0, self.y + self.l, self.z+c1) + else: + for (c0, c1) in self.circle: + glNormal(c0, c1, 0) + glVertex(self.x+c0, self.y+c1, self.z) + glVertex(self.x+c0, self.y+c1, self.z+self.h) + + glEnd() + -- cgit v1.2.3