#+TITLE: Python CAD Tutorial 06 - Drawing planes in 3D space #+DATE: 2013-10-06 12:00:00 UTC #+DESCRIPTION: Drawing planes in 3d space #+FILETAGS: GTK-3:python:cad:opengl #+CATEGORY: python #+SLUG: 06-cad-drawing-planes-in-3d-space #+THUMBANIL: ../../../images/cad/tut06-interface.png #+BEGIN_COMMENT .. title: Python CAD Tutorial 06 - Drawing planes in 3D space .. slug: 06-cad-drawing-planes-in-3d-space.org .. date: 2013-10-06 12:00:00 UTC .. tags: GTK-3, python, cad, opengl .. category: python .. description: Drawing planes in 3d space .. type: text #+END_COMMENT [[https://code.launchpad.net/~oly/fabricad/tut06][View/Download Code]] #+CAPTION: Planes [[../../../images/cad/tut06-interface.png]] We will now add a plane class, this is another fundamental building block. It will also be used for various collision detections at a later stage.We have created two classes below: + The first class will be used for the grid in the next tutorial. A plane does not normally have a limit of size but in this we are limiting it for display purposes.'createplanesimple' takes a point in space and a size. It will then calculate the plane by appending the size to the x and y coridinates, z will remain fixed. + The second class is a more accurate way of representing a plane. Usually we only need to store a point in space and a direction, so by adding the coordinates together we can get a central point and direction this will be added at a later date. #+BEGIN_SRC python from point import createpoint class createplanesimple: def __init__(self, p1, plane_size=10): size = plane_size / 2 self.p1 = createpoint((p1[0] + size, p1[1]+size, p1[2])) self.p2 = createpoint((p1[0] - size, p1[1]+size, p1[2])) self.p3 = createpoint((p1[0] + size, p1[1]-size, p1[2])) self.p4 = createpoint((p1[0] - size, p1[1]-size, p1[2])) self.normal = createpoint((0, 1, 0)) def draw(self): glBegin(GL_TRIANGLE_STRIP) glColor3f(0.9, 0.9, 0.9) glNormal3f(self.normal.x, self.normal.y, self.normal.z) glVertex3f(self.p1.x, self.p1.y, self.p1.z) glVertex3f(self.p2.x, self.p2.y, self.p2.z) glVertex3f(self.p3.x, self.p3.y, self.p3.z) glVertex3f(self.p2.x, self.p2.y, self.p2.z) glVertex3f(self.p3.x, self.p3.y, self.p3.z) glVertex3f(self.p4.x, self.p4.y, self.p4.z) glEnd() self.p1.draw((0, 0, 1)) self.p2.draw((0, 0, 1)) self.p3.draw((0, 0, 1)) self.p4.draw((0, 0, 1)) class createplane: def __init__(self, p1, p2, p3): self.p1 = createpoint(p1) self.p2 = createpoint(p2) self.p3 = createpoint(p3) self.normal = createpoint((0, 1, 0)) def draw(self): glBegin(GL_TRIANGLE_STRIP) glColor3f(0.8, 0.8, 0.8) glNormal3f(self.normal.x, self.normal.y, self.normal.z) glVertex3f(self.p1.x, self.p1.y, self.p1.z) glVertex3f(self.p2.x, self.p2.y, self.p2.z) glVertex3f(self.p3.x, self.p3.y, self.p3.z) glEnd() self.p1.draw((1, 0, 0)) self.p2.draw((0, 1, 0)) self.p3.draw((0, 0, 1)) #+END_SRC