function EExecDD &Out_Prm1 &Out_Prm2 &Out_Prm3 &Out_Prm4 X Y Z Att1 Att2 Att3 Att4 Sg1 Sg2 Sg3 FM = ( local Result,X1,Y1,X2,Y2,S,C,Dl,X3,Y3,X4,Y4,Q,A,B,RR,Val,Xp,Yp,Xc1,Yc1,Xc2,Yc2,XC11,YC11,XC22,YC22,Df if (X==undefined) or (Y==undefined) or (Z==undefined) then return false if ((X.OB=="O") and (Y.OB=="P") and (((Z.OB=="C") and IsReal Z ) or (Z.OB=="D")) and (IsSobstv X ) and (IsSobstv Y ) and (IsReal Y )) then ( if (Sg1>0) then ( X1=X.X1.Re Y1=X.Y1.Re X2=X.X2.Re Y2=X.Y2.Re ) else ( X2=X.X1.Re Y2=X.Y1.Re X1=X.X2.Re Y1=X.Y2.Re ) SCDP=SC X1 Y1 X2 Y2 &S &C &Dl Df=Fi 0. 1. S C X3=Y.X.Re Y3=Y.Y.Re if (Z.OB=="C") then Rr=Z.C.Re*Sg3 if (Z.OB=="D") then Rr=Z.R.Re*Sg3 Dx=PI/2.+Df X4=X3+100.*Cos (Dx) Y4=Y3+100.*Sin (Dx) Q=LinLin X1 Y1 X2 Y2 X3 Y3 X4 Y4 A=Sqr (X3-Q.X)+ Sqr (Y3-Q.Y) if (Sqrt (A) > 2.*Abs (Rr)) then ( if (Att1.Chk==1) then TOEmpty_Create &Out_Prm1 Att1 if (Att2.Chk==1) then TOEmpty_Create &Out_Prm2 Att2 if (Att3.Chk==1) then TOEmpty_Create &Out_Prm3 Att3 if (Att4.Chk==1) then TOEmpty_Create &Out_Prm4 Att4 return true ); Val=(Abs Rr)/Sqrt (Sqr (X3-Q.X) + Sqr (Y3-Q.Y)) Xp=Q.X+(X3-Q.X)*Val Yp=Q.Y+(Y3-Q.Y)*Val A=Sqr(Xp-X3)+Sqr(Yp-Y3) B=Sqrt (Sqr (Rr) -A) Val=B/Sqrt (Sqr (X2-X1) +Sqr (Y2-Y1)) Xc1=Xp-(X2-X1)*Val Yc1=Yp-(Y2-Y1)*Val Xc2=Xp+(X2-X1)*Val Yc2=Yp+(Y2-Y1)*Val Xc11.Re=0.; Xc11.Im=0. Yc11.Re=0.; Yc11.Im=0. Xc22.Re=0.; Xc22.Im=0. Yc22.Re=0.; Yc22.Im=0. Xc11.Re=Q.X-(X2-X1)*Val Yc11.Re=Q.Y-(Y2-Y1)*Val Xc22.Re=Q.X+(X2-X1)*Val Yc22.Re=Q.Y+(Y2-Y1)*Val if ( not (PointBelongs X Xc11.Re Yc11.Re)) then ( if (Att1.Chk==1) then TOEmpty_Create &Out_Prm1 Att1 if (Att2.Chk==1) then TOEmpty_Create &Out_Prm2 Att2 ) else ( TOPoint_Create &Out_Prm2 Xc11 Yc11 1 Att2 TODuga_Create &Out_Prm1 (Complex Xc1 0) (Complex Yc1 0) (Complex Rr 0) Xc11.Re Yc11.Re X3 Y3 Att1 AddInc Out_Prm1 Out_Prm2 AddInc Out_Prm1 Y AddInc X Out_Prm2 ) if ( not (PointBelongs X Xc22.Re Yc22.Re)) then ( if (Att3.Chk==1) then TOEmpty_Create &Out_Prm3 Att3 if (Att4.Chk==1) then TOEmpty_Create &Out_Prm4 Att4 ) else ( TOPoint_Create &Out_Prm4 Xc22 Yc22 1 Att4 TODuga_Create &Out_Prm3 (Complex Xc2 0) (Complex Yc2 0) (Complex Rr 0) X3 Y3 Xc22.Re Yc22.Re Att3 AddInc Out_Prm4 Out_Prm3 AddInc Y Out_Prm3 AddInc Out_Prm4 X ) ) else ( if (Att1.Chk==1) then TOEmpty_Create &Out_Prm1 Att1; if (Att2.Chk==1) then TOEmpty_Create &Out_Prm2 Att2; if (Att3.Chk==1) then TOEmpty_Create &Out_Prm3 Att3; if (Att4.Chk==1) then TOEmpty_Create &Out_Prm4 Att4; ); return true ) -- EExecDD