kikoGregoris wrote (el 26/10):
> Gracias por responder y perdón la
demora en mi respuesta.
No hay cuidado, yo me demoro más :-)
> La forma sirve, para dos cosas: 1) determinar cual es la región
> afectada por el brush , para luego levantar o bajar esos puntos. 2)
> En la imagen se ve que fuera de la region afectada, tambien debo
> levantar o bajar segun otro radio y segun un ángulo de inclinación
> que el usuario elija. Para hacer esto debo calcular los puntos de
> frontera del brush y para eso uso la forma. Luego trato a los
puntos
> por zonas, como se ve en la imagen.
Suena bien, pero por la ambigüedad del lenguaje natural, suena igual de
bien si lo hace el brush que si lo hace un objeto forma separado.
> Cada vez que el brush se mueve y
> trata de modelar , recalculo la frontera. Es por eso que es
confuso,
> por un lado el recalcular la frontera todo el tiempo, me hace
pensar
> que no vale la pena tener una clase Form a parte. Posiblemente no
> necesitaría una instancia y solo actuaria a nivel de clase(solo es
un
> cálculo). Es curioso, si trabajara en C/C++ pondría un "IF
circulate"
> y no me haría tanto drama jajaja.
Tener en un objeto separado la forma (ojo que Form es un formulario, el
nombre sería Shape)
te fuerza en este esquema a que se tengan que comunicar cada vez que el
pincel se mueve.
Eso no es grave pero no parece muy conveniente PERO depende de cuánto
pueda variar la forma.
Si tenés sólo dos o tres, lo vas a poder resolver fácilmente con casos
y distintos métodos.
Si son más, eso te va a complicar, agrandando mucho el protocolo de tu
objeto
con mensajes que llevan dentro el "parámetro" de la forma. En ese caso,
es más que
probable que te convenga tener otro objeto.
> Si entiendo. Otra cosa, el brush
tiene dos modos de edición, aplanar
> o leventar. Para hacer esto, yo puse un colaborador sculpMode , que
> es un selector y luego hago un #perform: de este selector. Es una
> cosa que usó Ale en la demo de Genesis 3d, donde tenía dos modos
para
> que la cámara actuara frente a un actor. Podía mirar al actor
desde
> un punto fijo, o seguirlo.
>
> El #perform: mas costoso en computo que un #ifTrue: ?.
Bastante más costoso en general. Acá voto por el if sin dudar.
El #perform: es lindo pero genera rápidamente malas costumbres de
programación (como concatenar strings para armar selectores para hacer
perform: después).
En cuanto a performance, generalmente te fuerza a hacer nuevamente un
pedazo del method lookup.
Ese pedazo es más o menos grande,
dependiendo de cómo esté implementado el message lookup y el code
cache o el inlined code cache.
El if, en cambio, es inmediato. Se traduce a instrucciones de jump de
código máquina casi directamente.
Y es mentira que el código sea "más limpio", si pusiste perform para
esto, es un if disimulado.
Saludos
--
carlos e. ferro* *| senior developer* *| *caesar systems *| *see
clearly. decide smarter.*
ceferro@... <mailto:ceferro@...> | t:
+1.281.598.8790 | t: +54.11.4389.0126 | www.caesarsystems.com
<http://www.caesarsystems.com/>
**This message and any attached documents contain information from
Caesar Systems LLC that may be confidential/trade secret and/or
privileged. If you are not the intended recipient, you may not read,
copy, distribute or use this information. If you have received this
transmission in error, please notify the sender immediately by
telephone or by reply e-mail and then delete this message.