/// <summary> /// constutor. /// </summary> /// <param name="cena">Imagem para ser processada neste control (retirada dos eixos 2D).</param> /// <param name="location">Parâmetro de posição do canto superior esquerdo do control.</param> /// <param name="pai">control que servirá de container para o control currente.</param> ///<param name="tamanhoGzimo">determina as dimensões do Gzimo.</param> ///<param name="tamanhoImagens">estabelece o tamanho de cada imagem adicionada ao control</param> /// <param name="typeGzm">tipo de cursor especial que age sobre o control</param> /// <param name="extensionSize">número para aumento da área de atuação do control currente.</param> /// <param name="fatorIsometrico">fator de divisão do eixo 3D que é projetado nos eixos 2D.</param> /// <param name="tipoPerspectiva">tipo de perspectiva [true]: isométrica, [false]: geométrica.</param> public usrCtrBxDeterminaEixos(Bitmap _cena, PointF location, Control pai, Size tamanhoGzimo, Size tamanhoImagens, double fatorIsometrico, bool tipoPerspectiva) { if (tipoPerspectiva) { this.perspectiva = vetor3.transformacaoPerspectivaIsometrica; } else { this.perspectiva = vetor3.transformacaoPerspectivaGeometrica; } this.fatorIso = fatorIsometrico; this.perspectivaIsometrica = tipoPerspectiva; this.typeAngleForRotationGzimo = vetor3.tipoAngulo.Relativo; this.Location = new Point((int)location.X, (int)location.Y); this.cena = new Bitmap(_cena); this.lstBasesGuardadas = new List <vetor3[]>(); this.cmBxBasesGuardadas = new ComboBox(); posicaoCursor = new PointF(location.X, location.Y); Matriz3DparaImagem2D.transformacaoPerspectiva perspectiva = null; if (tipoPerspectiva) { perspectiva = vetor3.transformacaoPerspectivaIsometrica; } else { perspectiva = vetor3.transformacaoPerspectivaGeometrica; } this.gzimosCurrentes = new GzimoEixos[1]; //________________________________________________________________________________________________________________________ // incializa a imagem que guardará tudo para ser desenhado neste control. cenaInteira = new Bitmap((int)(this.cena.Width * 4.0), (int)(this.cena.Height * 4.0)); //_________________________________________________________________________________________________________________________ // seta o ponteiro de função de evento de girar a roda do mouse. this.MouseWheel += usrCtrBxDeterminaEixos_MouseWheel; // seta o ponteiro de função de eventos de clicar com o mouse sobre o control. this.MouseDown += usrCtrBxDeterminaEixos_MouseWheel; // adiciona o control à window pai. pai.Controls.Add(this); // calcula o tamanho do current control. this.Size = new Size(this.cenaInteira.Width + 20, this.cenaInteira.Height + 20); // seta o control container. this.controlContainer = pai; // redesenha o control. this.Refresh(); }
} // void descentraliza() /// <summary> /// rotaciona o Gzimo eixos em um determinado plano (XZ,YZ ou XY). /// </summary> /// <param name="omega">ângulo para rotacionar o plano parâmetro, deve estar em graus.</param> /// <param name="pln">plano para rotacionar.</param> public void rotacionaGzimoEixos(double omega, vetor3.planoRotacao pln, vetor3.tipoAngulo typeAngle) { double omegaX, omegaY, omegaZ; omegaX = 0.0; omegaY = 0.0; omegaZ = 0.0; switch (pln) { case vetor3.planoRotacao.XY: omegaX = 0.0; omegaY = 0.0; omegaZ = omega; break; case vetor3.planoRotacao.XZ: omegaX = 0.0; omegaY = omega; omegaZ = 0.0; break; case vetor3.planoRotacao.YZ: omegaX = omega; omegaY = 0.0; omegaZ = 0.0; break; } // switch if (typeAngle == vetor3.tipoAngulo.Relativo) { // rotaciona os eixos. this.eixoXGzimo.rotacionaVetor(omegaY, omegaX, omegaZ); this.eixoYGzimo.rotacionaVetor(omegaY, omegaX, omegaZ); this.eixoZGzimo.rotacionaVetor(omegaY, omegaX, omegaZ); this.eixoXGzimo.normaliza(); this.eixoYGzimo.normaliza(); this.eixoZGzimo.normaliza(); } // if typeAngle if (typeAngle == vetor3.tipoAngulo.Absoluto) { // rotaciona os eixos. this.eixoXGzimo.rotacionaVetorAnguloAbsoluto(omegaZ, omegaX, omegaY); this.eixoYGzimo.rotacionaVetorAnguloAbsoluto(omegaZ, omegaX, omegaY); this.eixoZGzimo.rotacionaVetorAnguloAbsoluto(omegaZ, omegaX, omegaY); this.eixoXGzimo.normaliza(); this.eixoYGzimo.normaliza(); this.eixoZGzimo.normaliza(); } // if typeAngle } // rotacionaGzimmoeixos()