Comunidad de diseño web y desarrollo en internet online

Texto asociado a una curva desde Freehand a Flash??

Citar            
MensajeEscrito el 24 Nov 2004 06:20 am
Buenos días.

La cuestión es la siguiente. Creo con el Freehand un texto que uno a una curva. Al copiar y pegar en Flash me queda como grupo y no puedo tratarlo como texto dinámico para modificarlo.

Lo que pretendo es que ese texto cambie en función de un fichero externo XML. Necesito saber si Flash puede tratar el texto como el Freehand, es decir, la curva por un lado y el texto (dinámico) por el otro, para yo poder cambiar ese texto las veces que haga falta.

He probado a hacerlo desde Flash pero sólo hay opciones de rotar, sesgar, etc. que no hacen lo mismo que Freehand.

Gracias por la ayuda. Gronsi.

Por gronsi

31 de clabLevel



 

unknown
Citar            
MensajeEscrito el 24 Nov 2004 09:00 am
Buf... vaya papeleta amigo.

Ahora mismo no se me ocurre otra cosa que recoger el texto del XML y ponerlo en pequeñas cajas de texto que servirian para poner una letra en cada uno. Por ejemplo:

Código :

var mi_str:String = new String();
var mi_array:Array = new Array();

mi_str = "hola";
mi_array = mi_str.split("");

for (i=0; i<mi_array.length; i++){
   _root["t"+i].text = mi_array[i];
}


Esto te pondría una letra en cada una de las cajas llamadas t0, t1, t2 y t3. Ya se que es un poco palo, pero no se yo si habra otra forma.

Saludos!! ^^

Por Elecash

Claber

8126 de clabLevel

37 tutoriales
19 articulos
13 ejemplos

  Bastard Operators From Hell Desarrollador de GAIA Premio_Secretos Héroes

BarnaCity

unknown
Citar            
MensajeEscrito el 24 Nov 2004 02:03 pm
Gracias, algo así había pensado pero hay que poner cada letra orientada y girada de una forma para que den la sensación de estar en la misma curva, ya que si las pego desde Freehand me las agrupa y no las toma como texto.
Y otro problema es que si en otro idioma ocupan más o menos letras debería poner más cajas contenedoras de letras por si acaso.
Un poco rollo, no sé qué haré. Gracias de todos modos.

Por gronsi

31 de clabLevel



 

unknown
Citar            
MensajeEscrito el 24 Nov 2004 02:56 pm
Dejad que el AS fluya por vuestras venas y os inunde la cabeza!

No estaria mal que alguien se currase una funcion en plan, metes la ecuacion de la curva, metes el texto y tachan!! el texto aparece en una curva!!!

se me okurren algunas formas como por ejemplo :

TIPO 1:
textoEnCurva(ecuacion,intervalo,texto,alto,ancho);
//ecuacion matematica del tipo x^2, 1/x, etc ect
//intervalo de representacion de la curva, no es lo mismo un x^2 entre -1 y 0 que entre -1 y 1
//texto, alto y ancho, hace falta explikar esto?

TIPO 2:
textoEnCurva(angulo,radio,texto,alto,ancho);
//en este caso se representara el texto en el borde de un circulo, solo indicamos el angulo que queremos, el radio y el tamaño del resultado final

TIPO 3:
textoEnCurva(predet,texto,alto,ancho);
//como predet entendemos que hay N casos definidos, es decir una serie de curvas ya predefinidas y se usaran una de ellas...

Que tipo os gusta mas? kizas me ponga a ello.... saludetes

Por _CONEJO

BOFH

7639 de clabLevel

17 tutoriales
21 articulos

 

unknown
Citar            
MensajeEscrito el 24 Nov 2004 03:15 pm
Juer, que buena idea ICE!!

De hecho se podría hacer hasta una clase y ya sería la caña nen!! XD

A mi me gusta la segunda opción, sería algo más difícil de controlar al principio, pero seguro que quedaría bien.

Además, se me hace más fácil de programar creo. ^^

PD: También faltaría un par de parámetros de posicionamiento y un contenedor quizá.

Por Elecash

Claber

