Function UserObjectPick:HANDLE; VAR X,Y:REAL; ObHd:HANDLE; BEGIN GetPt(X,Y); ObHd:=PickObject(X,Y); UserObjectPick:=ObHd; END; Function TwoClickAngle(p1x,p1y,p2x,p2y:REAL):REAL; VAR axisVector:VECTOR; BEGIN axisVector[1]:=p2x-p1x; axisVector[2]:=p2y-p1y; axisVector[3]:=0; TwoClickAngle:=Vec2Ang(axisVector); END; Procedure InteractiveRotate(ObHd:HANDLE;XRot,YRot,ZRot:REAL); VAR xC,yC,zC,xR:REAL; KCod:INTEGER; BEGIN Get3DCntr(ObHd,xC,yC,zC); KCod:=0; WHILE KCod <> 32 DO BEGIN REPEAT UNTIL KeyDown(KCod); IF KCod = 52 THEN Set3DRot(ObHd,0,-yRot,0,xC,yC,zC) ELSE IF KCod = 54 THEN Set3DRot(ObHd,0,yRot,0,xC,yC,zC) ELSE IF KCod = 50 THEN Set3DRot(ObHd,-xRot,0,0,xC,yC,zC) ELSE IF KCod = 56 THEN Set3DRot(ObHd,xRot,0,0,xC,yC,zC) ELSE IF KCod = 55 THEN Set3DRot(ObHd,0,0,-zRot,xC,yC,zC) ELSE IF KCod = 51 THEN Set3DRot(ObHd,0,0,zRot,xC,yC,zC); Redraw; END; ReDraw; END; Procedure InteractiveMove(ObHd:HANDLE;X,Y,Z:REAL); VAR xC,yC,zC,xR:REAL; KCod:INTEGER; BEGIN Get3DCntr(ObHd,xC,yC,zC); KCod:=0; WHILE KCod <> 32 DO BEGIN REPEAT UNTIL KeyDown(KCod); IF KCod = 52 THEN Move3DObj(ObHd,X,0,0) ELSE IF KCod = 54 THEN Move3DObj(ObHd,-X,0,0) ELSE IF KCod = 50 THEN Move3DObj(ObHd,0,Y,0) ELSE IF KCod = 56 THEN Move3DObj(ObHd,0,-Y,0) ELSE IF KCod = 55 THEN Move3DObj(ObHd,0,0,Z) ELSE IF KCod = 51 THEN Move3DObj(ObHd,0,0,-Z) Redraw; END; ReDraw; END;