271 lines
13 KiB
Python
271 lines
13 KiB
Python
from panda3d.core import *
|
|
from direct.interval.IntervalGlobal import *
|
|
|
|
class Env_Grid_Maker:
|
|
def __init__(self, XYPlaneShow = True, XZPlaneShow = False, YZPlaneShow = False, endCapLinesShow = True, XSize = 50, YSize = 50, ZSize = 50, gridStep = 10, subdiv = 10):
|
|
#Create line objects
|
|
self.axisLines = LineSegs()
|
|
self.gridLines = LineSegs()
|
|
self.subdivLines = LineSegs()
|
|
|
|
#Init passed variables
|
|
self.XSize = XSize
|
|
self.YSize = YSize
|
|
self.ZSize = ZSize
|
|
self.gridStep = gridStep
|
|
self.subdiv = subdiv
|
|
|
|
#Init default variables
|
|
|
|
#Plane and end cap line visibility (1 is show, 0 is hide)
|
|
self.XYPlaneShow = XYPlaneShow
|
|
self.XZPlaneShow = XZPlaneShow
|
|
self.YZPlaneShow = YZPlaneShow
|
|
self.endCapLinesShow = endCapLinesShow
|
|
|
|
#Alpha variables for each plane
|
|
#self.XYPlaneAlpha = 1
|
|
#self.XZPlaneAlpha = 1
|
|
#self.YZPlaneAlpha = 1
|
|
|
|
#Colors (RGBA passed as a VBase4 object)
|
|
self.XAxisColor = VBase4(1, 0, 0, 1)
|
|
self.YAxisColor = VBase4(0, 1, 0, 1)
|
|
self.ZAxisColor = VBase4(0, 0, 1, 1)
|
|
self.gridColor = VBase4(1, 1, 1, 1)
|
|
self.subdivColor = VBase4(.35, .35, .35, 1)
|
|
|
|
#Line thicknesses (in pixels)
|
|
self.axisThickness = 3
|
|
self.gridThickness = 1
|
|
self.subdivThickness = 1
|
|
|
|
|
|
def create(self):
|
|
#Set line thicknesses
|
|
self.axisLines.setThickness(self.axisThickness)
|
|
self.gridLines.setThickness(self.gridThickness)
|
|
self.subdivLines.setThickness(self.subdivThickness)
|
|
|
|
if(self.XSize != 0):
|
|
#Draw X axis line
|
|
self.axisLines.setColor(self.XAxisColor)
|
|
self.axisLines.moveTo(-(self.XSize), 0, 0)
|
|
self.axisLines.drawTo(self.XSize, 0, 0)
|
|
|
|
if(self.YSize != 0):
|
|
#Draw Y axis line
|
|
self.axisLines.setColor(self.YAxisColor)
|
|
self.axisLines.moveTo(0, -(self.YSize), 0)
|
|
self.axisLines.drawTo(0, self.YSize, 0)
|
|
|
|
if(self.ZSize != 0):
|
|
#Draw Z axis line
|
|
self.axisLines.setColor(self.ZAxisColor)
|
|
self.axisLines.moveTo(0, 0, -(self.ZSize))
|
|
self.axisLines.drawTo(0, 0, self.ZSize)
|
|
|
|
#Check to see if primary grid lines should be drawn at all
|
|
if(self.gridStep != 0):
|
|
|
|
#Draw primary grid lines
|
|
self.gridLines.setColor(self.gridColor)
|
|
|
|
#Draw primary grid lines metering x axis if any x-length
|
|
if(self.XSize != 0):
|
|
if((self.YSize != 0) and (self.XYPlaneShow)):
|
|
#Draw y lines across x axis starting from center moving out
|
|
#XY Plane
|
|
for x in self.myfrange(0, self.XSize, self.gridStep):
|
|
self.gridLines.moveTo(x, -(self.YSize), 0)
|
|
self.gridLines.drawTo(x, self.YSize, 0)
|
|
self.gridLines.moveTo(-x, -(self.YSize), 0)
|
|
self.gridLines.drawTo(-x, self.YSize, 0)
|
|
|
|
if(self.endCapLinesShow):
|
|
#Draw endcap lines
|
|
self.gridLines.moveTo(self.XSize, -(self.YSize), 0)
|
|
self.gridLines.drawTo(self.XSize, self.YSize, 0)
|
|
self.gridLines.moveTo(-(self.XSize), -(self.YSize), 0)
|
|
self.gridLines.drawTo(-(self.XSize), self.YSize, 0)
|
|
|
|
if((self.ZSize != 0) and (self.XZPlaneShow)):
|
|
#Draw z lines across x axis starting from center moving out
|
|
#XZ Plane
|
|
for x in self.myfrange(0, self.XSize, self.gridStep):
|
|
self.gridLines.moveTo(x, 0, -(self.ZSize))
|
|
self.gridLines.drawTo(x, 0, self.ZSize)
|
|
self.gridLines.moveTo(-x, 0, -(self.ZSize))
|
|
self.gridLines.drawTo(-x, 0, self.ZSize)
|
|
|
|
if(self.endCapLinesShow):
|
|
#Draw endcap lines
|
|
self.gridLines.moveTo(self.XSize, 0, -(self.ZSize))
|
|
self.gridLines.drawTo(self.XSize, 0, self.ZSize)
|
|
self.gridLines.moveTo(-(self.XSize), 0, -(self.ZSize))
|
|
self.gridLines.drawTo(-(self.XSize), 0, self.ZSize)
|
|
|
|
#Draw primary grid lines metering y axis if any y-length
|
|
if(self.YSize != 0):
|
|
|
|
if((self.YSize != 0) and (self.XYPlaneShow)):
|
|
#Draw x lines across y axis
|
|
#XY Plane
|
|
for y in self.myfrange(0, self.YSize, self.gridStep):
|
|
self.gridLines.moveTo(-(self.XSize), y, 0)
|
|
self.gridLines.drawTo(self.XSize, y, 0)
|
|
self.gridLines.moveTo(-(self.XSize), -y, 0)
|
|
self.gridLines.drawTo(self.XSize, -y, 0)
|
|
|
|
if(self.endCapLinesShow):
|
|
#Draw endcap lines
|
|
self.gridLines.moveTo(-(self.XSize), self.YSize, 0)
|
|
self.gridLines.drawTo(self.XSize, self.YSize, 0)
|
|
self.gridLines.moveTo(-(self.XSize), -(self.YSize), 0)
|
|
self.gridLines.drawTo(self.XSize, -(self.YSize), 0)
|
|
|
|
if((self.ZSize != 0) and (self.YZPlaneShow)):
|
|
#Draw z lines across y axis
|
|
#YZ Plane
|
|
for y in self.myfrange(0, self.YSize, self.gridStep):
|
|
self.gridLines.moveTo(0, y, -(self.ZSize))
|
|
self.gridLines.drawTo(0, y, self.ZSize)
|
|
self.gridLines.moveTo(0, -y, -(self.ZSize))
|
|
self.gridLines.drawTo(0, -y, self.ZSize)
|
|
|
|
if(self.endCapLinesShow):
|
|
#Draw endcap lines
|
|
self.gridLines.moveTo(0, self.YSize, -(self.ZSize))
|
|
self.gridLines.drawTo(0, self.YSize, self.ZSize)
|
|
self.gridLines.moveTo(0, -(self.YSize), -(self.ZSize))
|
|
self.gridLines.drawTo(0, -(self.YSize), self.ZSize)
|
|
|
|
#Draw primary grid lines metering z axis if any z-length
|
|
if(self.ZSize != 0):
|
|
if((self.XSize != 0) and (self.XZPlaneShow)):
|
|
#Draw x lines across z axis
|
|
#XZ Plane
|
|
for z in self.myfrange(0, self.ZSize, self.gridStep):
|
|
self.gridLines.moveTo(-(self.XSize), 0, z)
|
|
self.gridLines.drawTo(self.XSize, 0, z)
|
|
self.gridLines.moveTo(-(self.XSize), 0, -z)
|
|
self.gridLines.drawTo(self.XSize, 0, -z)
|
|
|
|
if(self.endCapLinesShow):
|
|
#Draw endcap lines
|
|
self.gridLines.moveTo(-(self.XSize), 0, self.ZSize)
|
|
self.gridLines.drawTo(self.XSize, 0, self.ZSize)
|
|
self.gridLines.moveTo(-(self.XSize), 0, -(self.ZSize))
|
|
self.gridLines.drawTo(self.XSize, 0, -(self.ZSize))
|
|
|
|
if((self.YSize != 0) and (self.YZPlaneShow)):
|
|
#Draw y lines across z axis
|
|
#YZ Plane
|
|
for z in self.myfrange(0, self.ZSize, self.gridStep):
|
|
self.gridLines.moveTo(0, -(self.YSize), z)
|
|
self.gridLines.drawTo(0, self.YSize, z)
|
|
self.gridLines.moveTo(0, -(self.YSize), -z)
|
|
self.gridLines.drawTo(0, self.YSize, -z)
|
|
|
|
if(self.endCapLinesShow):
|
|
#Draw endcap lines
|
|
self.gridLines.moveTo(0, -(self.YSize), self.ZSize)
|
|
self.gridLines.drawTo(0, self.YSize, self.ZSize)
|
|
self.gridLines.moveTo(0, -(self.YSize), -(self.ZSize))
|
|
self.gridLines.drawTo(0, self.YSize, -(self.ZSize))
|
|
|
|
#Check to see if secondary grid lines should be drawn
|
|
if(self.subdiv != 0):
|
|
|
|
#Draw secondary grid lines
|
|
self.subdivLines.setColor(self.subdivColor)
|
|
|
|
if(self.XSize != 0):
|
|
adjustedstep = self.gridStep / self.subdiv
|
|
if((self.YSize != 0) and (self.XYPlaneShow)):
|
|
#Draw y lines across x axis starting from center moving out
|
|
#XY
|
|
for x in self.myfrange(0, self.XSize, adjustedstep):
|
|
self.subdivLines.moveTo(x, -(self.YSize), 0)
|
|
self.subdivLines.drawTo(x, self.YSize, 0)
|
|
self.subdivLines.moveTo(-x, -(self.YSize), 0)
|
|
self.subdivLines.drawTo(-x, self.YSize, 0)
|
|
|
|
if((self.ZSize != 0) and (self.XZPlaneShow)):
|
|
#Draw z lines across x axis starting from center moving out
|
|
#XZ
|
|
for x in self.myfrange(0, self.XSize, adjustedstep):
|
|
self.subdivLines.moveTo(x, 0, -(self.ZSize))
|
|
self.subdivLines.drawTo(x, 0, self.ZSize)
|
|
self.subdivLines.moveTo(-x, 0, -(self.ZSize))
|
|
self.subdivLines.drawTo(-x, 0, self.ZSize)
|
|
|
|
if(self.YSize != 0):
|
|
if((self.YSize != 0) and (self.XYPlaneShow)):
|
|
#Draw x lines across y axis
|
|
#XY
|
|
for y in self.myfrange(0, self.YSize, adjustedstep):
|
|
self.subdivLines.moveTo(-(self.XSize), y, 0)
|
|
self.subdivLines.drawTo(self.XSize, y, 0)
|
|
self.subdivLines.moveTo(-(self.XSize), -y, 0)
|
|
self.subdivLines.drawTo(self.XSize, -y, 0)
|
|
if((self.ZSize != 0) and (self.YZPlaneShow)):
|
|
#Draw z lines across y axis
|
|
#YZ
|
|
for y in self.myfrange(0, self.YSize, adjustedstep):
|
|
self.subdivLines.moveTo(0, y, -(self.ZSize))
|
|
self.subdivLines.drawTo(0, y, self.ZSize)
|
|
self.subdivLines.moveTo(0, -y, -(self.ZSize))
|
|
self.subdivLines.drawTo(0, -y, self.ZSize)
|
|
|
|
if(self.ZSize != 0):
|
|
|
|
if((self.XSize != 0) and (self.XZPlaneShow)):
|
|
#Draw x lines across z axis
|
|
#XZ
|
|
for z in self.myfrange(0, self.ZSize, adjustedstep):
|
|
self.subdivLines.moveTo(-(self.XSize), 0, z)
|
|
self.subdivLines.drawTo(self.XSize, 0, z)
|
|
self.subdivLines.moveTo(-(self.XSize), 0, -z)
|
|
self.subdivLines.drawTo(self.XSize, 0, -z)
|
|
|
|
if((self.YSize != 0) and (self.YZPlaneShow)):
|
|
#Draw y lines across z axis
|
|
#YZ
|
|
for z in self.myfrange(0, self.ZSize, adjustedstep):
|
|
self.subdivLines.moveTo(0, -(self.YSize), z)
|
|
self.subdivLines.drawTo(0, self.YSize, z)
|
|
self.subdivLines.moveTo(0, -(self.YSize), -z)
|
|
self.subdivLines.drawTo(0, self.YSize, -z)
|
|
|
|
#Create ThreeAxisGrid nodes and nodepaths
|
|
#Create parent node and path
|
|
self.parentNode = PandaNode('threeaxisgrid-parentnode')
|
|
self.parentNodePath = NodePath(self.parentNode)
|
|
|
|
#Create axis lines node and path, then reparent
|
|
self.axisLinesNode = self.axisLines.create()
|
|
self.axisLinesNodePath = NodePath(self.axisLinesNode)
|
|
self.axisLinesNodePath.reparentTo(self.parentNodePath)
|
|
|
|
#Create grid lines node and path, then reparent
|
|
self.gridLinesNode = self.gridLines.create()
|
|
self.gridLinesNodePath = NodePath(self.gridLinesNode)
|
|
self.gridLinesNodePath.reparentTo(self.parentNodePath)
|
|
|
|
#Create subdivision lines node and path then reparent
|
|
self.subdivLinesNode = self.subdivLines.create()
|
|
self.subdivLinesNodePath = NodePath(self.subdivLinesNode)
|
|
self.subdivLinesNodePath.reparentTo(self.parentNodePath)
|
|
|
|
return self.parentNodePath
|
|
def myfrange(self, start, stop=None, step=None):
|
|
if stop is None:
|
|
stop = float(start)
|
|
start = 0.0
|
|
if step is None:
|
|
step = 1.0
|
|
cur = float(start)
|
|
while cur < stop:
|
|
yield cur
|
|
cur += step |