8126 de clabLevel

37 tutoriales
19 articulos
13 ejemplos

  Bastard Operators From Hell Desarrollador de GAIA Premio_Secretos Héroes

BarnaCity

unknown
Citar            
MensajeEscrito el 24 Nov 2004 03:21 pm
Pues ala, campeón!!

Lo guay sería que al dibujar una curva de bezier te diera las coordenadas de puntos y curvas necesarias para esa ecuación que tú quieres pasar como parámetro y en base a esta trayectoria pintara el texto encima.

Si quieres hacerla más chachi aún, podrías indicarle mediante un parámetro si quieres que ajuste el tamaño del texto al tamaño de la curva (como parámetro opcional).

Yo no tengo tiempo para ello.

Un saludo, Gronsi !!

Me pregunto ... a qué te dedicas? te molaría desarrollar algo que se pudiera vender? de dónde eres? te propongo algo?

Por gronsi

31 de clabLevel



 

unknown
Citar            
MensajeEscrito el 24 Nov 2004 03:30 pm

gronsi escribió:

Pues ala, campeón!!

La proxima me callo

gronsi escribió:

Lo guay sería que al dibujar una curva de bezier te diera las coordenadas de puntos y curvas necesarias para esa ecuación que tú quieres pasar como parámetro y en base a esta trayectoria pintara el texto encima.

No nos pasemos ok¿? jajajajaja Que yo no soy ni papa noel ni los reyes magos, tampoco hago milagros....

gronsi escribió:

te propongo algo?
Que klase de pervertido eres? jajajajajaja ME dediko a perder el tiempo, aunque algunos dicen que soy estudiante

Por _CONEJO

BOFH

7639 de clabLevel

17 tutoriales
21 articulos

 

unknown
Citar            
MensajeEscrito el 24 Nov 2004 03:40 pm
Te ha faltado responderme a la más importante

Por gronsi

31 de clabLevel



 

unknown
Citar            
MensajeEscrito el 24 Nov 2004 03:43 pm
euh¿?

Por _CONEJO

BOFH

7639 de clabLevel

17 tutoriales
21 articulos

 

unknown
Citar            
MensajeEscrito el 24 Nov 2004 03:44 pm
te molaría desarrollar algo que se pudiera vender?

Por gronsi

31 de clabLevel



 

unknown
Citar            
MensajeEscrito el 24 Nov 2004 03:48 pm
Vas demasiado deprisa no? Esta klaro que todo lo que sea ganar dinero siempre viene bien, pero

1.- Asegurate de que soy bueno
2.- Asegurate de que soy el tipo que buscas
3.- Si aun asi quieres hacer algo conmigo... es que estas medio loco... jajajaja

Por _CONEJO

BOFH

7639 de clabLevel

17 tutoriales
21 articulos

 

unknown
Citar            
MensajeEscrito el 24 Nov 2004 04:16 pm
xD

Por Freddie

BOFH

53 tutoriales
597 articulos
43 ejemplos

Genero:Masculino   Admin

Conserje de Cristalab

unknown
Citar            
MensajeEscrito el 24 Nov 2004 04:42 pm
Bueno, yo tengo un principio, a ver que os parece (copy&paste):

Código :

var mi_array:Array = new Array();
var mi_str:String = new String();

mi_str = "CARACO";
radio = 60;
x = 100;
y = 100;

_root.createEmptyMovieClip("mi_mc", 99999);
textoEnCurva(mi_mc, mi_str, x, y, radio);

function textoEnCurva(container, texto, x, y, radio){
   container._x = x;
   container._y = y;
   mi_array = mi_str.split("");
   for (i=0; i<mi_array.length; i++){
      container.createTextField("letra"+i, i, radio*Math.sin(i), -radio*Math.cos(i), 16, 16);
      container["letra"+i].text = mi_array[i];
   }
}


Es una base de la cual partir, pero digo yo que no está mal, no? XD

Por si alguien lo había visto antes, lo he editado, había puesto un código antiguo, aún así, este peta por mil lados, juas

Por Elecash

Claber

8126 de clabLevel

