소스 검색

build squares and cubes and such

John Loehrlein 16 년 전
부모
커밋
f3ed10e426
1개의 변경된 파일384개의 추가작업 그리고 0개의 파일을 삭제
  1. 384 0
      direct/src/showutil/BuildGeometry.py

+ 384 - 0
direct/src/showutil/BuildGeometry.py

@@ -0,0 +1,384 @@
+from direct.distributed import DistributedObject
+from direct.directnotify import DirectNotifyGlobal
+from pandac.PandaModules import *
+from math import *
+import math
+
+GEO_ID = 0
+
+def circleX(angle, radius, centerX, centerY):
+    x = radius * cos(angle) + centerX
+    return x
+    
+def circleY(angle, radius, centerX, centerY):
+    y = radius * sin(angle) + centerY
+    return y
+
+def getCirclePoints(segCount, centerX, centerY, radius, wideX= 1.0, wideY = 1.0):
+    returnShape = []
+    for seg in range(0, segCount):
+        coordX = wideX * (circleX(((pi * 2.0) * float(float(seg) / float(segCount))), radius, centerX, centerY))
+        coordY = wideY * (circleY(((pi * 2.0) * float(float(seg) / float(segCount))), radius, centerX, centerY))
+        returnShape.append((coordX, coordY, 1))
+            
+    coordX =  wideX * (circleX(((pi * 2.0) * float(0 / segCount)), radius, centerX, centerY))
+    coordY =  wideY * (circleY(((pi * 2.0) * float(0 / segCount)), radius, centerX, centerY))
+    returnShape.append((coordX, coordY, 1))
+    return returnShape
+    
+def addCircle(attachNode, vertexCount, radius, color = Vec4(1.0, 1.0, 1.0, 1.0), layer = 0):
+    targetGN=GeomNode("Circle Geom")
+    zFloat = 0.025
+    targetCircleShape = getCirclePoints(5 + (vertexCount), 0.0, 0.0, radius)
+    gFormat = GeomVertexFormat.getV3cp()
+    targetCircleVertexData = GeomVertexData("holds my vertices", gFormat, Geom.UHDynamic)
+    targetCircleVertexWriter = GeomVertexWriter(targetCircleVertexData, "vertex")
+    targetCircleColorWriter = GeomVertexWriter(targetCircleVertexData, "color")
+    targetCircleVertexWriter.addData3f(0.0, 0.0, zFloat) #center
+    targetCircleColorWriter.addData4f(color[0], color[1], color[2], color[3])
+    
+    for vertex in targetCircleShape:
+        targetCircleVertexWriter.addData3f(0.0 + vertex[0] , 0.0 + vertex[1] , zFloat)
+        targetCircleColorWriter.addData4f(color[0], color[1], color[2], color[3])
+        
+    targetTris=GeomTrifans(Geom.UHStatic) # triangle obejcet
+    
+    sizeTarget = len(targetCircleShape)
+    targetTris.addVertex(0)        
+    for countVertex in range(1, sizeTarget + 1):
+        targetTris.addVertex(countVertex)
+    targetTris.addVertex(1)      
+    targetTris.closePrimitive()
+    
+    targetGeom=Geom(targetCircleVertexData)
+    targetGeom.addPrimitive(targetTris)
+    attachNode.addGeom(targetGeom)
+    return targetGeom
+    
+def addCircleGeom(rootNode,  vertexCount, radius, color = Vec4(1.0, 1.0, 1.0, 1.0), layer = 0):
+     global GEO_ID
+     GN=GeomNode("Circle %s" % (GEO_ID))
+     GEO_ID += 1
+     NodePathGeom = rootNode.attachNewNode(GN)
+     geo = addCircle(GN, vertexCount, radius, color, layer)
+     return NodePathGeom, GN, geo
+     
+def addSquare(attachNode, sizeX, sizeY, color = Vec4(1.0, 1.0, 1.0, 1.0), layer = 0):
+    targetGN=GeomNode("Square Geom")
+    sX = sizeX / 2.0
+    sY = sizeY / 2.0
+    
+    color1 = color
+    color2 = color
+    color3 = color
+
+    gFormat = GeomVertexFormat.getV3n3cpt2()
+    boxVertexData = GeomVertexData("vertices", gFormat, Geom.UHDynamic)
+    
+    boxVertexWriter = GeomVertexWriter(boxVertexData, "vertex")
+    boxNormalWriter = GeomVertexWriter(boxVertexData, "normal")
+    boxColorWriter = GeomVertexWriter(boxVertexData, "color")
+    boxTextureWriter = GeomVertexWriter(boxVertexData, "texcoord")
+
+    
+    boxVertexWriter.addData3f(-sX, sY, 0.0)
+    boxNormalWriter.addData3f(0, 0, 1)
+    boxColorWriter.addData4f(color[0], color[1], color[2], color[3])
+    boxTextureWriter.addData2f(0.0, 1.0)
+
+    boxVertexWriter.addData3f(-sX, -sY, 0.0)
+    boxNormalWriter.addData3f(0, 0, 1)
+    boxColorWriter.addData4f(color[0], color[1], color[2], color[3])
+    boxTextureWriter.addData2f(0.0, 0.0)
+
+    boxVertexWriter.addData3f(sX, -sY, 0.0)
+    boxNormalWriter.addData3f(0, 0, 1)
+    boxColorWriter.addData4f(color[0], color[1], color[2], color[3])
+    boxTextureWriter.addData2f(1.0, 0.0)
+
+    boxVertexWriter.addData3f(sX, sY, 0.0)
+    boxNormalWriter.addData3f(0, 0, 1)
+    boxColorWriter.addData4f(color[0], color[1], color[2], color[3])
+    boxTextureWriter.addData2f(1.0, 1.0)
+    
+    boxTris=GeomTristrips(Geom.UHStatic) # trianglestrip obejcet
+    
+    boxTris.addVertex(1)
+    boxTris.addVertex(2)   
+    boxTris.addVertex(0)   
+    boxTris.addVertex(3)   
+    boxTris.closePrimitive()
+
+    boxGeom=Geom(boxVertexData)
+    boxGeom.addPrimitive(boxTris)
+    
+    
+    attachNode.addGeom(boxGeom)
+    return boxGeom
+     
+def addSquareGeom(rootNode, sizeX, sizeY, color = Vec4(1.0, 1.0, 1.0, 1.0), layer = 0):
+     global GEO_ID
+     GN=GeomNode("Square %s" % (GEO_ID))
+     GEO_ID += 1
+     NodePathGeom = rootNode.attachNewNode(GN)
+     geo = addSquare(GN, sizeX, sizeY, color, layer)
+     return NodePathGeom, GN, geo
+     
+def addBox(attachNode, sizeX, sizeY, sizeZ, color = Vec4(1.0, 1.0, 1.0, 1.0), darken = 0):
+    targetGN=GeomNode("Box Geom")
+    sX = sizeX / 2.0
+    sY = sizeY / 2.0
+    sZ = sizeZ / 2.0
+    
+    color1 = color
+    color2 = color
+    color3 = color
+    if darken:
+        color1 = color * 0.75 #Vec4(0.0, 0.0, 0.0, 1.0)
+        color2 = color * 0.50 #Vec4(0.0, 0.0, 0.0, 1.0)
+        color3 = color * 0.25 #Vec4(0.0, 0.0, 0.0, 1.0)
+
+    gFormat = GeomVertexFormat.getV3n3cp()
+    boxVertexData = GeomVertexData("vertices", gFormat, Geom.UHDynamic)
+    
+    boxVertexWriter = GeomVertexWriter(boxVertexData, "vertex")
+    boxNormalWriter = GeomVertexWriter(boxVertexData, "normal")
+    boxColorWriter = GeomVertexWriter(boxVertexData, "color")
+    
+    
+    #Front
+    
+    boxVertexWriter.addData3f(sX, sY, sZ)
+    boxNormalWriter.addData3f(0, 1, 0)
+    boxColorWriter.addData4f(color[0], color[1], color[2], color[3])
+
+    boxVertexWriter.addData3f(sX, sY, -sZ)
+    boxNormalWriter.addData3f(0, 1, 0)
+    boxColorWriter.addData4f(color1[0], color1[1], color1[2], color1[3])
+
+    boxVertexWriter.addData3f(-sX, sY, -sZ)
+    boxNormalWriter.addData3f(0, 1, 0)
+    boxColorWriter.addData4f(color1[0], color1[1], color1[2], color1[3])
+
+    boxVertexWriter.addData3f(-sX, sY, sZ)
+    boxNormalWriter.addData3f(0, 1, 0)
+    boxColorWriter.addData4f(color1[0], color1[1], color1[2], color1[3])
+    
+    #Back
+    
+    boxVertexWriter.addData3f(-sX, -sY, sZ)
+    boxNormalWriter.addData3f(0, -1, 0)
+    boxColorWriter.addData4f(color2[0], color2[1], color2[2], color2[3])
+
+    boxVertexWriter.addData3f(-sX, -sY, -sZ)
+    boxNormalWriter.addData3f(0, -1, 0)
+    boxColorWriter.addData4f(color3[0], color3[1], color3[2], color3[3])
+
+    boxVertexWriter.addData3f(sX, -sY, -sZ)
+    boxNormalWriter.addData3f(0, -1, 0)
+    boxColorWriter.addData4f(color2[0], color2[1], color2[2], color2[3])
+
+    boxVertexWriter.addData3f(sX, -sY, sZ)
+    boxNormalWriter.addData3f(0, -1, 0)
+    boxColorWriter.addData4f(color2[0], color2[1], color2[2], color2[3])
+    
+    #Top
+    
+    boxVertexWriter.addData3f(-sX, sY, sZ)
+    boxNormalWriter.addData3f(0, 0, 1)
+    boxColorWriter.addData4f(color[0], color[1], color[2], color[3])
+
+    boxVertexWriter.addData3f(-sX, -sY, sZ)
+    boxNormalWriter.addData3f(0, 0, 1)
+    boxColorWriter.addData4f(color[0], color[1], color[2], color[3])
+
+    boxVertexWriter.addData3f(sX, -sY, sZ)
+    boxNormalWriter.addData3f(0, 0, 1)
+    boxColorWriter.addData4f(color[0], color[1], color[2], color[3])
+
+    boxVertexWriter.addData3f(sX, sY, sZ)
+    boxNormalWriter.addData3f(0, 0, 1)
+    boxColorWriter.addData4f(color[0], color[1], color[2], color[3])
+    
+    #Bottom
+    
+    boxVertexWriter.addData3f(sX, sY, -sZ)
+    boxNormalWriter.addData3f(0, 0, -1)
+    boxColorWriter.addData4f(color3[0], color3[1], color3[2], color3[3])
+
+    boxVertexWriter.addData3f(sX, -sY, -sZ)
+    boxNormalWriter.addData3f(0, 0, -1)
+    boxColorWriter.addData4f(color3[0], color3[1], color3[2], color3[3])
+
+    boxVertexWriter.addData3f(-sX, -sY, -sZ)
+    boxNormalWriter.addData3f(0, 0, -1)
+    boxColorWriter.addData4f(color3[0], color3[1], color3[2], color3[3])
+
+    boxVertexWriter.addData3f(-sX, sY, -sZ)
+    boxNormalWriter.addData3f(0, 0, -1)
+    boxColorWriter.addData4f(color3[0], color3[1], color3[2], color3[3])
+    
+    #Right
+    
+    boxVertexWriter.addData3f(sX, sY, sZ)
+    boxNormalWriter.addData3f(0, 0, 1)
+    boxColorWriter.addData4f(color[0], color[1], color[2], color[3])
+
+    boxVertexWriter.addData3f(sX, -sY, sZ)
+    boxNormalWriter.addData3f(0, 0, 1)
+    boxColorWriter.addData4f(color1[0], color1[1], color1[2], color1[3])
+
+    boxVertexWriter.addData3f(sX, -sY, -sZ)
+    boxNormalWriter.addData3f(0, 0, 1)
+    boxColorWriter.addData4f(color1[0], color1[1], color1[2], color1[3])
+
+    boxVertexWriter.addData3f(sX, sY, -sZ)
+    boxNormalWriter.addData3f(0, 0, 1)
+    boxColorWriter.addData4f(color1[0], color1[1], color1[2], color1[3])
+    
+    
+    #Left
+    
+    boxVertexWriter.addData3f(-sX, sY, -sZ)
+    boxNormalWriter.addData3f(0, 0, 1)
+    boxColorWriter.addData4f(color2[0], color2[1], color2[2], color2[3])
+
+    boxVertexWriter.addData3f(-sX, -sY, -sZ)
+    boxNormalWriter.addData3f(0, 0, 1)
+    boxColorWriter.addData4f(color3[0], color3[1], color3[2], color3[3])
+
+    boxVertexWriter.addData3f(-sX, -sY, sZ)
+    boxNormalWriter.addData3f(0, 0, 1)
+    boxColorWriter.addData4f(color2[0], color2[1], color2[2], color2[3])
+
+    boxVertexWriter.addData3f(-sX, sY, sZ)
+    boxNormalWriter.addData3f(0, 0, 1)
+    boxColorWriter.addData4f(color2[0], color2[1], color2[2], color2[3])
+
+        
+    boxTris=GeomTristrips(Geom.UHStatic) # trianglestrip obejcet
+    boxTris.addVertex(0)#(1)
+    boxTris.addVertex(1)#(2)   
+    boxTris.addVertex(3)#(0)   
+    boxTris.addVertex(2)#(3)   
+    boxTris.closePrimitive()
+    
+    boxTris.addVertex(5)
+    boxTris.addVertex(6)   
+    boxTris.addVertex(4)   
+    boxTris.addVertex(7)   
+    boxTris.closePrimitive()
+    
+    boxTris.addVertex(9)
+    boxTris.addVertex(10)   
+    boxTris.addVertex(8)   
+    boxTris.addVertex(11)   
+    boxTris.closePrimitive()
+    
+    boxTris.addVertex(13)
+    boxTris.addVertex(14)   
+    boxTris.addVertex(12)   
+    boxTris.addVertex(15)   
+    boxTris.closePrimitive()
+    
+    boxTris.addVertex(16) #(17)
+    boxTris.addVertex(17) #(18) 
+    boxTris.addVertex(19) #(16) 
+    boxTris.addVertex(18) #(19) 
+    boxTris.closePrimitive()
+    
+    boxTris.addVertex(21)
+    boxTris.addVertex(22)   
+    boxTris.addVertex(20)   
+    boxTris.addVertex(23)   
+    boxTris.closePrimitive()
+    
+    boxGeom=Geom(boxVertexData)
+    boxGeom.addPrimitive(boxTris)
+    
+    
+    attachNode.addGeom(boxGeom)
+    return boxGeom
+    
+def addBoxGeom(rootNode, sizeX, sizeY, sizeZ, color = Vec4(1.0, 1.0, 1.0, 1.0), darken = 0):
+     global GEO_ID
+     GN=GeomNode("Box %s" % (GEO_ID))
+     GEO_ID += 1
+     nodePathGeom = rootNode.attachNewNode(GN)
+     geo = addBox(GN, sizeX, sizeY, sizeZ, color, darken)
+     return nodePathGeom, GN, geo
+     
+     
+def addArrow(attachNode, sizeX, sizeY, color = Vec4(1.0, 1.0, 1.0, 1.0), layer = 0):
+    targetGN=GeomNode("Arrow Geom")
+    sX = sizeX / 2.0
+    sY = sizeY / 2.0
+    
+    color1 = color
+    color2 = color
+    color3 = color
+
+    gFormat = GeomVertexFormat.getV3n3cp()
+    boxVertexData = GeomVertexData("vertices", gFormat, Geom.UHDynamic)
+    
+    boxVertexWriter = GeomVertexWriter(boxVertexData, "vertex")
+    boxNormalWriter = GeomVertexWriter(boxVertexData, "normal")
+    boxColorWriter = GeomVertexWriter(boxVertexData, "color")
+
+    
+    boxVertexWriter.addData3f(-sX, sY, 0.0)
+    boxNormalWriter.addData3f(0, 0, 1)
+    boxColorWriter.addData4f(color[0], color[1], color[2], color[3])
+
+    boxVertexWriter.addData3f(-sX, -sY, 0.0)
+    boxNormalWriter.addData3f(0, 0, 1)
+    boxColorWriter.addData4f(color[0], color[1], color[2], color[3])
+
+    boxVertexWriter.addData3f(sX, -sY, 0.0)
+    boxNormalWriter.addData3f(0, 0, 1)
+    boxColorWriter.addData4f(color[0], color[1], color[2], color[3])
+
+    boxVertexWriter.addData3f(sX, sY, 0.0)
+    boxNormalWriter.addData3f(0, 0, 1)
+    boxColorWriter.addData4f(color[0], color[1], color[2], color[3])
+    
+    boxTris=GeomTristrips(Geom.UHStatic) # trianglestrip obejcet
+    
+    boxTris.addVertex(1)
+    boxTris.addVertex(2)   
+    boxTris.addVertex(0)   
+    boxTris.addVertex(3)   
+    boxTris.closePrimitive()
+    
+    boxVertexWriter.addData3f(-sX * 2.0, sY, 0.0)
+    boxNormalWriter.addData3f(0, 0, 1)
+    boxColorWriter.addData4f(color[0], color[1], color[2], color[3])
+
+    boxVertexWriter.addData3f(sX * 2.0, sY, 0.0)
+    boxNormalWriter.addData3f(0, 0, 1)
+    boxColorWriter.addData4f(color[0], color[1], color[2], color[3])
+
+    boxVertexWriter.addData3f(0.0, sY * 2.0, 0.0)
+    boxNormalWriter.addData3f(0, 0, 1)
+    boxColorWriter.addData4f(color[0], color[1], color[2], color[3])
+    
+    boxTris.addVertex(4)
+    boxTris.addVertex(5)   
+    boxTris.addVertex(6)   
+    boxTris.closePrimitive()
+
+
+    boxGeom=Geom(boxVertexData)
+    boxGeom.addPrimitive(boxTris)
+    
+    
+    attachNode.addGeom(boxGeom)
+    return boxGeom
+     
+def addArrowGeom(rootNode, sizeX, sizeY, color = Vec4(1.0, 1.0, 1.0, 1.0), layer = 0):
+     global GEO_ID
+     GN=GeomNode("Arrow %s" % (GEO_ID))
+     GEO_ID += 1
+     NodePathGeom = rootNode.attachNewNode(GN)
+     geo = addArrow(GN, sizeX, sizeY, color, layer)
+     return NodePathGeom, GN, geo