001 /*
002 * @(#)MohrArc.java
003 */
004
005 import java.awt.*;
006 import javax.swing.*;
007 import java.awt.geom.*;
008
009 import wc.*;
010
011 /**
012 * MohrArc.java - Desenho de um arco genérico com nome.
013 *
014 * <p>
015 * Descrição:
016 * <p>
017 * ===============================================================
018 * <p>
019 * Este arquivo contém a definição da classe para um arco
020 * genérico com nome para desenhar em um canvas.
021 *
022 * A função de desenho recebe a seguinte informação para
023 * desenho:
024 *
025 * - Centro do arco
026 * - Ponto que define ângulo inicial
027 * - Ponto que define ângulo final
028 * - Raio do arco
029 * - String com texto do nome
030 * <p>
031 * ===============================================================
032 *
033 * @version 1.0 04/09/2004
034 * @author Luiz Fernando Martha
035 * @author Alonso Juvinao Carbono
036 * @author Anderson Resende Pereira
037 * @author Fernando Busato Ramires
038 * @author Paôla Reginal Dalcanal
039 * @author Ricardo Rodrigues de Araujo
040 *
041 */
042 public class MohrArc
043 {
044
045 /*
046 ** ---------------------------------------------------------------
047 ** Protected instance variables:
048 */
049
050 /** Objeto arco */
051 protected Arc2D.Double arc;
052
053
054 /*
055 ** ---------------------------------------------------------------
056 ** Public methods:
057 */
058
059 /*======================= Constructor =========================*/
060 /**
061 * Cria um objeto MohrPlane.
062 */
063 public MohrArc( )
064 {
065 arc = new Arc2D.Double( );
066 }
067
068 /*============================= getAng =========================*/
069 /**
070 * Esta função retorna o valor do ângulo em radianos que a linha
071 * (x-xc,y-yc) faz com a horizontal.
072 */
073 protected static double getAng( double xc, double yc, double x, double y )
074 {
075 double s;
076 double ang;
077
078 s = Math.sqrt( (x-xc) * (x-xc) + (y-yc) * (y-yc) );
079 if( s == 0.0 )
080 return( Math.PI/2.0 );
081
082 ang = Math.atan2( y-yc, x-xc );
083
084 return( ang );
085 }
086
087 /*======================== DrawArc =========================*/
088 /**
089 * Desenha um arco de acordo com os dados fornecidos.
090 * @param centerx - coordenada x do centro do arco
091 * @param centery - coordenada y do centro do arco
092 * @param point0x - coordenada x do ponto que define ângulo inicial
093 * @param point0y - coordenada y do ponto que define ângulo inicial
094 * @param point1x - coordenada x do ponto que define ângulo final
095 * @param point1y - coordenada y do ponto que define ângulo final
096 * @param radius - raio do arco
097 * @param name - string com texto do nome
098 */
099 public void DrawArc( CanvasWC canvas, Graphics2D g, Color c,
100 double centerx, double centery,
101 double point0x, double point0y,
102 double point1x, double point1y,
103 double radius, String name, double shift,
104 BasicStroke arc_stroke )
105 {
106 double ang0 = getAng( centerx, centery, point0x, point0y );
107 double ang1 = getAng( centerx, centery, point1x, point1y );
108 double diam = radius * 2.0;
109 double angext;
110 double angmid;
111 double sin_a;
112 double cos_a;
113 double x;
114 double y;
115 double pi = Math.PI;
116
117 if( (ang0 > 0.0) && (ang1 < 0.0) )
118 angext = 2.0*pi + (ang1 - ang0);
119 else if( ang1 < ang0 )
120 angext = 2.0*pi + (ang1 - ang0);
121 else
122 angext = ang1 - ang0;
123 angmid = ang0 + (angext * 0.5);
124
125 g.setColor( c );
126 g.setStroke( arc_stroke );
127
128 arc.setArc( centerx-radius, centery-radius, diam, diam,
129 -Math.toDegrees( ang0 ), -Math.toDegrees( angext ),
130 Arc2D.OPEN );
131 g.draw( arc );
132
133 g.setColor( Color.black );
134 canvas.setTextAlignment( CanvasWC.CENTER );
135 sin_a = Math.sin( angmid );
136 cos_a = Math.cos( angmid );
137 x = centerx + (radius+shift)*cos_a;
138 y = centery + (radius+shift)*sin_a;
139 canvas.drawString( name, x, y );
140 }
141
142 /*======================== DrawCircle =========================*/
143 /**
144 * Desenha um circulo completo de acordo com os dados fornecidos.
145 * @param centerx - coordenada x do centro do arco
146 * @param centery - coordenada y do centro do arco
147 * @param point0x - coordenada x do ponto que define ângulo inicial
148 * @param point0y - coordenada y do ponto que define ângulo inicial
149 * @param radius - raio do arco
150 * @param name - string com texto do nome
151 */
152 public void DrawCircle( CanvasWC canvas, Graphics2D g, Color c,
153 double centerx, double centery,
154 double point0x, double point0y,
155 double radius, String name, double shift,
156 BasicStroke arc_stroke )
157 {
158 double ang0 = getAng( centerx, centery, point0x, point0y );
159 double diam = radius * 2.0;
160 double angmid;
161 double sin_a;
162 double cos_a;
163 double x;
164 double y;
165 double pi = Math.PI;
166
167 angmid = ang0 + pi;
168
169 g.setColor( c );
170 g.setStroke( arc_stroke );
171
172 arc.setArc( centerx-radius, centery-radius, diam, diam,
173 -Math.toDegrees( ang0 ), -Math.toDegrees( 2.0*pi ),
174 Arc2D.OPEN );
175 g.draw( arc );
176
177 g.setColor( Color.black );
178 canvas.setTextAlignment( CanvasWC.CENTER );
179 sin_a = Math.sin( angmid );
180 cos_a = Math.cos( angmid );
181 x = centerx + (radius+shift)*cos_a;
182 y = centery + (radius+shift)*sin_a;
183 canvas.drawString( name, x, y );
184 }
185
186 }