37 tutoriales
19 articulos
13 ejemplos

  Bastard Operators From Hell Desarrollador de GAIA Premio_Secretos Héroes

BarnaCity

unknown
Citar            
MensajeEscrito el 24 Nov 2004 05:10 pm
Clase

Código :

class noCurva {
   var ruta:MovieClip;
   var ar:Array;
   var sep:Number; var rad:Number;
   var s:Number; var tmpText:TextField;
   var x:Number; var y:Number;
   function noCurva(rutaa:MovieClip,ang:Number,otroAng:Number,radio:Number,xx:Number,yy:Number,texto:String) {
      otroAng = -otroAng+180-(ang/2);
      trace(otroAng);
      x = xx;
      y = yy;
      ruta = rutaa;
      this.ponEstilo();
      delete ar;
      var ar:Array = new Array();
      ar = texto.split("");
      ar.reverse();
      trace(ar);
      if((ar.length-1)<=0) {
         sep = 0;
         otroAng += ang/2;
         trace(otroAng);
      } else {
         sep = ang/(ar.length-1);
      };
      for(s=0;s<ar.length;s++) {
         ruta.createTextField("l"+s,s,0,0,100,18);
         tmpText = ruta["l"+s];
         tmpText.embedFonts = true;
         tmpText.text = ar[s];
         tmpText.autoSize = "left";
         tmpText.setTextFormat(ruta.estilo);
         rad = Math.PI*(otroAng+sep*s)/180;
         tmpText._x = x+radio*Math.sin(rad);
         tmpText._y = y+radio*Math.cos(rad);
         tmpText._rotation = 180-(otroAng+sep*s);
         trace(tmpText._rotation);
      };
   };
   
   
   function ponEstilo(letra:String,tam:String,esp:String,color:String):Void {
      ruta.estilo = new TextFormat();
      letra==null? ruta.estilo.font = "customStandard" : ruta.estilo.font = letra;
      tam==null? ruta.estilo.size = "8" : ruta.estilo.size = tam;
      esp==null? ruta.estilo.leading = "5" : ruta.estilo.leading = esp;
      color==null? ruta.estilo.color = "0x000000" : ruta.estilo.color = color;
   };
   

};



Para hacerlo funcionar

Código :

import noCurva;
_root.createEmptyMovieClip("container",99);
var miCurva:noCurva = new noCurva(container,190,45,100,100,100,"NODANI.com");
//parametros [MovieClip donde ira, angulo de apertura, angulo centro, radio, centroX, centroY, cadena]


Seguire trabajando en ello

PD: SIentojoder el foro

Por _CONEJO

BOFH

7639 de clabLevel

17 tutoriales
21 articulos

 

unknown
Citar            
MensajeEscrito el 25 Nov 2004 12:01 pm
La he probado y no funciona...

PD: No pasa nada porque jodas el foro :bate:

Por Elecash

Claber

8126 de clabLevel

37 tutoriales
19 articulos
13 ejemplos

  Bastard Operators From Hell Desarrollador de GAIA Premio_Secretos Héroes

BarnaCity

unknown
Citar            
MensajeEscrito el 25 Nov 2004 01:12 pm
ummm a mi si que me funciona... no se que puede ser... grrrr.... aun asi ya lo dije, sigo trabajando en ello....

saludetes

PD: lo vuelvo a comprobar y funciona!, algun error?

Por _CONEJO

BOFH

7639 de clabLevel

17 tutoriales
21 articulos

 

unknown
Citar            
MensajeEscrito el 25 Nov 2004 01:36 pm
No, no, no me da ningun error, solo que no me saca nada al hacer Ctrl+Intro...

Si eso pasame tus archivos, no vaya a ser que este haciendo algo mal, o que tengas algo equivocado en el code que hay aqui.

Por Elecash

Claber

8126 de clabLevel

37 tutoriales
19 articulos
13 ejemplos

  Bastard Operators From Hell Desarrollador de GAIA Premio_Secretos Héroes

BarnaCity

unknown
Citar            
MensajeEscrito el 25 Nov 2004 03:06 pm
los archivos son :

