double Graph::vectorpointdisplay(HDC hDC, const VECTOR3 &target, MFD *mfd, VESSEL *vessel, bool isposition)
//targetvector is a vector in the global reference plane
//isposition true
{
VECTOR3 trtarget,temp;
VESSELSTATUS status;
if (isposition)
{
vessel->GetGlobalPos(temp);
temp=target-temp;
}
else
{
temp=target;
}
vessel->GetStatus(status);
VECTOR3 arot=status.arot;
MATRIX3 rotmatrix;
getinvrotmatrix(arot,&rotmatrix);
trtarget = mul(rotmatrix, temp);
int lines=int(windowsize/10);
int edge=int(windowsize/1.5);
int centre=int(windowsize/3);
HPEN pen;
pen=mfd->SelectDefaultPen(hDC,TransXFunction::White);
Arc(hDC, ixstart,iystart+lines,ixstart+edge,iystart+edge+lines,ixstart,iystart+centre,ixstart,iystart+centre);
edge-=centre/3;
int nearedge=centre/3;
Arc(hDC,ixstart+nearedge,iystart+nearedge+lines,ixstart+edge,iystart+edge+lines,ixstart+nearedge,iystart+centre,ixstart+nearedge,iystart+centre);
edge-=centre/3;
nearedge+=centre/3;
Arc(hDC,ixstart+nearedge,iystart+nearedge+lines,ixstart+edge,iystart+edge+lines,ixstart+nearedge,iystart+centre,ixstart+nearedge,iystart+centre);
edge=int(windowsize/1.5);
MoveToEx(hDC,ixstart+centre,iystart+lines,NULL);
LineTo(hDC,ixstart+centre,iystart+edge+lines);
MoveToEx(hDC,ixstart,iystart+centre+lines,NULL);
LineTo(hDC, ixstart+edge,iystart+centre+lines);
double offsetsize=sqrt(trtarget.x*trtarget.x+trtarget.y*trtarget.y);
double scalar=sqrt(2.0) / 2;
double xang=trtarget.x/offsetsize;
double yang=-trtarget.y/offsetsize;
offsetsize=sqrt(offsetsize/trtarget.z);
if (offsetsize>scalar || trtarget.z<0) offsetsize=scalar;
offsetsize=offsetsize/scalar*windowsize/3;
int xpos=int(offsetsize*xang+centre+ixstart);
int ypos=int(offsetsize*yang+centre+lines+iystart);
pen=mfd->SelectDefaultPen(hDC,TransXFunction::Green);
MoveToEx(hDC,xpos-3,ypos-3,NULL);
LineTo(hDC,xpos+3,ypos+3);
MoveToEx(hDC,xpos-3,ypos+3,NULL);
LineTo(hDC,xpos+3,ypos-3);
return length(trtarget);
}