DynamicModule[{pts={}},

Row[{LocatorPane[Dynamic[pts],

Graphics[{White,Inset["Viktor Wegmayr 2013 ETH Zürich",{-7.0,-9.7}],

Red,Thick,Dynamic[

If[Mod[Length[pts],2]==0,

Table[Line[{pts[[i]]+(pts[[i]]-pts[[i+1]])10^3,pts[[i]]-(pts[[i]]-pts[[i+1]])10^3}],{i,1,Length[pts],2}],Table[Line[{pts[[i]]+(pts[[i]]-pts[[i+1]])10^3,pts[[i]]-(pts[[i]]-pts[[i+1]])10^3}],{i,1,Length[pts]-1,2}]]],

Green,PointSize[Large],Dynamic[
If[Length[pts]>3,Point[Delete[Cross[Cross[Append[pts[[1]],5],Append[pts[[2]],5]],Cross[Append[pts[[3]],5],Append[pts[[4]],5]]]/Cross[Cross[Append[pts[[1]],5],Append[pts[[2]],5]],Cross[Append[pts[[3]],5],Append[pts[[4]],5]]][[3]]*5,3]],{}]]},


PlotRange->{{-10,10},{-10,10}}
,ImageSize->500,Background->LightBlue],
LocatorAutoCreate->True,Appearance->Style["●",Medium]],


Dynamic[

Show[{

ContourPlot3D[Evaluate[Flatten[{

z==5,
If[Length[pts]>1,Table[Cross[Append[pts[[i]],5],Append[pts[[i+1]],5]].{x,y,z}==0,{i,1,Length[pts]-Mod[Length[pts],2],2}],{}]}]],

{x,-10,10},{y,-10,10},{z,-5,10},ContourStyle->Table[Opacity[0.5],{i,1,(Length[pts]-Mod[Length[pts],2])/2+1}],ImageSize->500,Mesh->None,Ticks->False,Axes->False,Boxed->False],

Graphics3D[{

Red,Thick,
If[Length[pts]>1,Table[Line[{Append[pts[[i]],5]+(Append[pts[[i]],5]-Append[pts[[i+1]],5])10,Append[pts[[i]],5]-(Append[pts[[i]],5]-Append[pts[[i+1]],5])10}],{i,1,Length[pts]-Mod[Length[pts],2],2}],{}],

Black,PointSize[Large],

Table[Line[{(Append[pts[[i]],5])10^3,-(Append[pts[[i]],5])10^3}],{i,1,Length[pts]}],
Table[Point[Append[pts[[i]],5]],{i,1,Length[pts]}],
Point[{0,0,0}],

Green,
If[Length[pts]>3,Point[Cross[Cross[Append[pts[[1]],5],Append[pts[[2]],5]],Cross[Append[pts[[3]],5],Append[pts[[4]],5]]]/Cross[Cross[Append[pts[[1]],5],Append[pts[[2]],5]],Cross[Append[pts[[3]],5],Append[pts[[4]],5]]][[3]]*5],{}],
If[Length[pts]>3,Line[{-10^3Cross[Cross[Append[pts[[1]],5],Append[pts[[2]],5]],Cross[Append[pts[[3]],5],Append[pts[[4]],5]]],10^3Cross[Cross[Append[pts[[1]],5],Append[pts[[2]],5]],Cross[Append[pts[[3]],5],Append[pts[[4]],5]]]}],{}](*,

Opacity[0.1],Cylinder[{{0,0,0},{0,0,0.001}},3]*)


},Axes->False,Boxed->False]}]]

}]
]