http://www.nodani.com/noemotes/curveitor.fla
http://www.nodani.com/noemotes/noCurva.as
http://www.nodani.com/noemotes/funciones.as

el ultimo no se usa, pero por si akaso!! Aun asi kreo que el problema es la fuente que use, customStandard por defecto!! que si no la tienes... ajam!! viene exportada en el FLA trankilo

Por _CONEJO

BOFH

7639 de clabLevel

17 tutoriales
21 articulos

 

unknown
Citar            
MensajeEscrito el 25 Nov 2004 03:34 pm
Pues si que funciona si, y la verdad es que esta bastante guapo, jejeje.

Una buena clase sin duda ;)

PD: La fuente la cambie y tampoco funcionaba...

Por Elecash

Claber

8126 de clabLevel

37 tutoriales
19 articulos
13 ejemplos

  Bastard Operators From Hell Desarrollador de GAIA Premio_Secretos Héroes

BarnaCity

unknown
Citar            
MensajeEscrito el 25 Nov 2004 04:57 pm
Creo que es un comienzo :

http://www.nodani.com/noemotes/curveitorPlus.html

JAJAJAJAJAJA :wink: :wink:

FUNCIONAMIENTO : pongan un texto, aprienten el mouse para dibujar una curva [incluso circulos] aprientenlo hasta que no dibuje mas [poko mas de un segundo para dibujar!!] aprienten el boton de PONER TEXTO .... vean el resultado !!

Es algo tosko pero bueno, me entretuve un rato....
PD: SI, la primera letra se cambia de sitio cuando se pulsa el boton... intento solucionarlo pero no se como !! jajaja

para descargar el FLA

http://www.nodani.com/noemotes/curveitorPlus.fla

^^ ^^

Por _CONEJO

BOFH

7639 de clabLevel

17 tutoriales
21 articulos

 

unknown
Citar            
MensajeEscrito el 25 Nov 2004 05:30 pm
Lo malo de todo esto es que dibujas la forma, lo que estaría genial sería dibujar una curva Bezier, y a partir de ella poner las letras.

De hecho creo que incluso sería más fácil para programar, esta forma que utilizas tu se me hace más difícil... ¿no?

Por Elecash

Claber

8126 de clabLevel

37 tutoriales
19 articulos
13 ejemplos

  Bastard Operators From Hell Desarrollador de GAIA Premio_Secretos Héroes

BarnaCity

unknown
Citar            
MensajeEscrito el 25 Nov 2004 07:12 pm
es un poko "home-made"[vamos jodidamente cutre] lo reconozco, pero es la unika que se me a ocurrido, entre otras cosas porque no se dibujar curvas de Bezier y lo segundo que supongo que en esa curva no se como recoger las coordenadas de la misma, aun asi me sigue pareciendo mejor idea [a menos para programar] la de meter tu ecuacion matematika, el problema seria hallar ecuaciones "utiles" y que den resultados bonitos

Por _CONEJO

BOFH

7639 de clabLevel

17 tutoriales
21 articulos

 

unknown
Citar            
MensajeEscrito el 26 Nov 2004 02:57 am
Pero es facil, es solo tomar la primera y segunda derivada del vector gradiente (Y la derivada direccional si tomas la segunda derivada)

El resto es pues una curva normal, ya que obtienes a partir de los puntps de inflexión la ecuación
Mas información
http://en.wikipedia.org/wiki/B%E9zier_curve

Por Freddie

BOFH

53 tutoriales
597 articulos
43 ejemplos

Genero:Masculino   Admin

Conserje de Cristalab

unknown
Citar            
MensajeEscrito el 26 Nov 2004 06:04 am
No se cómo hacerlo, no se en qué se basan las curvas de Bezier, podrías ser más explícito?

Los puntos de inflexión están claros, lo que no tengo claro son los puntos que mueves tangentes a estos puntos.

Por gronsi

31 de clabLevel



 

unknown
Citar            
MensajeEscrito el 26 Nov 2004 08:59 am
Errrr.... gronsi, quizá esto sea ya una discusión un poco más BOFH, hemos tomado como nuestro tu post, jajaja!!

