ok, I am close but I seem to be doing something wrong
a bit of help?
import bge
from mathutils import Vector
def main():
cont = bge.logic.getCurrentController()
own = cont.owner
MOA = cont.sensors['MOA']
LeftClick = cont.sensors['Mouse1']
scene = bge.logic.getCurrentScene()
cam = scene.objects['Empty']
timer = cont.sensors['Timer']
if timer.positive:
if MOA.positive and not LeftClick.positive:
cam.alignAxisToVect(MOA.hitPosition-cam.worldPosition,0,1)
D=cam.getDistanceTo(MOA.hitPosition)+.1
Ray = cam.rayCast(cam.worldPosition+(cam.worldOrientation.col[0]*D),cam.worldPosition,0,'',0,0,0)
bge.render.drawLine(cam.worldPosition,MOA.hitPosition,(1,0,0))
if Ray[0]:
##print(Ray[0])
added = scene.addObject('HL',own,1)
added.worldPosition=Ray[0].worldPosition
added.alignAxisToVect(Vector(Ray[2]),0,1)
added.worldPosition=added.worldPosition+(added.worldOrientation.col[0]*2)
if MOA.positive and LeftClick.positive and own['timer']==0:
cam.alignAxisToVect(MOA.hitPosition-cam.worldPosition,0,1)
D=cam.getDistanceTo(MOA.hitPosition)+.1
Ray = cam.rayCast(cam.worldPosition+(cam.worldOrientation.col[0]*D),cam.worldPosition,0,'',0,0,0)
if Ray[0] and own['timer']==0:
TMesh= scene.addObject(MOA.hitObject['Tmesh'],MOA.hitObject,1)
Ray2 = cam.rayCast(cam.worldPosition+(cam.worldOrientation.col[0]*D),cam.worldPosition,0,'TMESH',0,1,1)
if Ray2[0]:
Poly = Ray2[3]
print(Ray2[0])
added = scene.addObject('PlaceBlock',own,0)
added.worldPosition=Ray[0].worldPosition
added.alignAxisToVect(Vector(Ray[2]),0,1)
print("PolyProxy is "+str(Ray2[3]))
v=[0,0,0]
v1=Ray2[3].v1
v2=Ray2[3].v2
v3=Ray2[3].v3
if Ray2[3].v4:
v4=Ray2[3].v4
L=[v1,v2,v3,v4]
else:
L=[v1,v2,v3]
avg=Vector([0,0,0])
for Vert in L:
for mesh in Ray2[0].meshes:
vertex = mesh.getVertex(0, Vert)
avg+=Vector(vertex.XYZ)
if Ray2[3].v4:
avg = avg*.25
else:
avg = avg*(1/3)
##now how do I compute the face normal?
Dist=Ray[0].worldPosition-avg
print(Dist)
added.worldPosition=added.worldPosition+(added.worldOrientation.col[0]*Dist.magnitude)
added.worldPosition=added.worldPosition+(added.worldOrientation.col[0]*added['offset'])
V2=Ray[2]
own['timer']=30
main()
Attachments
Placeblock.blend (547 KB)