Lee con calma desde el principio lo que hemos ido posteando, tanto ICE como yo hemos dado algunas soluciones.

Saludos!!

Por Elecash

Claber

8126 de clabLevel

37 tutoriales
19 articulos
13 ejemplos

  Bastard Operators From Hell Desarrollador de GAIA Premio_Secretos Héroes

BarnaCity

unknown
Citar            
MensajeEscrito el 26 Nov 2004 10:39 am
Y siguiendo con lo nuestro... XD

He adaptado el código (las clases de C++ sirvieron para algo) que sale en wikipedia para crear una curva Bezier a base de puntos y no haciento curveTo() como sale en todas partes.

En base a esto ahora se podría intentar hacer que una vez creada la curva Bezier poner las letras en ellas, es cuestión de adaptarlo, pero creo que se puede.

Ahí va el código.

Código :

/*********************************
cp es un array de 4 elementos, donde:
cp[0] es el punto inicial.
cp[1] es el punto de anclaje del punto inicial.
cp[2] es el punto de anclaje del punto final.
cp[3] es el punto final.

t es el valor del parámetro, 0 <= t <= 1
***************************************/

function pointOnCubicBezier(cp, t) {
   // Calcular los coeficientes polinomiales (o algo así XD)
   cx = 3.0 * (cp[1]._x - cp[0]._x);
   bx = 3.0 * (cp[2]._x - cp[1]._x) - cx;
   ax = cp[3]._x - cp[0]._x - cx - bx;
   cy = 3.0 * (cp[1]._y - cp[0]._y);
   by = 3.0 * (cp[2]._y - cp[1]._y) - cy;
   ay = cp[3]._y - cp[0]._y - cy - by;
   
   // Calcular el punto de curvo para el parámetro con valor t
   tSquared = t * t;
   tCubed = tSquared * t;
   
   attachMovie("puntos", "puntos"+n, n);
   _root["puntos"+n]._x = (ax * tCubed) + (bx * tSquared) + (cx * t) + cp[0]._x;
   _root["puntos"+n]._y = (ay * tCubed) + (by * tSquared) + (cy * t) + cp[0]._y;
   n++;
}

//Eventos
for (i=0; i<4; i++){
   _root["p"+i].onPress = function(){
      startDrag(this, true);
   }
   _root["p"+i].onRelease = function(){
      stopDrag();
   }
}

crear_btn.onPress = function(){
   //Declaramos variables
   var cp:Array = new Array(p0, p1, p2, p3);
   n = 0;
   numberOfPoints = 200;
   t = 0;
   dt = 1/(numberOfPoints-1);
   
   for (i=0; i<numberOfPoints; i++){
      t += dt;
      pointOnCubicBezier(cp, t);
   }
}


Para que funcione tenéis que crear cuatro botones que serán el punto inicial, el punto final, el punto de ancla del punto final y el punto de ancla del final, estos clips se llamarán p0, p1, p2 y p2. También necesitaréis un botón que se llamará crear_btn y que servirá para crear la linea.

Para poner los puntos yo he creado un clip de película (circulo de 2x2 pixels) y lo he llamado "puntos" en la vinculación de la biblioteca

A ver que os parece, yo de mientras ire probando a ver si consigo meter las dichosas letras en la curva Bezier.

Saludos!! ^^

Por Elecash

Claber

8126 de clabLevel

37 tutoriales
19 articulos
13 ejemplos

  Bastard Operators From Hell Desarrollador de GAIA Premio_Secretos Héroes

BarnaCity

unknown
Citar            
MensajeEscrito el 26 Nov 2004 11:05 am
Ha sido bastante fácil :jedi:

Ahora las letras se adaptan a una curva Bezier, a ver ahora si me curro la clase...

Este es el código final.

Código :

/******************************************************
cp es un array de 4 elementos, donde:
cp[0] es el punto inicial.
cp[1] es el punto de anclaje del punto inicial.
cp[2] es el punto de anclaje del punto final.
cp[3] es el punto final.

t es el valor del parámetro, 0 <= t <= 1
*******************************************************/

function pointOnCubicBezier(cp, t) {
   // Calcular los coeficientes polinomiales (o algo así XD)
   cx = 3 * (cp[1]._x - cp[0]._x);
   bx = 3 * (cp[2]._x - cp[1]._x) - cx;
   ax = cp[3]._x - cp[0]._x - cx - bx;
   cy = 3 * (cp[1]._y - cp[0]._y);
   by = 3 * (cp[2]._y - cp[1]._y) - cy;
   ay = cp[3]._y - cp[0]._y - cy - by;
   
   // Calcular el punto de curva para el parámetro con valor t
   tSquared = t * t;
   tCubed = tSquared * t;
   
   attachMovie("puntos", "puntos"+n, n);
   _root["puntos"+n]._x = (ax * tCubed) + (bx * tSquared) + (cx * t) + cp[0]._x;
   _root["puntos"+n]._y = (ay * tCubed) + (by * tSquared) + (cy * t) + cp[0]._y;
   n++;
}

//Eventos
for (i=0; i<4; i++){
   _root["p"+i].onPress = function(){
      startDrag(this, true);
   }
   _root["p"+i].onRelease = function(){
      stopDrag();
   }
}

function ponerTexto(){
   var letra_str:String = new String();
   letra_str = texto_txt.text;
   largo = texto_txt.length;
   posicion = Math.round(numberOfPoints/largo);
   
   letras = letra_str.split("");
   for (i=0; i<largo; i++){
      _root.createTextField("letra"+i, 9999+i, _root["puntos"+(posicion*i)]._x, _root["puntos"+(posicion*i)]._y, 16, 16);
      _root["letra"+i].text = letras[i];
   }
}

crear_btn.onPress = function(){
   //Declaramos variables
   var cp:Array = new Array(p0, p1, p2, p3);
   n = 0;
   numberOfPoints = 200;
   t = 0;
   dt = 1/(numberOfPoints-1);
   
   for (i=0; i<numberOfPoints; i++){
      t += dt;
      pointOnCubicBezier(cp, t);
   }
   
   if (texto_txt.text != ""){
      ponerTexto();
   }
}


He añadido una caja de texto Input que se llama "texto_txt" y he modificado un poquillo el código. Lo que he hecho ha sido dividir el número de puntos que hay puestos entre el número de letras de la palabra, eso me da la cantidad de puntos de separación que hay para cada letra. Luego haces un pequeño for y listos.

Espero que os guste ^^

PD: Molará más cuando sea una clase XD

Por Elecash

Claber

8126 de clabLevel

37 tutoriales
19 articulos
13 ejemplos

  Bastard Operators From Hell Desarrollador de GAIA Premio_Secretos Héroes

BarnaCity

unknown
Citar            
MensajeEscrito el 26 Nov 2004 03:28 pm

elecash escribió:

PD: Molará más cuando sea una clase XD

Y cuando sea un tuto tambien

Por Freddie

BOFH

53 tutoriales
597 articulos
43 ejemplos

Genero:Masculino   Admin

Conserje de Cristalab

unknown
Citar            
MensajeEscrito el 26 Nov 2004 03:37 pm
e ICEM4N cae knokeado sobre el ring en el segundo asalto


En realidad no he conseguido que funcione! jajaja no puedes poner los fuentes? es que... pss me sale todo el texto en la posicion 0,0 !! jajajaja

Aun asi te felicito, por lo menos ya tengo deberes par el finde semana, aprender que c*j*nes son las curvas bezier, como funcionan y como crearlas! jajajaj ;) Sin duda todos esperamos ese tuto!! [por no contar los de F® sobre amfphp!! ejem.... ejem....]

Por _CONEJO

BOFH

7639 de clabLevel

17 tutoriales
21 articulos

 

unknown
Citar            
MensajeEscrito el 26 Nov 2004 03:39 pm

Fucking BOFH Mastah escribió:

Y cuando sea un tuto tambien


CRAP

Por Elecash

Claber

8126 de clabLevel

37 tutoriales
19 articulos
13 ejemplos

  Bastard Operators From Hell Desarrollador de GAIA Premio_Secretos Héroes

BarnaCity

unknown

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.