tag:blogger.com,1999:blog-124724702024-03-13T04:51:58.977+01:00Paranoias MentalesProgramación con C#, Managed DirectX... en castellano.Augusto Ruizhttp://www.blogger.com/profile/05966632752704864542noreply@blogger.comBlogger34125tag:blogger.com,1999:blog-12472470.post-87746155400847022622007-01-25T16:47:00.000+01:002007-01-25T16:48:22.552+01:00Historias de un consultorHola!<br /><br />Un post rapidito para comentaros que he puesto online una tira cómica de periodicidad semanal.<br /><br />El link es <a href="http://historiasdeunconsultor.blogspot.com/">http://historiasdeunconsultor.blogspot.com/</a><br /><br />Saludos!Augusto Ruizhttp://www.blogger.com/profile/05966632752704864542noreply@blogger.com0tag:blogger.com,1999:blog-12472470.post-1163150407578504212006-11-10T10:17:00.000+01:002006-11-10T10:20:07.913+01:00Cambio de blogHola a todos!<br /><br />Una entrada rápida para deciros que tengo un nuevo blog en <a href="http://geeks.ms/blogs">Geeks.ms</a>. De ahora en adelante, podéis leer artículos de tecnología (y alguno de opinión) en esta dirección:<br /><br /><a href="http://geeks.ms/blogs/aruiz">http://geeks.ms/blogs/aruiz</a><br /><br />Saludos!!!Augusto Ruizhttp://www.blogger.com/profile/05966632752704864542noreply@blogger.com0tag:blogger.com,1999:blog-12472470.post-1147851123495952062006-05-17T09:15:00.000+02:002006-05-17T09:32:03.950+02:00Actores virtuales y la guerra de las consolasEn la E3 (una feria de entretenimiento en el que los protagonistas son los juegos) de este año se han presentado tanto la PS3 como la Nintendo Wii (antes conocida como Revolution). Microsoft tiene ventaja en la guerra de las consolas de momento, debido al lanzamiento de la XBox 360 meses antes que su rival más directo, Sony.<br /><br />Parece ser que la Nintendo no será una consola muy potente en términos de gráficos, por lo que nadie la está teniendo en cuenta como contendiente en esta guerra. Mejora algo a lo que ofrece a día de hoy la GameCube, pero lo que la hace interesante son principalmente dos aspectos:<br /><ol><li>Su precio será bastante inferior (aunque esto es una especulación) al de la XBox 360 y al de la PS3.</li><li>La originalidad de los juegos que saldrán para esta consola, debido principalmente al mando con el que se controlarán los mismos.</li></ol><p>La verdad es que si miramos un poco atrás, a nivel técnico la Nintendo DS parecía que no tenía nada que hacer contra la PSP, pero sin embargo se la ha merendado en términos de ventas. Es más barata, y se ha sabido hacer buen uso de la pantalla táctil para ofrecer juegos relativamente innovadores (al final, Nintendogs no es más que el Tamagotchi - un poco más avanzado). Podremos ver esta misma tendencia en el campo de sus hermanas mayores?</p><p>En cuanto a lo que se ha podido ver en el E3, <a href="http://trailers.gametrailers.com/gt_vault/t_heavyrain_thecasting_e36_h264.wmv">aquí</a> (113 Mb) podéis ver un vídeo de un actor virtual, en el que se puede apreciar que con la PS3 se puede conseguir en tiempo real lo que antes estaba reservado para las escenas de vídeo.</p><p>En cuanto a la rumorología que acompaña a estos eventos, parece ser que:</p><ul><li>En ciertas demos de PS3 se vió finalmente que por detrás estaban utilizando una XBox 360. :P</li><li>En el XBox developer's conference, cuando presentaron la XBox 360, utilizaron un PowerMac G5 para las Tech Demos.</li></ul><p>Podéis ver un poco más de información al respecto <a href="http://www.gamersreports.com/forum/index.php?s=f8a5d9e10f53a5105c5b455e6b5dd010&showtopic=5972&pid=16938&st=0&#entry16938">aquí</a>.</p><p>(Gracias <a href="http://www.printsudoku.com/">Diego</a> por pasarme esta info tan curiosa... ;) )</p><p> </p><p>Saludos!</p>Augusto Ruizhttp://www.blogger.com/profile/05966632752704864542noreply@blogger.com1tag:blogger.com,1999:blog-12472470.post-1146037087866060412006-04-26T09:13:00.000+02:002006-04-26T09:41:45.943+02:00Vamos a echarle morrooooA ver...<br /><br />Voy a echarle un poco de morro y a plantear un pequeño reto:<br /><br />Vamos a suponer que tenemos un segmento S que va de (x1,y1) a (x2,y2), y que tenemos una rejilla de tamaño (W,H) donde W es el ancho de cada celda de la rejilla y H la altura.<br /><br />El reto es encontrar un algoritmo que te vaya indicando por qué celdas de la rejilla pasa el segmento S, y si entra por arriba, por abajo, por la izquierda o por la derecha (si entra por una esquina, nos valdría con indicar por ejemplo arriba-izquierda). Eso sí, tiene que ser en orden.<br /><br />A ver si esta imagen lo explica un poco mejor:<br /><br /><img alt="" src="http://photos1.blogger.com/blogger/2948/1059/320/GridLinea.png" border="0" /><br /><br />Bueno, pues ese es el reto. Al que mejor le salga le regalo un chicle de menta :)Augusto Ruizhttp://www.blogger.com/profile/05966632752704864542noreply@blogger.com0tag:blogger.com,1999:blog-12472470.post-1145953290973089492006-04-25T10:21:00.000+02:002006-04-25T10:21:32.503+02:00Fotos de AlemaniaEste va a ser el tercer intento de publicar esto... Ayer blogger estuvo caído y no había forma de publicar nada. Pero en fin... Lo volveré a intentar una vez más...<br /><br />Hace ya más de un mes que fui a Alemania a un curso en Microsoft. Prometí poner fotos a la vuelta, y como soy más vago que... bueno, eso, que soy muy vago.<br /><br />Aquí van las fotos:<br /><br /><a href="http://photos1.blogger.com/blogger/2948/1059/1600/CIMG0344.1.jpg"><img style="CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/2948/1059/320/CIMG0344.1.jpg" border="0" /></a><br />El trío calavera que me acompañaba...<br /><br /><a href="http://photos1.blogger.com/blogger/2948/1059/1600/CIMG0345.1.jpg"><img style="CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/2948/1059/320/CIMG0345.1.jpg" border="0" /></a><br />Aquí salgo yo, para que se vea que sí que estuve allí :P<br /><br /><a href="http://photos1.blogger.com/blogger/2948/1059/1600/CIMG0346.1.jpg"><img style="CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/2948/1059/320/CIMG0346.1.jpg" border="0" /></a><br />David pasándoselo pipa con la XBox 360...<br /><br /><a href="http://photos1.blogger.com/blogger/2948/1059/1600/CIMG0357.jpg"><img style="CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/2948/1059/320/CIMG0357.jpg" border="0" /></a><br />Raúl, un español que pasaba por allí...<br /><br /><a href="http://photos1.blogger.com/blogger/2948/1059/1600/CIMG0355.jpg"><img style="CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/2948/1059/320/CIMG0355.jpg" border="0" /></a><br />La cena del segundo día...<br /><br /><a href="http://photos1.blogger.com/blogger/2948/1059/1600/CIMG0359.jpg"><img style="CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/2948/1059/320/CIMG0359.jpg" border="0" /></a><br />La de David es la más pequeñita. En la foto no se ve, pero es verdad.<br /><br /><a href="http://photos1.blogger.com/blogger/2948/1059/1600/CIMG0360.0.jpg"><img style="CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/2948/1059/320/CIMG0360.0.jpg" border="0" /></a><br />Instrucciones sobre cómo se usa una escobilla. Se ve que los ingenieros alemanes son un poco distraídos... (espero que este cartel no se vea afectado por la NDA, porque estaba allí pegado)<br /><br /><a href="http://photos1.blogger.com/blogger/2948/1059/1600/CIMG0361.jpg"><img style="CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/2948/1059/320/CIMG0361.jpg" border="0" /></a><br />La nevada que había caído (siguió nevando durante el resto del tiempo que estuvimos allí)<br /><br /><a href="http://photos1.blogger.com/blogger/2948/1059/1600/CIMG0364.jpg"><img style="CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/2948/1059/320/CIMG0364.jpg" border="0" /></a><br />La casa que había enfrente de Microsoft...<br /><br /><a href="http://photos1.blogger.com/blogger/2948/1059/1600/CIMG0365.0.jpg"><img style="CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/2948/1059/320/CIMG0365.0.jpg" border="0" /></a><br />Y el inevitable logo.<br /><br />En fin, eso es todo por el momento... Saludos!Augusto Ruizhttp://www.blogger.com/profile/05966632752704864542noreply@blogger.com0tag:blogger.com,1999:blog-12472470.post-1145539791099953032006-04-20T15:23:00.000+02:002006-04-20T15:32:30.870+02:00Sudoku Fever!!!!Hooola,<br /><br />Voy a aprovechar este espacio para hacer algo de spam :)<br /><br />Resulta que hay un chaval que es una máquina de esto de los ordenadores, y que ha hecho una página web más que interesante para aquellos que les gusta escurrirse el coco con esto de los Sudokus. La página en cuestión es <a href="http://www.printsudoku.com" target="_blank">PrintSudoku</a>.<br /><br />Es una gozada, porque cada día tienen un conjunto de Sudokus diferente (desde muy fácil hasta muy, muy jodidillos), y por lo que puedo ver, ha metido la posibilidad de jugar un Sudoku online (esto no estaba la última vez que entré).<br /><br />Así que los que tengáis tiempo para perder, ya sabéis: <a href="http://www.printsudoku.com" target="_blank">PrintSudoku</a>. Y si os dicen algo, me echáis la culpa a mí ;)<br /><br /><a href="http://photos1.blogger.com/blogger/2948/1059/1600/PrintSudoku.png" target="_blank"><img style="cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/2948/1059/320/PrintSudoku.jpg" border="0" alt="" /></a>Augusto Ruizhttp://www.blogger.com/profile/05966632752704864542noreply@blogger.com1tag:blogger.com,1999:blog-12472470.post-1145293143935582052006-04-17T18:56:00.000+02:002006-04-17T18:59:04.513+02:00Microsoft regala UMPCsAntes de nada... ¿Sabéis lo que es un UMPC?<br /><br />Microsoft <a href="http://origamiproject.com/contest/contest.aspx">está regalando</a> 5 de estos dispositivos en la web de Origami Prject.<br /><br />Las malas noticias es que debes residir en los USA para poder participar, así que al resto que nos den por el ****.<br /><br />Por cierto, ya estoy de vuelta de las vacaciones :PAugusto Ruizhttp://www.blogger.com/profile/05966632752704864542noreply@blogger.com0tag:blogger.com,1999:blog-12472470.post-1144670191685719412006-04-10T13:52:00.000+02:002006-04-10T13:56:32.293+02:00En Francia...Pues nada, aqui ando, en La Rochelle, de visita a mi cugnada (esto de no tener egne el teclado es una cosa que...)<br /><br />Por cierto, habeis usado alguna vez un teclado frances???? Te cambian unas pocas letras, pero la mayoria estan en su sitio... Pero esto de tener la a en la fila de arriba me esta matando... Y la m a la derecha de la l...<br /><br />En fin, que esta parte de francia es una pasada, con el mar (la mère o algo asi), todo verde... Ya posteare alguna foto :)<br /><br />ChauuuuAugusto Ruizhttp://www.blogger.com/profile/05966632752704864542noreply@blogger.com0tag:blogger.com,1999:blog-12472470.post-1144260565415381342006-04-05T20:06:00.000+02:002006-04-05T20:13:31.920+02:00SAP es......horrible!!!!<br /><br />No sé para los expertos, pero para el que acaba de llegar... Lo tiene todo:<br /><ul><li>Una interfaz de usuario <irony_mode>de lo más chula</irony_mode>. Vamos, una mierda.</li><li>Una API <irony_mode>de lo más molona</irony_mode>. Te deja hacer de todo, pero a ver cómo lo haces ;)</li><li><irony_mode>Un huevo de documentación...</irony_mode></li></ul><p>Vamos, <irony_mode>que es una delicia...</irony_mode></p><p></p><p>Me ahorro las palabras malsonantes gratuitas... Creo que no había dicho tantas juntas en muuucho tiempo... :P</p><br /><br/><br/><br /><p>Ahora que nadie nos oye... ¡ES UNA PUÑETERA MIEEEERDA!</p>Augusto Ruizhttp://www.blogger.com/profile/05966632752704864542noreply@blogger.com2tag:blogger.com,1999:blog-12472470.post-1143581452082615112006-03-28T23:18:00.000+02:002006-03-30T18:00:22.030+02:00Ojito con GMail...Ayer me he pegado un buen susto... Intentaba acceder a mi cuenta en GMail, como cualquier otro día, y me encontré con una sorpresa bastante desagradable. Tras introducir mi usuario y mi password, me encuentro con el siguiente mensaje de error:<br /><br /><span style="font-family:arial;font-size:85%;color:#ff0000;">Lo sentimos, su cuenta se ha inhabilitado. Para más información acerca de las cuentas de Google, acuda a nuestro Centro de Asistencia en </span><a href="https://mail.medianet.es/exchweb/bin/redir.asp?URL=http://www.google.com/support/accounts/" target="_blank"><span style="font-family:arial;font-size:85%;color:#ff0000;">http://www.google.com/support/accounts/</span></a><span style="font-family:arial;font-size:85%;color:#ff0000;">.</span><br /><br />Imaginaos mi cara de asombro cuando veo semejante mensaje... Tengo más de 400Mb de correo... Así que voy a esa página y no encuentro nada que me valga. Tirando de Google, encuentro una página en los grupos de noticias y veo que hay bastante más gente a la que le ha pasado lo mismo...<br /><br />Total, resumiendo, que al final encuentro el link mágico en el que hay un formulario de soporte, lo envío explicando mi problema y me llega una respuesta automática en la que me pregunta ¿es usted bobo?<br /><br />Lo digo porque en el mail me indican amablemente que a ver si no puedo entrar porque haya metido mal el usuario y el password, que si tengo un problema diferente que responda a ese correo... Y para eso relleno el puñetero formulario web explicando el problema?<br /><br />Al final, un día y medio después de esto me ha llegado otro correo indicándome que ya se había solucionado el problema. Como GMail es beta (y lleva siendo beta desde hace ya mucho tiempo), cierto es que no se debería utilizar como cuenta de correo primaria. Pero he sido tan tonto como para usarla. Seguiré usándola... porque me da pereza cambiarme y avisar a todo el mundo...Augusto Ruizhttp://www.blogger.com/profile/05966632752704864542noreply@blogger.com3tag:blogger.com,1999:blog-12472470.post-1142969129038145382006-03-21T20:22:00.000+01:002006-03-27T19:02:46.753+02:00Alguien lee esto?Al principio de los tiempos, de vez en cuando se podía leer algún comentario en las entradas del blog... Pero de un tiempo a esta parte, ya no se ve ninguno. De aquí podemos llegar a dos conclusiones:<br /><br /><ul><li>El blog es un coñazo. Los temas no interesan.</li><li>De la conclusión anterior, se deduce que esto ya no lo lee ni el Tato...</li></ul><p>Es por esto que me pregunto... ¿Alguien lee esto? (realmente da igual, pero es sólo para recordar que la gente si quiere puede comentar algo...)</p>Augusto Ruizhttp://www.blogger.com/profile/05966632752704864542noreply@blogger.com4tag:blogger.com,1999:blog-12472470.post-1140778395888642972006-02-24T11:37:00.000+01:002006-02-24T12:03:03.903+01:00Como no puedo parar quieto......estoy haciendo (desde hace bastante, bastante tiempo) un jueguecillo 2D en mis ratos libres - que por cierto, escasean bastante - basándome en tecnología Managed DirectX, en C#. Es el típico Jump'n'Run basado en Tiles.<br /><br /><a href="http://photos1.blogger.com/blogger/2948/1059/1600/Screenshot2.png"><img style="MARGIN: 0px 0px 10px 10px; CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/2948/1059/320/Screenshot2.jpg" border="0" /></a><br />La idea es que sea algo más que un Jump'n'Run (tipo Mario Bros), que introduzca elementos de aventura gráfica, con personajes para hablar con ellos, objetos con los que resolver puzzles, etc. Una buena referencia es el clásico Flashback, pero con scroll. Si no lo habéis jugado, estáis perdiendo el tiempo, probadlo ya!!! (aunque sea algo viejo, no sé si tirará en un ordenador actual)<br /><br /><a href="http://photos1.blogger.com/blogger/2948/1059/1600/Screenshot1.png"><img style="MARGIN: 0px 10px; CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/2948/1059/320/Screenshot1.jpg" border="0" /></a><br /><br /><br />Lo bueno es que estoy aprovechando para crear un framework (que contendrá un editor), de manera que para hacer otros juegos similares sólo tendré que centrarme en determinados aspectos, como la IA de los enemigos, y los gráficos.<br /><br />Este último apartado (los gráficos) es de los que más tiempo consumen cuando uno es un poco torpe como yo... Así que cualquier ayuda en este sentido será gratamente aceptada... :)<br /><br />En cuanto a lo que a día de hoy está implementado, lo intentaré resumir:<br /><ul><li>Sistemas de partículas.</li><li>Gestor de recursos (para evitar cargar varias veces el mismo recurso).</li><li>Scroll parallax, con un número indefinido (según la potencia del equipo) de capas.</li><li>Alpha Blending, tanto para los escenarios como para los personajes.</li><li>Detección de colisiones.</li><li>Cámara que sigue a la entidad que se prefiera.</li><li>Serialización de todos los elementos en XML.</li><li>Chupao de programar - extender ;)</li></ul><p>Lo que todavía me queda por implementar:</p><ul><li>Editor de niveles (empezado, pero no completo)</li><li>Plataformas móviles.</li><li>...</li></ul><p>Pues lo dicho, que se admite toda la ayuda que se quiera, sobre todo para los gráficos, aunque también desde guiones para el juego, colaboraciones para la programación, etc. ;)</p>Augusto Ruizhttp://www.blogger.com/profile/05966632752704864542noreply@blogger.com0tag:blogger.com,1999:blog-12472470.post-1138891130485894022006-02-02T15:36:00.000+01:002006-02-02T15:38:50.893+01:00Un año más......unos cuantos pelos menos ;)<br /><br />En fin, que ya soy oficialmente un año más viejo...<br /><br />Voy a colocar en los menús de la derecha un <a href="http://www.pandora.com/feeds/people/augusto.ruiz/favorites.xml">feed RSS</a> en el que aparecen mis canciones favoritas que vaya descubriendo en esa maravilla de aplicación llamada Pandora.<br /><br />De momento sólo hay 3 canciones, dos clasicazos y una que no conocía, pero que me ha gustado bastante.<br /><br />Un saludooooo!Augusto Ruizhttp://www.blogger.com/profile/05966632752704864542noreply@blogger.com0tag:blogger.com,1999:blog-12472470.post-1135030801883425662005-12-19T23:17:00.000+01:002005-12-19T23:20:02.776+01:00Más arbolicos...Estoy un poco liado preparando un tutorial sobre los sistemas de Lindenmayer. Tendréis más noticias cuando esté listo. De momento, ahí va una imagen de muestra de la pinta que tiene lo que hace a día de hoy...<br /><br /><a href="http://photos1.blogger.com/blogger/2948/1059/1600/nuevaCaptura.png"><img style="cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/2948/1059/400/nuevaCaptura.jpg" border="0" alt="" /></a><br /><br />Un saludo a todos!Augusto Ruizhttp://www.blogger.com/profile/05966632752704864542noreply@blogger.com0tag:blogger.com,1999:blog-12472470.post-1134331314918632412005-12-11T20:59:00.000+01:002005-12-11T21:05:11.420+01:00Un par de capturas de los Sistemas de Lindenmayer...<a href="http://photos1.blogger.com/blogger/2948/1059/1600/Image3.jpg" target="_blank"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/2948/1059/320/Image3.jpg" border="0" alt="" /></a><br /><a href="http://photos1.blogger.com/blogger/2948/1059/1600/Image2.jpg" target="_blank"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/2948/1059/320/Image2.jpg" border="0" alt="" /></a><br /><br /><br />Saludos a todos!Augusto Ruizhttp://www.blogger.com/profile/05966632752704864542noreply@blogger.com0tag:blogger.com,1999:blog-12472470.post-1133439260350293382005-12-01T13:12:00.000+01:002005-12-01T13:14:23.233+01:00FeedsOtra cosa, ahora ya se pueden recibir feeds de este blog. Los enlaces son los siguientes:<br /><br /><ul><br /> <li><a href="http://feeds.feedburner.com/ParanoiasMentales" title="RSS Feed">Formato RSS</a></li><br /> <li><a href="<$BlogSiteFeedUrl$>" title="Atom feed">Formato Atom</a></li><br /></ul><br /><br />También he puesto estos enlaces en la barra lateral.Augusto Ruizhttp://www.blogger.com/profile/05966632752704864542noreply@blogger.com0tag:blogger.com,1999:blog-12472470.post-1133435617607111422005-12-01T12:03:00.000+01:002005-12-01T12:53:53.653+01:00El código...Tened en cuenta que todavía no está terminado... Pero aún así posteo el código... :)<br /><br /><!-- code formatted by http://manoli.net/csharpformat/ --><br /><br />Rule.cs:<br /><br /><div class="csharpcode"><br /><pre class="alt"><span class="kwrd">using</span> System;</pre><br /><pre> </pre><br /><pre class="alt"><span class="kwrd">namespace</span> TreeSharp</pre><br /><pre>{</pre><br /><pre class="alt"> <span class="rem">/// <summary></span></pre><br /><pre> <span class="rem">/// Summary description for Rule.</span></pre><br /><pre class="alt"> <span class="rem">/// </summary></span></pre><br /><pre> <span class="kwrd">public</span> <span class="kwrd">class</span> Rule</pre><br /><pre class="alt"> {</pre><br /><pre> <span class="kwrd">char</span> cLeftSide;</pre><br /><pre class="alt"> <span class="kwrd">string</span> sRightSide;</pre><br /><pre> <span class="kwrd">float</span> fProbability;</pre><br /><pre class="alt"> </pre><br /><pre> <span class="kwrd">public</span> Rule()</pre><br /><pre class="alt"> {</pre><br /><pre> cLeftSide = <span class="str">'\0'</span>;</pre><br /><pre class="alt"> sRightSide = <span class="str">""</span>;</pre><br /><pre> fProbability = 0.0f;</pre><br /><pre class="alt"> }</pre><br /><pre> </pre><br /><pre class="alt"> <span class="kwrd">public</span> Rule(<span class="kwrd">char</span> cLeftSide, <span class="kwrd">string</span> sRightSide, <span class="kwrd">float</span> fProbability)</pre><br /><pre> {</pre><br /><pre class="alt"> <span class="kwrd">this</span>.cLeftSide = cLeftSide;</pre><br /><pre> <span class="kwrd">this</span>.sRightSide = sRightSide;</pre><br /><pre class="alt"> <span class="kwrd">this</span>.fProbability = fProbability;</pre><br /><pre> }</pre><br /><pre class="alt"> </pre><br /><pre> <span class="kwrd">public</span> <span class="kwrd">char</span> LeftSide</pre><br /><pre class="alt"> {</pre><br /><pre> get</pre><br /><pre class="alt"> {</pre><br /><pre> <span class="kwrd">return</span> <span class="kwrd">this</span>.cLeftSide;</pre><br /><pre class="alt"> }</pre><br /><pre> set</pre><br /><pre class="alt"> {</pre><br /><pre> <span class="kwrd">this</span>.cLeftSide = <span class="kwrd">value</span>;</pre><br /><pre class="alt"> }</pre><br /><pre> }</pre><br /><pre class="alt"> </pre><br /><pre> <span class="kwrd">public</span> <span class="kwrd">string</span> RightSide</pre><br /><pre class="alt"> {</pre><br /><pre> get</pre><br /><pre class="alt"> {</pre><br /><pre> <span class="kwrd">return</span> <span class="kwrd">this</span>.sRightSide;</pre><br /><pre class="alt"> }</pre><br /><pre> set</pre><br /><pre class="alt"> {</pre><br /><pre> <span class="kwrd">this</span>.sRightSide = <span class="kwrd">value</span>;</pre><br /><pre class="alt"> }</pre><br /><pre> }</pre><br /><pre class="alt"> </pre><br /><pre> <span class="kwrd">public</span> <span class="kwrd">float</span> Probability</pre><br /><pre class="alt"> {</pre><br /><pre> get</pre><br /><pre class="alt"> {</pre><br /><pre> <span class="kwrd">return</span> <span class="kwrd">this</span>.fProbability;</pre><br /><pre class="alt"> }</pre><br /><pre> set</pre><br /><pre class="alt"> {</pre><br /><pre> <span class="kwrd">this</span>.fProbability = <span class="kwrd">value</span>;</pre><br /><pre class="alt"> }</pre><br /><pre> }</pre><br /><pre class="alt"> }</pre><br /><pre>}</pre><br /></div><br /><br />TreeParams.cs:<br /><br /><div class="csharpcode"><br /><pre class="alt"><span class="kwrd">using</span> System;</pre><br /><pre><span class="kwrd">using</span> System.ComponentModel;</pre><br /><pre class="alt"> </pre><br /><pre><span class="kwrd">namespace</span> TreeSharp</pre><br /><pre class="alt">{</pre><br /><pre> <span class="rem">/// <summary></span></pre><br /><pre class="alt"> <span class="rem">/// Summary description for RenderParameters.</span></pre><br /><pre> <span class="rem">/// </summary></span></pre><br /><pre class="alt"> <span class="kwrd">public</span> <span class="kwrd">class</span> TreeParams</pre><br /><pre> {</pre><br /><pre class="alt"> </pre><br /><pre> <span class="kwrd">private</span> <span class="kwrd">float</span> fXDegrees;</pre><br /><pre class="alt"> <span class="kwrd">private</span> <span class="kwrd">float</span> fYDegrees;</pre><br /><pre> <span class="kwrd">private</span> <span class="kwrd">float</span> fZDegrees;</pre><br /><pre class="alt"> <span class="kwrd">private</span> <span class="kwrd">float</span> fSegmentLength;</pre><br /><pre> <span class="kwrd">private</span> <span class="kwrd">float</span> fSegmentInitialWidth;</pre><br /><pre class="alt"> <span class="kwrd">private</span> <span class="kwrd">float</span> fWidthDecrement;</pre><br /><pre> <span class="kwrd">private</span> <span class="kwrd">float</span> fRotationNoise;</pre><br /><pre class="alt"> <span class="kwrd">private</span> <span class="kwrd">float</span> fLengthNoise;</pre><br /><pre> </pre><br /><pre class="alt"> <span class="kwrd">public</span> TreeParams()</pre><br /><pre> {</pre><br /><pre class="alt"> <span class="rem">// 30º = PI / 6</span></pre><br /><pre> fXDegrees = fYDegrees = fZDegrees = (<span class="kwrd">float</span>)(Math.PI / 6);</pre><br /><pre class="alt"> fSegmentLength = 10.0f;</pre><br /><pre> fSegmentInitialWidth = 5.0f;</pre><br /><pre class="alt"> fWidthDecrement = 0.01f;</pre><br /><pre> fRotationNoise = 0.0f;</pre><br /><pre class="alt"> fLengthNoise = 0.0f;</pre><br /><pre> }</pre><br /><pre class="alt"> </pre><br /><pre> <span class="rem">/// <summary></span></pre><br /><pre class="alt"> <span class="rem">/// Degrees to be applied on rotations (X-Axis).</span></pre><br /><pre> <span class="rem">/// </summary></span></pre><br /><pre class="alt"> [ Description(<span class="str">"Degrees to be applied on rotations (X-Axis)."</span>),</pre><br /><pre> DefaultValue(Math.PI/6) ]</pre><br /><pre class="alt"> <span class="kwrd">public</span> <span class="kwrd">float</span> XDegrees</pre><br /><pre> {</pre><br /><pre class="alt"> get </pre><br /><pre> {</pre><br /><pre class="alt"> <span class="kwrd">return</span> fXDegrees;</pre><br /><pre> }</pre><br /><pre class="alt"> set </pre><br /><pre> {</pre><br /><pre class="alt"> fXDegrees = <span class="kwrd">value</span>;</pre><br /><pre> }</pre><br /><pre class="alt"> }</pre><br /><pre> </pre><br /><pre class="alt"> <span class="rem">/// <summary></span></pre><br /><pre> <span class="rem">/// Degrees to be applied on rotations (Y-Axis).</span></pre><br /><pre class="alt"> <span class="rem">/// </summary></span></pre><br /><pre> [ Description(<span class="str">"Degrees to be applied on rotations (Y-Axis)."</span>), </pre><br /><pre class="alt"> DefaultValue(Math.PI/6) ]</pre><br /><pre> <span class="kwrd">public</span> <span class="kwrd">float</span> YDegrees</pre><br /><pre class="alt"> {</pre><br /><pre> get </pre><br /><pre class="alt"> {</pre><br /><pre> <span class="kwrd">return</span> fYDegrees;</pre><br /><pre class="alt"> }</pre><br /><pre> set </pre><br /><pre class="alt"> {</pre><br /><pre> fYDegrees = <span class="kwrd">value</span>;</pre><br /><pre class="alt"> }</pre><br /><pre> }</pre><br /><pre class="alt"> </pre><br /><pre> <span class="rem">/// <summary></span></pre><br /><pre class="alt"> <span class="rem">/// Degrees to be applied on rotations (Z-Axis).</span></pre><br /><pre> <span class="rem">/// </summary></span></pre><br /><pre class="alt"> [ Description(<span class="str">"Degrees to be applied on rotations (Z-Axis)."</span>),</pre><br /><pre> DefaultValue(Math.PI/6) ]</pre><br /><pre class="alt"> <span class="kwrd">public</span> <span class="kwrd">float</span> ZDegrees</pre><br /><pre> {</pre><br /><pre class="alt"> get </pre><br /><pre> {</pre><br /><pre class="alt"> <span class="kwrd">return</span> fZDegrees;</pre><br /><pre> }</pre><br /><pre class="alt"> set </pre><br /><pre> {</pre><br /><pre class="alt"> fZDegrees = <span class="kwrd">value</span>;</pre><br /><pre> }</pre><br /><pre class="alt"> }</pre><br /><pre> </pre><br /><pre class="alt"> <span class="rem">/// <summary></span></pre><br /><pre> <span class="rem">/// Segment Length.</span></pre><br /><pre class="alt"> <span class="rem">/// </summary></span></pre><br /><pre> [ Description(<span class="str">"Segment Length."</span>), </pre><br /><pre class="alt"> DefaultValue(10.0f) ]</pre><br /><pre> <span class="kwrd">public</span> <span class="kwrd">float</span> SegmentLength</pre><br /><pre class="alt"> {</pre><br /><pre> get </pre><br /><pre class="alt"> {</pre><br /><pre> <span class="kwrd">return</span> fSegmentLength;</pre><br /><pre class="alt"> }</pre><br /><pre> set </pre><br /><pre class="alt"> {</pre><br /><pre> fSegmentLength = <span class="kwrd">value</span>;</pre><br /><pre class="alt"> }</pre><br /><pre> }</pre><br /><pre class="alt"> </pre><br /><pre> <span class="rem">/// <summary></span></pre><br /><pre class="alt"> <span class="rem">/// Segment width at the tree base.</span></pre><br /><pre> <span class="rem">/// </summary></span></pre><br /><pre class="alt"> [ Description(<span class="str">"Segment width at the tree base."</span>),</pre><br /><pre> DefaultValue(5.0f) ]</pre><br /><pre class="alt"> <span class="kwrd">public</span> <span class="kwrd">float</span> SegmentInitialWidth</pre><br /><pre> {</pre><br /><pre class="alt"> get </pre><br /><pre> {</pre><br /><pre class="alt"> <span class="kwrd">return</span> fSegmentInitialWidth;</pre><br /><pre> }</pre><br /><pre class="alt"> set </pre><br /><pre> {</pre><br /><pre class="alt"> fSegmentInitialWidth = <span class="kwrd">value</span>;</pre><br /><pre> }</pre><br /><pre class="alt"> }</pre><br /><pre> </pre><br /><pre class="alt"> <span class="rem">/// <summary></span></pre><br /><pre> <span class="rem">/// Width decrement per step.</span></pre><br /><pre class="alt"> <span class="rem">/// </summary></span></pre><br /><pre> [ Description(<span class="str">"Width decrement per step."</span>),</pre><br /><pre class="alt"> DefaultValue(0.01f) ]</pre><br /><pre> <span class="kwrd">public</span> <span class="kwrd">float</span> WidthDecrement</pre><br /><pre class="alt"> {</pre><br /><pre> get </pre><br /><pre class="alt"> {</pre><br /><pre> <span class="kwrd">return</span> fWidthDecrement;</pre><br /><pre class="alt"> }</pre><br /><pre> set </pre><br /><pre class="alt"> {</pre><br /><pre> fWidthDecrement = <span class="kwrd">value</span>;</pre><br /><pre class="alt"> }</pre><br /><pre> }</pre><br /><pre class="alt"> </pre><br /><pre> <span class="rem">/// <summary></span></pre><br /><pre class="alt"> <span class="rem">/// Noise factor to be applied to rotations. Zero equals no noise.</span></pre><br /><pre> <span class="rem">/// Valid values are 0 through 1.</span></pre><br /><pre class="alt"> <span class="rem">/// </summary></span></pre><br /><pre> [ Description(<span class="str">"Noise factor to be applied to rotations. Zero equals no noise.\nValid values are 0 through 1."</span>), </pre><br /><pre class="alt"> DefaultValue(0.0f) ]</pre><br /><pre> <span class="kwrd">public</span> <span class="kwrd">float</span> RotationNoise</pre><br /><pre class="alt"> {</pre><br /><pre> get </pre><br /><pre class="alt"> {</pre><br /><pre> <span class="kwrd">return</span> fRotationNoise;</pre><br /><pre class="alt"> }</pre><br /><pre> set </pre><br /><pre class="alt"> {</pre><br /><pre> fRotationNoise = <span class="kwrd">value</span>;</pre><br /><pre class="alt"> }</pre><br /><pre> }</pre><br /><pre class="alt"> </pre><br /><pre> <span class="rem">/// <summary></span></pre><br /><pre class="alt"> <span class="rem">/// Noise factor to be applied to length calculations. Zero equals no noise.</span></pre><br /><pre> <span class="rem">/// Valid values are 0 through 1.</span></pre><br /><pre class="alt"> <span class="rem">/// </summary></span></pre><br /><pre> [ Description(<span class="str">"Noise factor to be applied to length calculations. Zero equals no noise.\nValid values are 0 through 1."</span>), </pre><br /><pre class="alt"> DefaultValue(0.0f) ]</pre><br /><pre> <span class="kwrd">public</span> <span class="kwrd">float</span> LengthNoise</pre><br /><pre class="alt"> {</pre><br /><pre> get </pre><br /><pre class="alt"> {</pre><br /><pre> <span class="kwrd">return</span> fLengthNoise;</pre><br /><pre class="alt"> }</pre><br /><pre> set </pre><br /><pre class="alt"> {</pre><br /><pre> fLengthNoise = <span class="kwrd">value</span>;</pre><br /><pre class="alt"> }</pre><br /><pre> }</pre><br /><pre class="alt"> }</pre><br /><pre>}</pre><br /></div><br /><br />LSystem.cs:<br /><br /><div class="csharpcode"><br /><pre class="alt"><span class="kwrd">using</span> System;</pre><br /><pre><span class="kwrd">using</span> System.Collections;</pre><br /><pre class="alt"><span class="kwrd">using</span> TreeSharp;</pre><br /><pre> </pre><br /><pre class="alt"><span class="kwrd">namespace</span> TreeSharp</pre><br /><pre>{</pre><br /><pre class="alt"> <span class="rem">/// <summary></span></pre><br /><pre> <span class="rem">/// Summary description for LSystem.</span></pre><br /><pre class="alt"> <span class="rem">/// </summary></span></pre><br /><pre> <span class="kwrd">public</span> <span class="kwrd">class</span> LSystem</pre><br /><pre class="alt"> {</pre><br /><pre> <span class="kwrd">private</span> Hashtable _htRules;</pre><br /><pre class="alt"> <span class="kwrd">private</span> Random _rnd;</pre><br /><pre> </pre><br /><pre class="alt"> <span class="kwrd">public</span> LSystem()</pre><br /><pre> {</pre><br /><pre class="alt"> _htRules = <span class="kwrd">new</span> Hashtable();</pre><br /><pre> _rnd = <span class="kwrd">new</span> Random();</pre><br /><pre class="alt"> }</pre><br /><pre> </pre><br /><pre class="alt"> <span class="kwrd">public</span> <span class="kwrd">void</span> AddRule(Rule newRule)</pre><br /><pre> {</pre><br /><pre class="alt"> Rule[] rules;</pre><br /><pre> Rule[] oldRules;</pre><br /><pre class="alt"> </pre><br /><pre> <span class="kwrd">if</span> (_htRules.ContainsKey(newRule.LeftSide)) </pre><br /><pre class="alt"> {</pre><br /><pre> oldRules = (Rule[])_htRules[newRule.LeftSide];</pre><br /><pre class="alt"> rules = <span class="kwrd">new</span> Rule[oldRules.Length + 1];</pre><br /><pre> Array.Copy(oldRules,0,rules,0,oldRules.Length);</pre><br /><pre class="alt"> rules[rules.Length-1] = newRule;</pre><br /><pre> _htRules[newRule.LeftSide] = rules;</pre><br /><pre class="alt"> }</pre><br /><pre> <span class="kwrd">else</span></pre><br /><pre class="alt"> {</pre><br /><pre> rules = <span class="kwrd">new</span> Rule[1];</pre><br /><pre class="alt"> rules[0] = newRule;</pre><br /><pre> _htRules.Add(newRule.LeftSide, rules);</pre><br /><pre class="alt"> }</pre><br /><pre> }</pre><br /><pre class="alt"> </pre><br /><pre> <span class="kwrd">public</span> <span class="kwrd">void</span> ClearRules()</pre><br /><pre class="alt"> {</pre><br /><pre> _htRules.Clear();</pre><br /><pre class="alt"> }</pre><br /><pre> </pre><br /><pre class="alt"> <span class="kwrd">private</span> <span class="kwrd">string</span> sRightSide(<span class="kwrd">char</span> cLeftSide)</pre><br /><pre> {</pre><br /><pre class="alt"> <span class="kwrd">string</span> sResult=cLeftSide.ToString();</pre><br /><pre> Rule[] rules;</pre><br /><pre class="alt"> </pre><br /><pre> <span class="kwrd">if</span> (_htRules.ContainsKey(cLeftSide))</pre><br /><pre class="alt"> {</pre><br /><pre> rules = (Rule[])_htRules[cLeftSide];</pre><br /><pre class="alt"> <span class="kwrd">float</span> fChance;</pre><br /><pre> <span class="kwrd">float</span> fMin = 0.0f;</pre><br /><pre class="alt"> <span class="kwrd">float</span> fMax;</pre><br /><pre> </pre><br /><pre class="alt"> fChance = (<span class="kwrd">float</span>) _rnd.NextDouble();</pre><br /><pre> <span class="kwrd">for</span> (<span class="kwrd">int</span> i = 0; i < rules.Length; i++)</pre><br /><pre class="alt"> {</pre><br /><pre> fMax = fMin + rules[i].Probability;</pre><br /><pre class="alt"> <span class="kwrd">if</span> ((fChance >= fMin) && (fChance < fMax))</pre><br /><pre> {</pre><br /><pre class="alt"> sResult = rules[i].RightSide;</pre><br /><pre> <span class="kwrd">break</span>;</pre><br /><pre class="alt"> }</pre><br /><pre> fMin = fMax;</pre><br /><pre class="alt"> }</pre><br /><pre> }</pre><br /><pre class="alt"> </pre><br /><pre> <span class="kwrd">return</span> sResult;</pre><br /><pre class="alt"> }</pre><br /><pre> </pre><br /><pre class="alt"> <span class="kwrd">public</span> <span class="kwrd">string</span> PerformIterations(<span class="kwrd">string</span> sStartString, <span class="kwrd">int</span> iIterations)</pre><br /><pre> {</pre><br /><pre class="alt"> System.Text.StringBuilder sbCurrent = <span class="kwrd">new</span> System.Text.StringBuilder();</pre><br /><pre> <span class="kwrd">string</span> sCurrentString = sStartString;</pre><br /><pre class="alt"> </pre><br /><pre> <span class="kwrd">for</span>(<span class="kwrd">int</span> i = 0; i < iIterations; i++)</pre><br /><pre class="alt"> {</pre><br /><pre> <span class="kwrd">int</span> iStrLen = sCurrentString.Length;</pre><br /><pre class="alt"> <span class="kwrd">for</span>(<span class="kwrd">int</span> iChar = 0; iChar < iStrLen; iChar++)</pre><br /><pre> {</pre><br /><pre class="alt"> sbCurrent.Append(sRightSide(sCurrentString[iChar]));</pre><br /><pre> }</pre><br /><pre class="alt"> sCurrentString = sbCurrent.ToString();</pre><br /><pre> sbCurrent.Length = 0;</pre><br /><pre class="alt"> }</pre><br /><pre> <span class="kwrd">return</span> sCurrentString;</pre><br /><pre class="alt"> }</pre><br /><pre> }</pre><br /><pre class="alt">}</pre><br /></div><br /><br />Renderer.cs:<br /><br /><div class="csharpcode"><br /><pre class="alt"><span class="kwrd">using</span> System;</pre><br /><pre><span class="kwrd">using</span> System.Collections;</pre><br /><pre class="alt"><span class="kwrd">using</span> System.ComponentModel;</pre><br /><pre><span class="kwrd">using</span> System.Drawing;</pre><br /><pre class="alt"><span class="kwrd">using</span> System.Windows.Forms;</pre><br /><pre> </pre><br /><pre class="alt"><span class="kwrd">using</span> Microsoft.DirectX;</pre><br /><pre><span class="kwrd">using</span> Microsoft.DirectX.Direct3D;</pre><br /><pre class="alt"> </pre><br /><pre><span class="kwrd">using</span> TreeSharp;</pre><br /><pre class="alt"> </pre><br /><pre><span class="kwrd">namespace</span> TreeSharp</pre><br /><pre class="alt">{</pre><br /><pre> <span class="rem">/// <summary></span></pre><br /><pre class="alt"> <span class="rem">/// Summary description for Renderer.</span></pre><br /><pre> <span class="rem">/// </summary></span></pre><br /><pre class="alt"> <span class="kwrd">public</span> <span class="kwrd">class</span> Renderer</pre><br /><pre> {</pre><br /><pre class="alt"> <span class="rem">/// <summary></span></pre><br /><pre> <span class="rem">/// The rendering device</span></pre><br /><pre class="alt"> <span class="rem">/// </summary></span></pre><br /><pre> <span class="kwrd">private</span> Device _device = <span class="kwrd">null</span>;</pre><br /><pre class="alt"> <span class="kwrd">private</span> Microsoft.DirectX.Direct3D.Font _font = <span class="kwrd">null</span>;</pre><br /><pre> <span class="kwrd">private</span> Sprite _sprite = <span class="kwrd">null</span>;</pre><br /><pre class="alt"> <span class="kwrd">private</span> Control _control = <span class="kwrd">null</span>;</pre><br /><pre> <span class="kwrd">private</span> System.Drawing.Font _winFont;</pre><br /><pre class="alt"> <span class="kwrd">private</span> <span class="kwrd">int</span> _vertexCount;</pre><br /><pre> </pre><br /><pre class="alt"> <span class="kwrd">public</span> Renderer(Control control, System.Drawing.Font font)</pre><br /><pre> {</pre><br /><pre class="alt"> _control = control;</pre><br /><pre> _winFont = font;</pre><br /><pre class="alt"> _vertexCount = -1;</pre><br /><pre> }</pre><br /><pre class="alt"> </pre><br /><pre> <span class="kwrd">public</span> Device Device</pre><br /><pre class="alt"> {</pre><br /><pre> get</pre><br /><pre class="alt"> {</pre><br /><pre> <span class="kwrd">return</span> _device;</pre><br /><pre class="alt"> }</pre><br /><pre> }</pre><br /><pre class="alt"> </pre><br /><pre> <span class="kwrd">public</span> VertexBuffer Buffer</pre><br /><pre class="alt"> {</pre><br /><pre> set</pre><br /><pre class="alt"> {</pre><br /><pre> _vertexCount = <span class="kwrd">value</span>.SizeInBytes / (CustomVertex.PositionColored.StrideSize);</pre><br /><pre class="alt"> _device.SetStreamSource(0, <span class="kwrd">value</span>, 0);</pre><br /><pre> _device.VertexFormat = CustomVertex.PositionColored.Format;</pre><br /><pre class="alt"> }</pre><br /><pre> }</pre><br /><pre class="alt"> </pre><br /><pre> <span class="kwrd">public</span> <span class="kwrd">bool</span> InitializeGraphics()</pre><br /><pre class="alt"> {</pre><br /><pre> <span class="kwrd">try</span> </pre><br /><pre class="alt"> {</pre><br /><pre> <span class="rem">// Now let's setup the Direct3D stuff</span></pre><br /><pre class="alt"> PresentParameters presentParams = <span class="kwrd">new</span> PresentParameters();</pre><br /><pre> presentParams.Windowed = <span class="kwrd">true</span>;</pre><br /><pre class="alt"> presentParams.SwapEffect = SwapEffect.Discard;</pre><br /><pre> </pre><br /><pre class="alt"> <span class="rem">// Create the device</span></pre><br /><pre> _device = <span class="kwrd">new</span> Device(0, DeviceType.Hardware, _control, CreateFlags.SoftwareVertexProcessing, presentParams);</pre><br /><pre class="alt"> </pre><br /><pre> <span class="rem">// Setup the event handlers for the device</span></pre><br /><pre class="alt"> _device.DeviceLost += <span class="kwrd">new</span> EventHandler(<span class="kwrd">this</span>.InvalidateDeviceObjects);</pre><br /><pre> _device.DeviceReset += <span class="kwrd">new</span> EventHandler(<span class="kwrd">this</span>.RestoreDeviceObjects);</pre><br /><pre class="alt"> _device.Disposing += <span class="kwrd">new</span> EventHandler(<span class="kwrd">this</span>.DeleteDeviceObjects);</pre><br /><pre> _device.DeviceResizing += <span class="kwrd">new</span> CancelEventHandler(<span class="kwrd">this</span>.EnvironmentResizing);</pre><br /><pre class="alt"> </pre><br /><pre> _font = <span class="kwrd">new</span> Microsoft.DirectX.Direct3D.Font(_device, _winFont);</pre><br /><pre class="alt"> _sprite = <span class="kwrd">new</span> Sprite(_device);</pre><br /><pre> </pre><br /><pre class="alt"> <span class="kwrd">return</span> <span class="kwrd">true</span>;</pre><br /><pre> } </pre><br /><pre class="alt"> <span class="kwrd">catch</span> (DirectXException) </pre><br /><pre> {</pre><br /><pre class="alt"> <span class="kwrd">return</span> <span class="kwrd">false</span>;</pre><br /><pre> }</pre><br /><pre class="alt"> }</pre><br /><pre> </pre><br /><pre class="alt"> <span class="rem">/// <summary></span></pre><br /><pre> <span class="rem">/// This method moves the scene</span></pre><br /><pre class="alt"> <span class="rem">/// </summary></span></pre><br /><pre> <span class="kwrd">public</span> <span class="kwrd">virtual</span> <span class="kwrd">void</span> FrameMove()</pre><br /><pre class="alt"> {</pre><br /><pre> <span class="rem">// TODO : Frame movement</span></pre><br /><pre class="alt"> }</pre><br /><pre> </pre><br /><pre class="alt"> <span class="rem">/// <summary></span></pre><br /><pre> <span class="rem">/// This method renders the scene</span></pre><br /><pre class="alt"> <span class="rem">/// </summary></span></pre><br /><pre> <span class="kwrd">public</span> <span class="kwrd">virtual</span> <span class="kwrd">void</span> Render()</pre><br /><pre class="alt"> {</pre><br /><pre> <span class="kwrd">if</span> (_device != <span class="kwrd">null</span>) </pre><br /><pre class="alt"> {</pre><br /><pre> _device.Clear(ClearFlags.Target, Color.Black, 1.0f, 0);</pre><br /><pre class="alt"> _device.BeginScene();</pre><br /><pre> </pre><br /><pre class="alt"> <span class="rem">// TODO : Scene rendering</span></pre><br /><pre> _sprite.Begin(SpriteFlags.AlphaBlend);</pre><br /><pre class="alt"> _font.DrawText(_sprite, <span class="str">"Tree renderer"</span>, 0, 0, Color.White.ToArgb());</pre><br /><pre> _sprite.End();</pre><br /><pre class="alt"> </pre><br /><pre> <span class="kwrd">if</span> (_vertexCount > 0)</pre><br /><pre class="alt"> {</pre><br /><pre> _device.DrawPrimitives(PrimitiveType.PointList, 0, 1); <span class="rem">//_vertexCount);</span></pre><br /><pre class="alt"> }</pre><br /><pre> </pre><br /><pre class="alt"> _device.EndScene();</pre><br /><pre> _device.Present();</pre><br /><pre class="alt"> }</pre><br /><pre> }</pre><br /><pre class="alt"> </pre><br /><pre> <span class="kwrd">protected</span> <span class="kwrd">virtual</span> <span class="kwrd">void</span> InvalidateDeviceObjects(<span class="kwrd">object</span> sender, EventArgs e)</pre><br /><pre class="alt"> {</pre><br /><pre> </pre><br /><pre class="alt"> }</pre><br /><pre> </pre><br /><pre class="alt"> <span class="kwrd">protected</span> <span class="kwrd">virtual</span> <span class="kwrd">void</span> RestoreDeviceObjects(<span class="kwrd">object</span> sender, EventArgs e)</pre><br /><pre> {</pre><br /><pre class="alt"> </pre><br /><pre> }</pre><br /><pre class="alt"> </pre><br /><pre> <span class="kwrd">protected</span> <span class="kwrd">virtual</span> <span class="kwrd">void</span> DeleteDeviceObjects(<span class="kwrd">object</span> sender, EventArgs e)</pre><br /><pre class="alt"> {</pre><br /><pre> </pre><br /><pre class="alt"> }</pre><br /><pre> </pre><br /><pre class="alt"> <span class="kwrd">protected</span> <span class="kwrd">virtual</span> <span class="kwrd">void</span> EnvironmentResizing(<span class="kwrd">object</span> sender, CancelEventArgs e)</pre><br /><pre> {</pre><br /><pre class="alt"> </pre><br /><pre> }</pre><br /><pre class="alt"> </pre><br /><pre> }</pre><br /><pre class="alt">}</pre><br /></div><br /><br />CommandParser.cs:<br /><br /><div class="csharpcode"><br /><pre class="alt"><span class="kwrd">using</span> System;</pre><br /><pre><span class="kwrd">using</span> System.Drawing;</pre><br /><pre class="alt"><span class="kwrd">using</span> System.Text.RegularExpressions;</pre><br /><pre> </pre><br /><pre class="alt"><span class="kwrd">using</span> Microsoft.DirectX;</pre><br /><pre><span class="kwrd">using</span> Microsoft.DirectX.Direct3D;</pre><br /><pre class="alt"> </pre><br /><pre><span class="kwrd">namespace</span> TreeSharp</pre><br /><pre class="alt">{</pre><br /><pre> <span class="rem">/// <summary></span></pre><br /><pre class="alt"> <span class="rem">/// Translates the commands into vertex data. Also applies texturing </span></pre><br /><pre> <span class="rem">/// information.</span></pre><br /><pre class="alt"> <span class="rem">/// </summary></span></pre><br /><pre> <span class="kwrd">public</span> <span class="kwrd">class</span> CommandParser</pre><br /><pre class="alt"> {</pre><br /><pre> </pre><br /><pre class="alt"> <span class="kwrd">private</span> TreeParams _treeParams = <span class="kwrd">null</span>;</pre><br /><pre> <span class="kwrd">private</span> Device _device;</pre><br /><pre class="alt"> </pre><br /><pre> <span class="kwrd">public</span> CommandParser(Device device)</pre><br /><pre class="alt"> {</pre><br /><pre> _device = device;</pre><br /><pre class="alt"> }</pre><br /><pre> </pre><br /><pre class="alt"> <span class="kwrd">public</span> TreeParams TreeParameters</pre><br /><pre> {</pre><br /><pre class="alt"> get</pre><br /><pre> {</pre><br /><pre class="alt"> <span class="kwrd">return</span> _treeParams;</pre><br /><pre> }</pre><br /><pre class="alt"> set</pre><br /><pre> {</pre><br /><pre class="alt"> _treeParams = <span class="kwrd">value</span>;</pre><br /><pre> }</pre><br /><pre class="alt"> }</pre><br /><pre> </pre><br /><pre class="alt"> <span class="kwrd">public</span> VertexBuffer Parse(<span class="kwrd">string</span> sCommand)</pre><br /><pre> {</pre><br /><pre class="alt"> Regex fCount, lCount;</pre><br /><pre> <span class="kwrd">int</span> length = sCommand.Length;</pre><br /><pre class="alt"> fCount = <span class="kwrd">new</span> Regex(<span class="str">"F"</span>);</pre><br /><pre> lCount = <span class="kwrd">new</span> Regex(<span class="str">"L"</span>);</pre><br /><pre class="alt"> <span class="kwrd">int</span> vertexCount;</pre><br /><pre> </pre><br /><pre class="alt"> vertexCount = (fCount.Matches(sCommand).Count * 16) + (lCount.Matches(sCommand).Count * 3);</pre><br /><pre> </pre><br /><pre class="alt"> VertexBuffer vb = <span class="kwrd">new</span> VertexBuffer(<span class="kwrd">typeof</span>(CustomVertex.PositionColored), vertexCount, _device, Usage.WriteOnly, CustomVertex.PositionColored.Format , Pool.Default);</pre><br /><pre> GraphicsStream vbData = vb.Lock(0, 0, 0);</pre><br /><pre class="alt"> </pre><br /><pre> <span class="kwrd">for</span>(<span class="kwrd">int</span> i = 0; i < length; i++)</pre><br /><pre class="alt"> {</pre><br /><pre> CustomVertex.PositionColored vert = <span class="kwrd">new</span> CustomVertex.PositionColored();</pre><br /><pre class="alt"> <span class="kwrd">switch</span>(sCommand[i])</pre><br /><pre> {</pre><br /><pre class="alt"> <span class="kwrd">case</span> <span class="str">'F'</span>:</pre><br /><pre> vert.Color = Color.White.ToArgb();</pre><br /><pre class="alt"> vert.X = 1.0f;</pre><br /><pre> vert.Y = 1.0f;</pre><br /><pre class="alt"> vert.Z = 1.0f;</pre><br /><pre> vbData.Write(vert);</pre><br /><pre class="alt"> <span class="kwrd">break</span>;</pre><br /><pre> }</pre><br /><pre class="alt"> }</pre><br /><pre> vb.Unlock();</pre><br /><pre class="alt"> </pre><br /><pre> <span class="kwrd">return</span> vb;</pre><br /><pre class="alt"> }</pre><br /><pre> </pre><br /><pre class="alt"> }</pre><br /><pre>}</pre><br /></div><br /><br />frmTreeParams.cs:<br /><br /><div class="csharpcode"><br /><pre class="alt"><span class="kwrd">using</span> System;</pre><br /><pre><span class="kwrd">using</span> System.Drawing;</pre><br /><pre class="alt"><span class="kwrd">using</span> System.Collections;</pre><br /><pre><span class="kwrd">using</span> System.ComponentModel;</pre><br /><pre class="alt"><span class="kwrd">using</span> System.Windows.Forms;</pre><br /><pre> </pre><br /><pre class="alt"><span class="kwrd">namespace</span> TreeSharp</pre><br /><pre>{</pre><br /><pre class="alt"> <span class="rem">/// <summary></span></pre><br /><pre> <span class="rem">/// Summary description for frmTreeParams.</span></pre><br /><pre class="alt"> <span class="rem">/// </summary></span></pre><br /><pre> <span class="kwrd">public</span> <span class="kwrd">class</span> frmTreeParams : System.Windows.Forms.Form</pre><br /><pre class="alt"> {</pre><br /><pre> <span class="kwrd">private</span> System.Windows.Forms.PropertyGrid pGridParams;</pre><br /><pre class="alt"> <span class="rem">/// <summary></span></pre><br /><pre> <span class="rem">/// Required designer variable.</span></pre><br /><pre class="alt"> <span class="rem">/// </summary></span></pre><br /><pre> <span class="kwrd">private</span> System.ComponentModel.Container components = <span class="kwrd">null</span>;</pre><br /><pre class="alt"> </pre><br /><pre> <span class="kwrd">private</span> TreeParams _treeParams;</pre><br /><pre class="alt"> </pre><br /><pre> <span class="kwrd">public</span> frmTreeParams()</pre><br /><pre class="alt"> {</pre><br /><pre> <span class="rem">//</span></pre><br /><pre class="alt"> <span class="rem">// Required for Windows Form Designer support</span></pre><br /><pre> <span class="rem">//</span></pre><br /><pre class="alt"> InitializeComponent();</pre><br /><pre> }</pre><br /><pre class="alt"> </pre><br /><pre> <span class="kwrd">public</span> TreeParams TreeParameters</pre><br /><pre class="alt"> {</pre><br /><pre> get</pre><br /><pre class="alt"> {</pre><br /><pre> <span class="kwrd">return</span> _treeParams;</pre><br /><pre class="alt"> }</pre><br /><pre> set</pre><br /><pre class="alt"> {</pre><br /><pre> _treeParams = <span class="kwrd">value</span>;</pre><br /><pre class="alt"> pGridParams.SelectedObject = _treeParams;</pre><br /><pre> }</pre><br /><pre class="alt"> }</pre><br /><pre> </pre><br /><pre class="alt"> <span class="rem">/// <summary></span></pre><br /><pre> <span class="rem">/// Clean up any resources being used.</span></pre><br /><pre class="alt"> <span class="rem">/// </summary></span></pre><br /><pre> <span class="kwrd">protected</span> <span class="kwrd">override</span> <span class="kwrd">void</span> Dispose( <span class="kwrd">bool</span> disposing )</pre><br /><pre class="alt"> {</pre><br /><pre> <span class="kwrd">if</span>( disposing )</pre><br /><pre class="alt"> {</pre><br /><pre> <span class="kwrd">if</span>(components != <span class="kwrd">null</span>)</pre><br /><pre class="alt"> {</pre><br /><pre> components.Dispose();</pre><br /><pre class="alt"> }</pre><br /><pre> }</pre><br /><pre class="alt"> <span class="kwrd">base</span>.Dispose( disposing );</pre><br /><pre> }</pre><br /><pre class="alt"> </pre><br /><pre> <span class="preproc">#region</span> Windows Form Designer generated code</pre><br /><pre class="alt"> <span class="rem">/// <summary></span></pre><br /><pre> <span class="rem">/// Required method for Designer support - do not modify</span></pre><br /><pre class="alt"> <span class="rem">/// the contents of this method with the code editor.</span></pre><br /><pre> <span class="rem">/// </summary></span></pre><br /><pre class="alt"> <span class="kwrd">private</span> <span class="kwrd">void</span> InitializeComponent()</pre><br /><pre> {</pre><br /><pre class="alt"> <span class="kwrd">this</span>.pGridParams = <span class="kwrd">new</span> System.Windows.Forms.PropertyGrid();</pre><br /><pre> <span class="kwrd">this</span>.SuspendLayout();</pre><br /><pre class="alt"> <span class="rem">// </span></pre><br /><pre> <span class="rem">// pGridParams</span></pre><br /><pre class="alt"> <span class="rem">// </span></pre><br /><pre> <span class="kwrd">this</span>.pGridParams.CommandsVisibleIfAvailable = <span class="kwrd">true</span>;</pre><br /><pre class="alt"> <span class="kwrd">this</span>.pGridParams.Dock = System.Windows.Forms.DockStyle.Fill;</pre><br /><pre> <span class="kwrd">this</span>.pGridParams.LargeButtons = <span class="kwrd">false</span>;</pre><br /><pre class="alt"> <span class="kwrd">this</span>.pGridParams.LineColor = System.Drawing.SystemColors.ScrollBar;</pre><br /><pre> <span class="kwrd">this</span>.pGridParams.Location = <span class="kwrd">new</span> System.Drawing.Point(0, 0);</pre><br /><pre class="alt"> <span class="kwrd">this</span>.pGridParams.Name = <span class="str">"pGridParams"</span>;</pre><br /><pre> <span class="kwrd">this</span>.pGridParams.PropertySort = System.Windows.Forms.PropertySort.Alphabetical;</pre><br /><pre class="alt"> <span class="kwrd">this</span>.pGridParams.Size = <span class="kwrd">new</span> System.Drawing.Size(292, 273);</pre><br /><pre> <span class="kwrd">this</span>.pGridParams.TabIndex = 0;</pre><br /><pre class="alt"> <span class="kwrd">this</span>.pGridParams.Text = <span class="str">"PropertyGrid"</span>;</pre><br /><pre> <span class="kwrd">this</span>.pGridParams.ViewBackColor = System.Drawing.SystemColors.Window;</pre><br /><pre class="alt"> <span class="kwrd">this</span>.pGridParams.ViewForeColor = System.Drawing.SystemColors.WindowText;</pre><br /><pre> <span class="rem">// </span></pre><br /><pre class="alt"> <span class="rem">// frmTreeParams</span></pre><br /><pre> <span class="rem">// </span></pre><br /><pre class="alt"> <span class="kwrd">this</span>.AutoScaleBaseSize = <span class="kwrd">new</span> System.Drawing.Size(5, 13);</pre><br /><pre> <span class="kwrd">this</span>.ClientSize = <span class="kwrd">new</span> System.Drawing.Size(292, 273);</pre><br /><pre class="alt"> <span class="kwrd">this</span>.ControlBox = <span class="kwrd">false</span>;</pre><br /><pre> <span class="kwrd">this</span>.Controls.Add(<span class="kwrd">this</span>.pGridParams);</pre><br /><pre class="alt"> <span class="kwrd">this</span>.FormBorderStyle = System.Windows.Forms.FormBorderStyle.SizableToolWindow;</pre><br /><pre> <span class="kwrd">this</span>.Name = <span class="str">"frmTreeParams"</span>;</pre><br /><pre class="alt"> <span class="kwrd">this</span>.StartPosition = System.Windows.Forms.FormStartPosition.Manual;</pre><br /><pre> <span class="kwrd">this</span>.Text = <span class="str">"Tree Parameters"</span>;</pre><br /><pre class="alt"> <span class="kwrd">this</span>.TopMost = <span class="kwrd">true</span>;</pre><br /><pre> <span class="kwrd">this</span>.ResumeLayout(<span class="kwrd">false</span>);</pre><br /><pre class="alt"> </pre><br /><pre> }</pre><br /><pre class="alt"> <span class="preproc">#endregion</span></pre><br /><pre> }</pre><br /><pre class="alt">}</pre><br /></div><br /><br />frmRender.cs: (contiene el método Main)<br /><br /><div class="csharpcode"><br /><pre class="alt"><span class="kwrd">using</span> System;</pre><br /><pre><span class="kwrd">using</span> System.Collections;</pre><br /><pre class="alt"><span class="kwrd">using</span> System.ComponentModel;</pre><br /><pre><span class="kwrd">using</span> System.Drawing;</pre><br /><pre class="alt"><span class="kwrd">using</span> System.Windows.Forms;</pre><br /><pre> </pre><br /><pre class="alt"><span class="kwrd">using</span> Microsoft.DirectX;</pre><br /><pre><span class="kwrd">using</span> Microsoft.DirectX.Direct3D;</pre><br /><pre class="alt"> </pre><br /><pre><span class="kwrd">using</span> TreeSharp;</pre><br /><pre class="alt"> </pre><br /><pre><span class="kwrd">namespace</span> TreeSharp</pre><br /><pre class="alt">{</pre><br /><pre> <span class="rem">/// <summary></span></pre><br /><pre class="alt"> <span class="rem">/// This is the main class of my Direct3D application</span></pre><br /><pre> <span class="rem">/// </summary></span></pre><br /><pre class="alt"> <span class="kwrd">public</span> <span class="kwrd">class</span> frmRender : Form</pre><br /><pre> {</pre><br /><pre class="alt"> </pre><br /><pre> <span class="preproc">#region</span> Control Initialization </pre><br /><pre class="alt"> </pre><br /><pre> <span class="kwrd">private</span> System.Windows.Forms.ListView lvwRules;</pre><br /><pre class="alt"> <span class="kwrd">private</span> System.Windows.Forms.Button cmdAddRule;</pre><br /><pre> <span class="kwrd">private</span> System.Windows.Forms.NumericUpDown numProbability;</pre><br /><pre class="alt"> <span class="kwrd">private</span> System.Windows.Forms.TextBox txtRightSide;</pre><br /><pre> <span class="kwrd">private</span> System.Windows.Forms.Splitter spltter;</pre><br /><pre class="alt"> <span class="kwrd">private</span> System.Windows.Forms.Panel pnlRender;</pre><br /><pre> <span class="kwrd">private</span> System.Windows.Forms.Label label1;</pre><br /><pre class="alt"> <span class="kwrd">private</span> System.Windows.Forms.Label label2;</pre><br /><pre> <span class="kwrd">private</span> System.Windows.Forms.Label label3;</pre><br /><pre class="alt"> <span class="kwrd">private</span> System.Windows.Forms.ColumnHeader hdrLeftSide;</pre><br /><pre> <span class="kwrd">private</span> System.Windows.Forms.ColumnHeader hdrRightSide;</pre><br /><pre class="alt"> <span class="kwrd">private</span> System.Windows.Forms.ColumnHeader hdrProbability;</pre><br /><pre> <span class="kwrd">private</span> System.Windows.Forms.Label label4;</pre><br /><pre class="alt"> <span class="kwrd">private</span> System.Windows.Forms.Label label5;</pre><br /><pre> <span class="kwrd">private</span> System.Windows.Forms.TextBox txtStartString;</pre><br /><pre class="alt"> <span class="kwrd">private</span> System.Windows.Forms.Button cmdGenerate;</pre><br /><pre> <span class="kwrd">private</span> System.Windows.Forms.Button cmdPreview;</pre><br /><pre class="alt"> <span class="kwrd">private</span> System.Windows.Forms.ColumnHeader hdrCommand;</pre><br /><pre> <span class="kwrd">private</span> System.Windows.Forms.ColumnHeader hdrDescription;</pre><br /><pre class="alt"> <span class="kwrd">private</span> System.Windows.Forms.Panel pnlHelp;</pre><br /><pre> <span class="kwrd">private</span> System.Windows.Forms.Splitter splHelp;</pre><br /><pre class="alt"> <span class="kwrd">private</span> System.Windows.Forms.GroupBox gBoxHelp;</pre><br /><pre> <span class="kwrd">private</span> System.Windows.Forms.Panel pnlLeft;</pre><br /><pre class="alt"> <span class="kwrd">private</span> System.Windows.Forms.Panel pnlRules;</pre><br /><pre> <span class="kwrd">private</span> System.Windows.Forms.ListView lvwHelp;</pre><br /><pre class="alt"> <span class="kwrd">private</span> System.Windows.Forms.Button cmdModify;</pre><br /><pre> <span class="kwrd">private</span> System.Windows.Forms.Button cmdDelete;</pre><br /><pre class="alt"> <span class="kwrd">private</span> System.Windows.Forms.NumericUpDown numIterations;</pre><br /><pre> <span class="kwrd">private</span> System.Windows.Forms.GroupBox gBoxRules;</pre><br /><pre class="alt"> <span class="kwrd">private</span> System.Windows.Forms.TextBox txtLeftSide;</pre><br /><pre> </pre><br /><pre class="alt"> <span class="kwrd">private</span> <span class="kwrd">void</span> InitializeComponent()</pre><br /><pre> {</pre><br /><pre class="alt"> <span class="kwrd">this</span>.lvwRules = <span class="kwrd">new</span> System.Windows.Forms.ListView();</pre><br /><pre> <span class="kwrd">this</span>.hdrLeftSide = <span class="kwrd">new</span> System.Windows.Forms.ColumnHeader();</pre><br /><pre class="alt"> <span class="kwrd">this</span>.hdrRightSide = <span class="kwrd">new</span> System.Windows.Forms.ColumnHeader();</pre><br /><pre> <span class="kwrd">this</span>.hdrProbability = <span class="kwrd">new</span> System.Windows.Forms.ColumnHeader();</pre><br /><pre class="alt"> <span class="kwrd">this</span>.cmdAddRule = <span class="kwrd">new</span> System.Windows.Forms.Button();</pre><br /><pre> <span class="kwrd">this</span>.numProbability = <span class="kwrd">new</span> System.Windows.Forms.NumericUpDown();</pre><br /><pre class="alt"> <span class="kwrd">this</span>.txtRightSide = <span class="kwrd">new</span> System.Windows.Forms.TextBox();</pre><br /><pre> <span class="kwrd">this</span>.pnlLeft = <span class="kwrd">new</span> System.Windows.Forms.Panel();</pre><br /><pre class="alt"> <span class="kwrd">this</span>.pnlRules = <span class="kwrd">new</span> System.Windows.Forms.Panel();</pre><br /><pre> <span class="kwrd">this</span>.gBoxRules = <span class="kwrd">new</span> System.Windows.Forms.GroupBox();</pre><br /><pre class="alt"> <span class="kwrd">this</span>.txtLeftSide = <span class="kwrd">new</span> System.Windows.Forms.TextBox();</pre><br /><pre> <span class="kwrd">this</span>.cmdModify = <span class="kwrd">new</span> System.Windows.Forms.Button();</pre><br /><pre class="alt"> <span class="kwrd">this</span>.cmdDelete = <span class="kwrd">new</span> System.Windows.Forms.Button();</pre><br /><pre> <span class="kwrd">this</span>.label2 = <span class="kwrd">new</span> System.Windows.Forms.Label();</pre><br /><pre class="alt"> <span class="kwrd">this</span>.label3 = <span class="kwrd">new</span> System.Windows.Forms.Label();</pre><br /><pre> <span class="kwrd">this</span>.label4 = <span class="kwrd">new</span> System.Windows.Forms.Label();</pre><br /><pre class="alt"> <span class="kwrd">this</span>.numIterations = <span class="kwrd">new</span> System.Windows.Forms.NumericUpDown();</pre><br /><pre> <span class="kwrd">this</span>.label5 = <span class="kwrd">new</span> System.Windows.Forms.Label();</pre><br /><pre class="alt"> <span class="kwrd">this</span>.txtStartString = <span class="kwrd">new</span> System.Windows.Forms.TextBox();</pre><br /><pre> <span class="kwrd">this</span>.cmdGenerate = <span class="kwrd">new</span> System.Windows.Forms.Button();</pre><br /><pre class="alt"> <span class="kwrd">this</span>.cmdPreview = <span class="kwrd">new</span> System.Windows.Forms.Button();</pre><br /><pre> <span class="kwrd">this</span>.label1 = <span class="kwrd">new</span> System.Windows.Forms.Label();</pre><br /><pre class="alt"> <span class="kwrd">this</span>.splHelp = <span class="kwrd">new</span> System.Windows.Forms.Splitter();</pre><br /><pre> <span class="kwrd">this</span>.pnlHelp = <span class="kwrd">new</span> System.Windows.Forms.Panel();</pre><br /><pre class="alt"> <span class="kwrd">this</span>.gBoxHelp = <span class="kwrd">new</span> System.Windows.Forms.GroupBox();</pre><br /><pre> <span class="kwrd">this</span>.lvwHelp = <span class="kwrd">new</span> System.Windows.Forms.ListView();</pre><br /><pre class="alt"> <span class="kwrd">this</span>.hdrCommand = <span class="kwrd">new</span> System.Windows.Forms.ColumnHeader();</pre><br /><pre> <span class="kwrd">this</span>.hdrDescription = <span class="kwrd">new</span> System.Windows.Forms.ColumnHeader();</pre><br /><pre class="alt"> <span class="kwrd">this</span>.spltter = <span class="kwrd">new</span> System.Windows.Forms.Splitter();</pre><br /><pre> <span class="kwrd">this</span>.pnlRender = <span class="kwrd">new</span> System.Windows.Forms.Panel();</pre><br /><pre class="alt"> ((System.ComponentModel.ISupportInitialize)(<span class="kwrd">this</span>.numProbability)).BeginInit();</pre><br /><pre> <span class="kwrd">this</span>.pnlLeft.SuspendLayout();</pre><br /><pre class="alt"> <span class="kwrd">this</span>.pnlRules.SuspendLayout();</pre><br /><pre> <span class="kwrd">this</span>.gBoxRules.SuspendLayout();</pre><br /><pre class="alt"> ((System.ComponentModel.ISupportInitialize)(<span class="kwrd">this</span>.numIterations)).BeginInit();</pre><br /><pre> <span class="kwrd">this</span>.pnlHelp.SuspendLayout();</pre><br /><pre class="alt"> <span class="kwrd">this</span>.gBoxHelp.SuspendLayout();</pre><br /><pre> <span class="kwrd">this</span>.SuspendLayout();</pre><br /><pre class="alt"> <span class="rem">// </span></pre><br /><pre> <span class="rem">// lvwRules</span></pre><br /><pre class="alt"> <span class="rem">// </span></pre><br /><pre> <span class="kwrd">this</span>.lvwRules.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) </pre><br /><pre class="alt"> | System.Windows.Forms.AnchorStyles.Left) </pre><br /><pre> | System.Windows.Forms.AnchorStyles.Right)));</pre><br /><pre class="alt"> <span class="kwrd">this</span>.lvwRules.Columns.AddRange(<span class="kwrd">new</span> System.Windows.Forms.ColumnHeader[] {</pre><br /><pre> <span class="kwrd">this</span>.hdrLeftSide,</pre><br /><pre class="alt"> <span class="kwrd">this</span>.hdrRightSide,</pre><br /><pre> <span class="kwrd">this</span>.hdrProbability});</pre><br /><pre class="alt"> <span class="kwrd">this</span>.lvwRules.Font = <span class="kwrd">new</span> System.Drawing.Font(<span class="str">"Courier New"</span>, 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));</pre><br /><pre> <span class="kwrd">this</span>.lvwRules.FullRowSelect = <span class="kwrd">true</span>;</pre><br /><pre class="alt"> <span class="kwrd">this</span>.lvwRules.GridLines = <span class="kwrd">true</span>;</pre><br /><pre> <span class="kwrd">this</span>.lvwRules.HideSelection = <span class="kwrd">false</span>;</pre><br /><pre class="alt"> <span class="kwrd">this</span>.lvwRules.Location = <span class="kwrd">new</span> System.Drawing.Point(8, 96);</pre><br /><pre> <span class="kwrd">this</span>.lvwRules.MultiSelect = <span class="kwrd">false</span>;</pre><br /><pre class="alt"> <span class="kwrd">this</span>.lvwRules.Name = <span class="str">"lvwRules"</span>;</pre><br /><pre> <span class="kwrd">this</span>.lvwRules.Size = <span class="kwrd">new</span> System.Drawing.Size(256, 82);</pre><br /><pre class="alt"> <span class="kwrd">this</span>.lvwRules.TabIndex = 9;</pre><br /><pre> <span class="kwrd">this</span>.lvwRules.View = System.Windows.Forms.View.Details;</pre><br /><pre class="alt"> <span class="kwrd">this</span>.lvwRules.SelectedIndexChanged += <span class="kwrd">new</span> System.EventHandler(<span class="kwrd">this</span>.lvwRules_SelectedIndexChanged);</pre><br /><pre> <span class="rem">// </span></pre><br /><pre class="alt"> <span class="rem">// hdrLeftSide</span></pre><br /><pre> <span class="rem">// </span></pre><br /><pre class="alt"> <span class="kwrd">this</span>.hdrLeftSide.Text = <span class="str">"Left"</span>;</pre><br /><pre> <span class="kwrd">this</span>.hdrLeftSide.Width = 69;</pre><br /><pre class="alt"> <span class="rem">// </span></pre><br /><pre> <span class="rem">// hdrRightSide</span></pre><br /><pre class="alt"> <span class="rem">// </span></pre><br /><pre> <span class="kwrd">this</span>.hdrRightSide.Text = <span class="str">"Right"</span>;</pre><br /><pre class="alt"> <span class="kwrd">this</span>.hdrRightSide.Width = 115;</pre><br /><pre> <span class="rem">// </span></pre><br /><pre class="alt"> <span class="rem">// hdrProbability</span></pre><br /><pre> <span class="rem">// </span></pre><br /><pre class="alt"> <span class="kwrd">this</span>.hdrProbability.Text = <span class="str">"Prob"</span>;</pre><br /><pre> <span class="kwrd">this</span>.hdrProbability.TextAlign = System.Windows.Forms.HorizontalAlignment.Right;</pre><br /><pre class="alt"> <span class="kwrd">this</span>.hdrProbability.Width = 52;</pre><br /><pre> <span class="rem">// </span></pre><br /><pre class="alt"> <span class="rem">// cmdAddRule</span></pre><br /><pre> <span class="rem">// </span></pre><br /><pre class="alt"> <span class="kwrd">this</span>.cmdAddRule.Location = <span class="kwrd">new</span> System.Drawing.Point(8, 64);</pre><br /><pre> <span class="kwrd">this</span>.cmdAddRule.Name = <span class="str">"cmdAddRule"</span>;</pre><br /><pre class="alt"> <span class="kwrd">this</span>.cmdAddRule.TabIndex = 6;</pre><br /><pre> <span class="kwrd">this</span>.cmdAddRule.Text = <span class="str">"&Add"</span>;</pre><br /><pre class="alt"> <span class="kwrd">this</span>.cmdAddRule.Click += <span class="kwrd">new</span> System.EventHandler(<span class="kwrd">this</span>.cmdAddRule_Click);</pre><br /><pre> <span class="rem">// </span></pre><br /><pre class="alt"> <span class="rem">// numProbability</span></pre><br /><pre> <span class="rem">// </span></pre><br /><pre class="alt"> <span class="kwrd">this</span>.numProbability.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));</pre><br /><pre> <span class="kwrd">this</span>.numProbability.DecimalPlaces = 2;</pre><br /><pre class="alt"> <span class="kwrd">this</span>.numProbability.Font = <span class="kwrd">new</span> System.Drawing.Font(<span class="str">"Courier New"</span>, 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));</pre><br /><pre> <span class="kwrd">this</span>.numProbability.Increment = <span class="kwrd">new</span> System.Decimal(<span class="kwrd">new</span> <span class="kwrd">int</span>[] {</pre><br /><pre class="alt"> 5,</pre><br /><pre> 0,</pre><br /><pre class="alt"> 0,</pre><br /><pre> 131072});</pre><br /><pre class="alt"> <span class="kwrd">this</span>.numProbability.Location = <span class="kwrd">new</span> System.Drawing.Point(208, 32);</pre><br /><pre> <span class="kwrd">this</span>.numProbability.Maximum = <span class="kwrd">new</span> System.Decimal(<span class="kwrd">new</span> <span class="kwrd">int</span>[] {</pre><br /><pre class="alt"> 1,</pre><br /><pre> 0,</pre><br /><pre class="alt"> 0,</pre><br /><pre> 0});</pre><br /><pre class="alt"> <span class="kwrd">this</span>.numProbability.Name = <span class="str">"numProbability"</span>;</pre><br /><pre> <span class="kwrd">this</span>.numProbability.Size = <span class="kwrd">new</span> System.Drawing.Size(56, 22);</pre><br /><pre class="alt"> <span class="kwrd">this</span>.numProbability.TabIndex = 5;</pre><br /><pre> <span class="kwrd">this</span>.numProbability.Value = <span class="kwrd">new</span> System.Decimal(<span class="kwrd">new</span> <span class="kwrd">int</span>[] {</pre><br /><pre class="alt"> 10,</pre><br /><pre> 0,</pre><br /><pre class="alt"> 0,</pre><br /><pre> 65536});</pre><br /><pre class="alt"> <span class="kwrd">this</span>.numProbability.Leave += <span class="kwrd">new</span> System.EventHandler(<span class="kwrd">this</span>.RuleControls_Leave);</pre><br /><pre> <span class="rem">// </span></pre><br /><pre class="alt"> <span class="rem">// txtRightSide</span></pre><br /><pre> <span class="rem">// </span></pre><br /><pre class="alt"> <span class="kwrd">this</span>.txtRightSide.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) </pre><br /><pre> | System.Windows.Forms.AnchorStyles.Right)));</pre><br /><pre class="alt"> <span class="kwrd">this</span>.txtRightSide.CharacterCasing = System.Windows.Forms.CharacterCasing.Upper;</pre><br /><pre> <span class="kwrd">this</span>.txtRightSide.Font = <span class="kwrd">new</span> System.Drawing.Font(<span class="str">"Courier New"</span>, 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));</pre><br /><pre class="alt"> <span class="kwrd">this</span>.txtRightSide.Location = <span class="kwrd">new</span> System.Drawing.Point(64, 32);</pre><br /><pre> <span class="kwrd">this</span>.txtRightSide.Name = <span class="str">"txtRightSide"</span>;</pre><br /><pre class="alt"> <span class="kwrd">this</span>.txtRightSide.Size = <span class="kwrd">new</span> System.Drawing.Size(136, 22);</pre><br /><pre> <span class="kwrd">this</span>.txtRightSide.TabIndex = 3;</pre><br /><pre class="alt"> <span class="kwrd">this</span>.txtRightSide.Text = <span class="str">""</span>;</pre><br /><pre> <span class="kwrd">this</span>.txtRightSide.TextChanged += <span class="kwrd">new</span> System.EventHandler(<span class="kwrd">this</span>.RuleControls_Leave);</pre><br /><pre class="alt"> <span class="kwrd">this</span>.txtRightSide.Leave += <span class="kwrd">new</span> System.EventHandler(<span class="kwrd">this</span>.RuleControls_Leave);</pre><br /><pre> <span class="rem">// </span></pre><br /><pre class="alt"> <span class="rem">// pnlLeft</span></pre><br /><pre> <span class="rem">// </span></pre><br /><pre class="alt"> <span class="kwrd">this</span>.pnlLeft.Controls.Add(<span class="kwrd">this</span>.pnlRules);</pre><br /><pre> <span class="kwrd">this</span>.pnlLeft.Controls.Add(<span class="kwrd">this</span>.splHelp);</pre><br /><pre class="alt"> <span class="kwrd">this</span>.pnlLeft.Controls.Add(<span class="kwrd">this</span>.pnlHelp);</pre><br /><pre> <span class="kwrd">this</span>.pnlLeft.Dock = System.Windows.Forms.DockStyle.Left;</pre><br /><pre class="alt"> <span class="kwrd">this</span>.pnlLeft.Location = <span class="kwrd">new</span> System.Drawing.Point(0, 0);</pre><br /><pre> <span class="kwrd">this</span>.pnlLeft.Name = <span class="str">"pnlLeft"</span>;</pre><br /><pre class="alt"> <span class="kwrd">this</span>.pnlLeft.Size = <span class="kwrd">new</span> System.Drawing.Size(272, 480);</pre><br /><pre> <span class="kwrd">this</span>.pnlLeft.TabIndex = 10;</pre><br /><pre class="alt"> <span class="rem">// </span></pre><br /><pre> <span class="rem">// pnlRules</span></pre><br /><pre class="alt"> <span class="rem">// </span></pre><br /><pre> <span class="kwrd">this</span>.pnlRules.Controls.Add(<span class="kwrd">this</span>.gBoxRules);</pre><br /><pre class="alt"> <span class="kwrd">this</span>.pnlRules.Dock = System.Windows.Forms.DockStyle.Fill;</pre><br /><pre> <span class="kwrd">this</span>.pnlRules.Location = <span class="kwrd">new</span> System.Drawing.Point(0, 0);</pre><br /><pre class="alt"> <span class="kwrd">this</span>.pnlRules.Name = <span class="str">"pnlRules"</span>;</pre><br /><pre> <span class="kwrd">this</span>.pnlRules.Size = <span class="kwrd">new</span> System.Drawing.Size(272, 300);</pre><br /><pre class="alt"> <span class="kwrd">this</span>.pnlRules.TabIndex = 23;</pre><br /><pre> <span class="rem">// </span></pre><br /><pre class="alt"> <span class="rem">// gBoxRules</span></pre><br /><pre> <span class="rem">// </span></pre><br /><pre class="alt"> <span class="kwrd">this</span>.gBoxRules.Controls.Add(<span class="kwrd">this</span>.txtLeftSide);</pre><br /><pre> <span class="kwrd">this</span>.gBoxRules.Controls.Add(<span class="kwrd">this</span>.cmdAddRule);</pre><br /><pre class="alt"> <span class="kwrd">this</span>.gBoxRules.Controls.Add(<span class="kwrd">this</span>.cmdModify);</pre><br /><pre> <span class="kwrd">this</span>.gBoxRules.Controls.Add(<span class="kwrd">this</span>.cmdDelete);</pre><br /><pre class="alt"> <span class="kwrd">this</span>.gBoxRules.Controls.Add(<span class="kwrd">this</span>.numProbability);</pre><br /><pre> <span class="kwrd">this</span>.gBoxRules.Controls.Add(<span class="kwrd">this</span>.txtRightSide);</pre><br /><pre class="alt"> <span class="kwrd">this</span>.gBoxRules.Controls.Add(<span class="kwrd">this</span>.label2);</pre><br /><pre> <span class="kwrd">this</span>.gBoxRules.Controls.Add(<span class="kwrd">this</span>.label3);</pre><br /><pre class="alt"> <span class="kwrd">this</span>.gBoxRules.Controls.Add(<span class="kwrd">this</span>.label4);</pre><br /><pre> <span class="kwrd">this</span>.gBoxRules.Controls.Add(<span class="kwrd">this</span>.numIterations);</pre><br /><pre class="alt"> <span class="kwrd">this</span>.gBoxRules.Controls.Add(<span class="kwrd">this</span>.label5);</pre><br /><pre> <span class="kwrd">this</span>.gBoxRules.Controls.Add(<span class="kwrd">this</span>.txtStartString);</pre><br /><pre class="alt"> <span class="kwrd">this</span>.gBoxRules.Controls.Add(<span class="kwrd">this</span>.lvwRules);</pre><br /><pre> <span class="kwrd">this</span>.gBoxRules.Controls.Add(<span class="kwrd">this</span>.cmdGenerate);</pre><br /><pre class="alt"> <span class="kwrd">this</span>.gBoxRules.Controls.Add(<span class="kwrd">this</span>.cmdPreview);</pre><br /><pre> <span class="kwrd">this</span>.gBoxRules.Controls.Add(<span class="kwrd">this</span>.label1);</pre><br /><pre class="alt"> <span class="kwrd">this</span>.gBoxRules.Dock = System.Windows.Forms.DockStyle.Fill;</pre><br /><pre> <span class="kwrd">this</span>.gBoxRules.Location = <span class="kwrd">new</span> System.Drawing.Point(0, 0);</pre><br /><pre class="alt"> <span class="kwrd">this</span>.gBoxRules.Name = <span class="str">"gBoxRules"</span>;</pre><br /><pre> <span class="kwrd">this</span>.gBoxRules.Size = <span class="kwrd">new</span> System.Drawing.Size(272, 300);</pre><br /><pre class="alt"> <span class="kwrd">this</span>.gBoxRules.TabIndex = 0;</pre><br /><pre> <span class="kwrd">this</span>.gBoxRules.TabStop = <span class="kwrd">false</span>;</pre><br /><pre class="alt"> <span class="kwrd">this</span>.gBoxRules.Text = <span class="str">"Rule Editor"</span>;</pre><br /><pre> <span class="rem">// </span></pre><br /><pre class="alt"> <span class="rem">// txtLeftSide</span></pre><br /><pre> <span class="rem">// </span></pre><br /><pre class="alt"> <span class="kwrd">this</span>.txtLeftSide.CharacterCasing = System.Windows.Forms.CharacterCasing.Upper;</pre><br /><pre> <span class="kwrd">this</span>.txtLeftSide.Font = <span class="kwrd">new</span> System.Drawing.Font(<span class="str">"Courier New"</span>, 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));</pre><br /><pre class="alt"> <span class="kwrd">this</span>.txtLeftSide.Location = <span class="kwrd">new</span> System.Drawing.Point(8, 32);</pre><br /><pre> <span class="kwrd">this</span>.txtLeftSide.MaxLength = 1;</pre><br /><pre class="alt"> <span class="kwrd">this</span>.txtLeftSide.Name = <span class="str">"txtLeftSide"</span>;</pre><br /><pre> <span class="kwrd">this</span>.txtLeftSide.Size = <span class="kwrd">new</span> System.Drawing.Size(48, 22);</pre><br /><pre class="alt"> <span class="kwrd">this</span>.txtLeftSide.TabIndex = 1;</pre><br /><pre> <span class="kwrd">this</span>.txtLeftSide.Text = <span class="str">""</span>;</pre><br /><pre class="alt"> <span class="rem">// </span></pre><br /><pre> <span class="rem">// cmdModify</span></pre><br /><pre class="alt"> <span class="rem">// </span></pre><br /><pre> <span class="kwrd">this</span>.cmdModify.Location = <span class="kwrd">new</span> System.Drawing.Point(88, 64);</pre><br /><pre class="alt"> <span class="kwrd">this</span>.cmdModify.Name = <span class="str">"cmdModify"</span>;</pre><br /><pre> <span class="kwrd">this</span>.cmdModify.TabIndex = 7;</pre><br /><pre class="alt"> <span class="kwrd">this</span>.cmdModify.Text = <span class="str">"&Modify"</span>;</pre><br /><pre> <span class="kwrd">this</span>.cmdModify.Click += <span class="kwrd">new</span> System.EventHandler(<span class="kwrd">this</span>.cmdModify_Click);</pre><br /><pre class="alt"> <span class="rem">// </span></pre><br /><pre> <span class="rem">// cmdDelete</span></pre><br /><pre class="alt"> <span class="rem">// </span></pre><br /><pre> <span class="kwrd">this</span>.cmdDelete.Location = <span class="kwrd">new</span> System.Drawing.Point(168, 64);</pre><br /><pre class="alt"> <span class="kwrd">this</span>.cmdDelete.Name = <span class="str">"cmdDelete"</span>;</pre><br /><pre> <span class="kwrd">this</span>.cmdDelete.TabIndex = 8;</pre><br /><pre class="alt"> <span class="kwrd">this</span>.cmdDelete.Text = <span class="str">"&Delete"</span>;</pre><br /><pre> <span class="kwrd">this</span>.cmdDelete.Click += <span class="kwrd">new</span> System.EventHandler(<span class="kwrd">this</span>.cmdDelete_Click);</pre><br /><pre class="alt"> <span class="rem">// </span></pre><br /><pre> <span class="rem">// label2</span></pre><br /><pre class="alt"> <span class="rem">// </span></pre><br /><pre> <span class="kwrd">this</span>.label2.Location = <span class="kwrd">new</span> System.Drawing.Point(64, 16);</pre><br /><pre class="alt"> <span class="kwrd">this</span>.label2.Name = <span class="str">"label2"</span>;</pre><br /><pre> <span class="kwrd">this</span>.label2.Size = <span class="kwrd">new</span> System.Drawing.Size(100, 16);</pre><br /><pre class="alt"> <span class="kwrd">this</span>.label2.TabIndex = 2;</pre><br /><pre> <span class="kwrd">this</span>.label2.Text = <span class="str">"Right Side:"</span>;</pre><br /><pre class="alt"> <span class="rem">// </span></pre><br /><pre> <span class="rem">// label3</span></pre><br /><pre class="alt"> <span class="rem">// </span></pre><br /><pre> <span class="kwrd">this</span>.label3.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));</pre><br /><pre class="alt"> <span class="kwrd">this</span>.label3.Location = <span class="kwrd">new</span> System.Drawing.Point(208, 16);</pre><br /><pre> <span class="kwrd">this</span>.label3.Name = <span class="str">"label3"</span>;</pre><br /><pre class="alt"> <span class="kwrd">this</span>.label3.Size = <span class="kwrd">new</span> System.Drawing.Size(40, 16);</pre><br /><pre> <span class="kwrd">this</span>.label3.TabIndex = 4;</pre><br /><pre class="alt"> <span class="kwrd">this</span>.label3.Text = <span class="str">"Prob."</span>;</pre><br /><pre> <span class="rem">// </span></pre><br /><pre class="alt"> <span class="rem">// label4</span></pre><br /><pre> <span class="rem">// </span></pre><br /><pre class="alt"> <span class="kwrd">this</span>.label4.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));</pre><br /><pre> <span class="kwrd">this</span>.label4.Location = <span class="kwrd">new</span> System.Drawing.Point(8, 184);</pre><br /><pre class="alt"> <span class="kwrd">this</span>.label4.Name = <span class="str">"label4"</span>;</pre><br /><pre> <span class="kwrd">this</span>.label4.Size = <span class="kwrd">new</span> System.Drawing.Size(80, 16);</pre><br /><pre class="alt"> <span class="kwrd">this</span>.label4.TabIndex = 10;</pre><br /><pre> <span class="kwrd">this</span>.label4.Text = <span class="str">"Iterations:"</span>;</pre><br /><pre class="alt"> <span class="rem">// </span></pre><br /><pre> <span class="rem">// numIterations</span></pre><br /><pre class="alt"> <span class="rem">// </span></pre><br /><pre> <span class="kwrd">this</span>.numIterations.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));</pre><br /><pre class="alt"> <span class="kwrd">this</span>.numIterations.Location = <span class="kwrd">new</span> System.Drawing.Point(8, 200);</pre><br /><pre> <span class="kwrd">this</span>.numIterations.Name = <span class="str">"numIterations"</span>;</pre><br /><pre class="alt"> <span class="kwrd">this</span>.numIterations.Size = <span class="kwrd">new</span> System.Drawing.Size(80, 20);</pre><br /><pre> <span class="kwrd">this</span>.numIterations.TabIndex = 11;</pre><br /><pre class="alt"> <span class="kwrd">this</span>.numIterations.Value = <span class="kwrd">new</span> System.Decimal(<span class="kwrd">new</span> <span class="kwrd">int</span>[] {</pre><br /><pre> 5,</pre><br /><pre class="alt"> 0,</pre><br /><pre> 0,</pre><br /><pre class="alt"> 0});</pre><br /><pre> <span class="rem">// </span></pre><br /><pre class="alt"> <span class="rem">// label5</span></pre><br /><pre> <span class="rem">// </span></pre><br /><pre class="alt"> <span class="kwrd">this</span>.label5.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));</pre><br /><pre> <span class="kwrd">this</span>.label5.Location = <span class="kwrd">new</span> System.Drawing.Point(8, 224);</pre><br /><pre class="alt"> <span class="kwrd">this</span>.label5.Name = <span class="str">"label5"</span>;</pre><br /><pre> <span class="kwrd">this</span>.label5.Size = <span class="kwrd">new</span> System.Drawing.Size(100, 16);</pre><br /><pre class="alt"> <span class="kwrd">this</span>.label5.TabIndex = 12;</pre><br /><pre> <span class="kwrd">this</span>.label5.Text = <span class="str">"Start String:"</span>;</pre><br /><pre class="alt"> <span class="rem">// </span></pre><br /><pre> <span class="rem">// txtStartString</span></pre><br /><pre class="alt"> <span class="rem">// </span></pre><br /><pre> <span class="kwrd">this</span>.txtStartString.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) </pre><br /><pre class="alt"> | System.Windows.Forms.AnchorStyles.Right)));</pre><br /><pre> <span class="kwrd">this</span>.txtStartString.CharacterCasing = System.Windows.Forms.CharacterCasing.Upper;</pre><br /><pre class="alt"> <span class="kwrd">this</span>.txtStartString.Font = <span class="kwrd">new</span> System.Drawing.Font(<span class="str">"Courier New"</span>, 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));</pre><br /><pre> <span class="kwrd">this</span>.txtStartString.Location = <span class="kwrd">new</span> System.Drawing.Point(8, 240);</pre><br /><pre class="alt"> <span class="kwrd">this</span>.txtStartString.Name = <span class="str">"txtStartString"</span>;</pre><br /><pre> <span class="kwrd">this</span>.txtStartString.Size = <span class="kwrd">new</span> System.Drawing.Size(168, 22);</pre><br /><pre class="alt"> <span class="kwrd">this</span>.txtStartString.TabIndex = 13;</pre><br /><pre> <span class="kwrd">this</span>.txtStartString.Text = <span class="str">"F"</span>;</pre><br /><pre class="alt"> <span class="rem">// </span></pre><br /><pre> <span class="rem">// cmdGenerate</span></pre><br /><pre class="alt"> <span class="rem">// </span></pre><br /><pre> <span class="kwrd">this</span>.cmdGenerate.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));</pre><br /><pre class="alt"> <span class="kwrd">this</span>.cmdGenerate.Location = <span class="kwrd">new</span> System.Drawing.Point(8, 272);</pre><br /><pre> <span class="kwrd">this</span>.cmdGenerate.Name = <span class="str">"cmdGenerate"</span>;</pre><br /><pre class="alt"> <span class="kwrd">this</span>.cmdGenerate.Size = <span class="kwrd">new</span> System.Drawing.Size(80, 23);</pre><br /><pre> <span class="kwrd">this</span>.cmdGenerate.TabIndex = 15;</pre><br /><pre class="alt"> <span class="kwrd">this</span>.cmdGenerate.Text = <span class="str">"&Render Tree"</span>;</pre><br /><pre> <span class="kwrd">this</span>.cmdGenerate.Click += <span class="kwrd">new</span> System.EventHandler(<span class="kwrd">this</span>.cmdGenerate_Click);</pre><br /><pre class="alt"> <span class="rem">// </span></pre><br /><pre> <span class="rem">// cmdPreview</span></pre><br /><pre class="alt"> <span class="rem">// </span></pre><br /><pre> <span class="kwrd">this</span>.cmdPreview.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));</pre><br /><pre class="alt"> <span class="kwrd">this</span>.cmdPreview.Location = <span class="kwrd">new</span> System.Drawing.Point(184, 240);</pre><br /><pre> <span class="kwrd">this</span>.cmdPreview.Name = <span class="str">"cmdPreview"</span>;</pre><br /><pre class="alt"> <span class="kwrd">this</span>.cmdPreview.Size = <span class="kwrd">new</span> System.Drawing.Size(80, 23);</pre><br /><pre> <span class="kwrd">this</span>.cmdPreview.TabIndex = 14;</pre><br /><pre class="alt"> <span class="kwrd">this</span>.cmdPreview.Text = <span class="str">"Preview"</span>;</pre><br /><pre> <span class="kwrd">this</span>.cmdPreview.Click += <span class="kwrd">new</span> System.EventHandler(<span class="kwrd">this</span>.cmdPreview_Click);</pre><br /><pre class="alt"> <span class="rem">// </span></pre><br /><pre> <span class="rem">// label1</span></pre><br /><pre class="alt"> <span class="rem">// </span></pre><br /><pre> <span class="kwrd">this</span>.label1.BackColor = System.Drawing.Color.Transparent;</pre><br /><pre class="alt"> <span class="kwrd">this</span>.label1.Location = <span class="kwrd">new</span> System.Drawing.Point(8, 16);</pre><br /><pre> <span class="kwrd">this</span>.label1.Name = <span class="str">"label1"</span>;</pre><br /><pre class="alt"> <span class="kwrd">this</span>.label1.Size = <span class="kwrd">new</span> System.Drawing.Size(56, 16);</pre><br /><pre> <span class="kwrd">this</span>.label1.TabIndex = 0;</pre><br /><pre class="alt"> <span class="kwrd">this</span>.label1.Text = <span class="str">"Left Side:"</span>;</pre><br /><pre> <span class="rem">// </span></pre><br /><pre class="alt"> <span class="rem">// splHelp</span></pre><br /><pre> <span class="rem">// </span></pre><br /><pre class="alt"> <span class="kwrd">this</span>.splHelp.Dock = System.Windows.Forms.DockStyle.Bottom;</pre><br /><pre> <span class="kwrd">this</span>.splHelp.Location = <span class="kwrd">new</span> System.Drawing.Point(0, 300);</pre><br /><pre class="alt"> <span class="kwrd">this</span>.splHelp.Name = <span class="str">"splHelp"</span>;</pre><br /><pre> <span class="kwrd">this</span>.splHelp.Size = <span class="kwrd">new</span> System.Drawing.Size(272, 4);</pre><br /><pre class="alt"> <span class="kwrd">this</span>.splHelp.TabIndex = 22;</pre><br /><pre> <span class="kwrd">this</span>.splHelp.TabStop = <span class="kwrd">false</span>;</pre><br /><pre class="alt"> <span class="rem">// </span></pre><br /><pre> <span class="rem">// pnlHelp</span></pre><br /><pre class="alt"> <span class="rem">// </span></pre><br /><pre> <span class="kwrd">this</span>.pnlHelp.Controls.Add(<span class="kwrd">this</span>.gBoxHelp);</pre><br /><pre class="alt"> <span class="kwrd">this</span>.pnlHelp.Dock = System.Windows.Forms.DockStyle.Bottom;</pre><br /><pre> <span class="kwrd">this</span>.pnlHelp.Location = <span class="kwrd">new</span> System.Drawing.Point(0, 304);</pre><br /><pre class="alt"> <span class="kwrd">this</span>.pnlHelp.Name = <span class="str">"pnlHelp"</span>;</pre><br /><pre> <span class="kwrd">this</span>.pnlHelp.Size = <span class="kwrd">new</span> System.Drawing.Size(272, 176);</pre><br /><pre class="alt"> <span class="kwrd">this</span>.pnlHelp.TabIndex = 21;</pre><br /><pre> <span class="rem">// </span></pre><br /><pre class="alt"> <span class="rem">// gBoxHelp</span></pre><br /><pre> <span class="rem">// </span></pre><br /><pre class="alt"> <span class="kwrd">this</span>.gBoxHelp.Controls.Add(<span class="kwrd">this</span>.lvwHelp);</pre><br /><pre> <span class="kwrd">this</span>.gBoxHelp.Dock = System.Windows.Forms.DockStyle.Fill;</pre><br /><pre class="alt"> <span class="kwrd">this</span>.gBoxHelp.Location = <span class="kwrd">new</span> System.Drawing.Point(0, 0);</pre><br /><pre> <span class="kwrd">this</span>.gBoxHelp.Name = <span class="str">"gBoxHelp"</span>;</pre><br /><pre class="alt"> <span class="kwrd">this</span>.gBoxHelp.Size = <span class="kwrd">new</span> System.Drawing.Size(272, 176);</pre><br /><pre> <span class="kwrd">this</span>.gBoxHelp.TabIndex = 0;</pre><br /><pre class="alt"> <span class="kwrd">this</span>.gBoxHelp.TabStop = <span class="kwrd">false</span>;</pre><br /><pre> <span class="kwrd">this</span>.gBoxHelp.Text = <span class="str">"Help"</span>;</pre><br /><pre class="alt"> <span class="rem">// </span></pre><br /><pre> <span class="rem">// lvwHelp</span></pre><br /><pre class="alt"> <span class="rem">// </span></pre><br /><pre> <span class="kwrd">this</span>.lvwHelp.Columns.AddRange(<span class="kwrd">new</span> System.Windows.Forms.ColumnHeader[] {</pre><br /><pre class="alt"> <span class="kwrd">this</span>.hdrCommand,</pre><br /><pre> <span class="kwrd">this</span>.hdrDescription});</pre><br /><pre class="alt"> <span class="kwrd">this</span>.lvwHelp.Dock = System.Windows.Forms.DockStyle.Fill;</pre><br /><pre> <span class="kwrd">this</span>.lvwHelp.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None;</pre><br /><pre class="alt"> <span class="kwrd">this</span>.lvwHelp.Location = <span class="kwrd">new</span> System.Drawing.Point(3, 16);</pre><br /><pre> <span class="kwrd">this</span>.lvwHelp.MultiSelect = <span class="kwrd">false</span>;</pre><br /><pre class="alt"> <span class="kwrd">this</span>.lvwHelp.Name = <span class="str">"lvwHelp"</span>;</pre><br /><pre> <span class="kwrd">this</span>.lvwHelp.Size = <span class="kwrd">new</span> System.Drawing.Size(266, 157);</pre><br /><pre class="alt"> <span class="kwrd">this</span>.lvwHelp.TabIndex = 0;</pre><br /><pre> <span class="kwrd">this</span>.lvwHelp.View = System.Windows.Forms.View.Details;</pre><br /><pre class="alt"> <span class="rem">// </span></pre><br /><pre> <span class="rem">// hdrCommand</span></pre><br /><pre class="alt"> <span class="rem">// </span></pre><br /><pre> <span class="kwrd">this</span>.hdrCommand.Text = <span class="str">"Command"</span>;</pre><br /><pre class="alt"> <span class="kwrd">this</span>.hdrCommand.Width = 40;</pre><br /><pre> <span class="rem">// </span></pre><br /><pre class="alt"> <span class="rem">// hdrDescription</span></pre><br /><pre> <span class="rem">// </span></pre><br /><pre class="alt"> <span class="kwrd">this</span>.hdrDescription.Text = <span class="str">"Description"</span>;</pre><br /><pre> <span class="kwrd">this</span>.hdrDescription.Width = 201;</pre><br /><pre class="alt"> <span class="rem">// </span></pre><br /><pre> <span class="rem">// spltter</span></pre><br /><pre class="alt"> <span class="rem">// </span></pre><br /><pre> <span class="kwrd">this</span>.spltter.Location = <span class="kwrd">new</span> System.Drawing.Point(272, 0);</pre><br /><pre class="alt"> <span class="kwrd">this</span>.spltter.Name = <span class="str">"spltter"</span>;</pre><br /><pre> <span class="kwrd">this</span>.spltter.Size = <span class="kwrd">new</span> System.Drawing.Size(4, 480);</pre><br /><pre class="alt"> <span class="kwrd">this</span>.spltter.TabIndex = 11;</pre><br /><pre> <span class="kwrd">this</span>.spltter.TabStop = <span class="kwrd">false</span>;</pre><br /><pre class="alt"> <span class="rem">// </span></pre><br /><pre> <span class="rem">// pnlRender</span></pre><br /><pre class="alt"> <span class="rem">// </span></pre><br /><pre> <span class="kwrd">this</span>.pnlRender.Dock = System.Windows.Forms.DockStyle.Fill;</pre><br /><pre class="alt"> <span class="kwrd">this</span>.pnlRender.Location = <span class="kwrd">new</span> System.Drawing.Point(276, 0);</pre><br /><pre> <span class="kwrd">this</span>.pnlRender.Name = <span class="str">"pnlRender"</span>;</pre><br /><pre class="alt"> <span class="kwrd">this</span>.pnlRender.Size = <span class="kwrd">new</span> System.Drawing.Size(364, 480);</pre><br /><pre> <span class="kwrd">this</span>.pnlRender.TabIndex = 0;</pre><br /><pre class="alt"> <span class="rem">// </span></pre><br /><pre> <span class="rem">// frmRender</span></pre><br /><pre class="alt"> <span class="rem">// </span></pre><br /><pre> <span class="kwrd">this</span>.AutoScaleBaseSize = <span class="kwrd">new</span> System.Drawing.Size(5, 13);</pre><br /><pre class="alt"> <span class="kwrd">this</span>.ClientSize = <span class="kwrd">new</span> System.Drawing.Size(640, 480);</pre><br /><pre> <span class="kwrd">this</span>.Controls.Add(<span class="kwrd">this</span>.pnlRender);</pre><br /><pre class="alt"> <span class="kwrd">this</span>.Controls.Add(<span class="kwrd">this</span>.spltter);</pre><br /><pre> <span class="kwrd">this</span>.Controls.Add(<span class="kwrd">this</span>.pnlLeft);</pre><br /><pre class="alt"> <span class="kwrd">this</span>.MinimumSize = <span class="kwrd">new</span> System.Drawing.Size(648, 507);</pre><br /><pre> <span class="kwrd">this</span>.Name = <span class="str">"frmRender"</span>;</pre><br /><pre class="alt"> <span class="kwrd">this</span>.Text = <span class="str">"L-System Generator"</span>;</pre><br /><pre> <span class="kwrd">this</span>.Closing += <span class="kwrd">new</span> System.ComponentModel.CancelEventHandler(<span class="kwrd">this</span>.frmRender_Closing);</pre><br /><pre class="alt"> ((System.ComponentModel.ISupportInitialize)(<span class="kwrd">this</span>.numProbability)).EndInit();</pre><br /><pre> <span class="kwrd">this</span>.pnlLeft.ResumeLayout(<span class="kwrd">false</span>);</pre><br /><pre class="alt"> <span class="kwrd">this</span>.pnlRules.ResumeLayout(<span class="kwrd">false</span>);</pre><br /><pre> <span class="kwrd">this</span>.gBoxRules.ResumeLayout(<span class="kwrd">false</span>);</pre><br /><pre class="alt"> ((System.ComponentModel.ISupportInitialize)(<span class="kwrd">this</span>.numIterations)).EndInit();</pre><br /><pre> <span class="kwrd">this</span>.pnlHelp.ResumeLayout(<span class="kwrd">false</span>);</pre><br /><pre class="alt"> <span class="kwrd">this</span>.gBoxHelp.ResumeLayout(<span class="kwrd">false</span>);</pre><br /><pre> <span class="kwrd">this</span>.ResumeLayout(<span class="kwrd">false</span>);</pre><br /><pre class="alt"> </pre><br /><pre> }</pre><br /><pre class="alt"> </pre><br /><pre> <span class="preproc">#endregion</span></pre><br /><pre class="alt"> </pre><br /><pre> <span class="kwrd">private</span> Renderer _renderer;</pre><br /><pre class="alt"> <span class="kwrd">private</span> LSystem _lSystem;</pre><br /><pre> <span class="kwrd">private</span> TreeParams _treeParams;</pre><br /><pre class="alt"> <span class="kwrd">private</span> frmTreeParams _frmParams;</pre><br /><pre> <span class="kwrd">private</span> CommandParser _parser;</pre><br /><pre class="alt"> <span class="kwrd">private</span> <span class="kwrd">bool</span> _rendererIsOK;</pre><br /><pre> </pre><br /><pre class="alt"> <span class="kwrd">public</span> frmRender()</pre><br /><pre> {</pre><br /><pre class="alt"> <span class="kwrd">this</span>.InitializeComponent();</pre><br /><pre> <span class="kwrd">this</span>.FillHelpListView();</pre><br /><pre class="alt"> </pre><br /><pre> _lSystem = <span class="kwrd">new</span> LSystem();</pre><br /><pre class="alt"> _treeParams = <span class="kwrd">new</span> TreeParams();</pre><br /><pre> </pre><br /><pre class="alt"> _renderer = <span class="kwrd">new</span> Renderer(<span class="kwrd">this</span>.pnlRender, <span class="kwrd">new</span> System.Drawing.Font(<span class="kwrd">this</span>.Font, FontStyle.Regular));</pre><br /><pre> _rendererIsOK = _renderer.InitializeGraphics();</pre><br /><pre class="alt"> </pre><br /><pre> <span class="kwrd">if</span>(!_rendererIsOK)</pre><br /><pre class="alt"> {</pre><br /><pre> MessageBox.Show(<span class="str">"Couldn't initialize graphics.\nNo trees will be rendered."</span>,<span class="str">"Error"</span>,MessageBoxButtons.OK, MessageBoxIcon.Error);</pre><br /><pre class="alt"> }</pre><br /><pre> <span class="kwrd">else</span></pre><br /><pre class="alt"> {</pre><br /><pre> _parser = <span class="kwrd">new</span> CommandParser(_renderer.Device);</pre><br /><pre class="alt"> _parser.TreeParameters = _treeParams;</pre><br /><pre> }</pre><br /><pre class="alt"> </pre><br /><pre> <span class="kwrd">this</span>.InitParametersForm();</pre><br /><pre class="alt"> <span class="kwrd">this</span>.EnableControls();</pre><br /><pre> <span class="kwrd">this</span>.Focus();</pre><br /><pre class="alt"> }</pre><br /><pre> </pre><br /><pre class="alt"> <span class="kwrd">private</span> <span class="kwrd">void</span> FillHelpListView()</pre><br /><pre> {</pre><br /><pre class="alt"> lvwHelp.Items.Add(<span class="kwrd">new</span> ListViewItem(<span class="kwrd">new</span> <span class="kwrd">string</span>[] {<span class="str">"F"</span>,<span class="str">"Moves Forward"</span>}, -1));</pre><br /><pre> lvwHelp.Items.Add(<span class="kwrd">new</span> ListViewItem(<span class="kwrd">new</span> <span class="kwrd">string</span>[] {<span class="str">"+"</span>,<span class="str">"Rotates clockwise in X axis"</span>}, -1));</pre><br /><pre class="alt"> lvwHelp.Items.Add(<span class="kwrd">new</span> ListViewItem(<span class="kwrd">new</span> <span class="kwrd">string</span>[] {<span class="str">"-"</span>,<span class="str">"Rotates counter-clockwise in X axis"</span>}, -1));</pre><br /><pre> lvwHelp.Items.Add(<span class="kwrd">new</span> ListViewItem(<span class="kwrd">new</span> <span class="kwrd">string</span>[] {<span class="str">"*"</span>,<span class="str">"Rotates clockwise in Y axis"</span>}, -1));</pre><br /><pre class="alt"> lvwHelp.Items.Add(<span class="kwrd">new</span> ListViewItem(<span class="kwrd">new</span> <span class="kwrd">string</span>[] {<span class="str">"/"</span>,<span class="str">"Rotates counter-clockwise in Y axis"</span>}, -1));</pre><br /><pre> lvwHelp.Items.Add(<span class="kwrd">new</span> ListViewItem(<span class="kwrd">new</span> <span class="kwrd">string</span>[] {<span class="str">"|"</span>,<span class="str">"Rotates clockwise in Z axis"</span>}, -1));</pre><br /><pre class="alt"> lvwHelp.Items.Add(<span class="kwrd">new</span> ListViewItem(<span class="kwrd">new</span> <span class="kwrd">string</span>[] {<span class="str">"#"</span>,<span class="str">"Rotates counter-clockwise in Z axis"</span>}, -1));</pre><br /><pre> lvwHelp.Items.Add(<span class="kwrd">new</span> ListViewItem(<span class="kwrd">new</span> <span class="kwrd">string</span>[] {<span class="str">"L"</span>,<span class="str">"Draws a leaf"</span>}, -1));</pre><br /><pre class="alt"> lvwHelp.Items.Add(<span class="kwrd">new</span> ListViewItem(<span class="kwrd">new</span> <span class="kwrd">string</span>[] {<span class="str">"["</span>,<span class="str">"Creates a new branch"</span>}, -1));</pre><br /><pre> lvwHelp.Items.Add(<span class="kwrd">new</span> ListViewItem(<span class="kwrd">new</span> <span class="kwrd">string</span>[] {<span class="str">"]"</span>,<span class="str">"Ends the current branch"</span>}, -1));</pre><br /><pre class="alt"> }</pre><br /><pre> </pre><br /><pre class="alt"> <span class="kwrd">private</span> <span class="kwrd">void</span> InitParametersForm()</pre><br /><pre> {</pre><br /><pre class="alt"> Point location;</pre><br /><pre> </pre><br /><pre class="alt"> _frmParams = <span class="kwrd">new</span> frmTreeParams();</pre><br /><pre> </pre><br /><pre class="alt"> location = <span class="kwrd">this</span>.Location;</pre><br /><pre> location.X += <span class="kwrd">this</span>.Width;</pre><br /><pre class="alt"> <span class="kwrd">if</span> ((location.X + _frmParams.Width) > Screen.PrimaryScreen.Bounds.Width) </pre><br /><pre> {</pre><br /><pre class="alt"> location.X = Screen.PrimaryScreen.Bounds.Width - _frmParams.Width;</pre><br /><pre> }</pre><br /><pre class="alt"> <span class="kwrd">if</span> ((location.Y + _frmParams.Height) > Screen.PrimaryScreen.Bounds.Height) </pre><br /><pre> {</pre><br /><pre class="alt"> location.X = Screen.PrimaryScreen.Bounds.Height - _frmParams.Height;</pre><br /><pre> }</pre><br /><pre class="alt"> <span class="kwrd">if</span> (location.Y < <span class="kwrd">this</span>.PointToScreen(Point.Empty).Y)</pre><br /><pre> {</pre><br /><pre class="alt"> location.Y = <span class="kwrd">this</span>.PointToScreen(Point.Empty).Y ;</pre><br /><pre> }</pre><br /><pre class="alt"> </pre><br /><pre> _frmParams.Location = location;</pre><br /><pre class="alt"> _frmParams.TreeParameters = _treeParams;</pre><br /><pre> _frmParams.Show();</pre><br /><pre class="alt"> }</pre><br /><pre> </pre><br /><pre class="alt"> <span class="rem">/// <summary></span></pre><br /><pre> <span class="rem">/// Our mainloop</span></pre><br /><pre class="alt"> <span class="rem">/// </summary></span></pre><br /><pre> <span class="kwrd">public</span> <span class="kwrd">void</span> Run()</pre><br /><pre class="alt"> {</pre><br /><pre> <span class="kwrd">if</span>(_rendererIsOK)</pre><br /><pre class="alt"> {</pre><br /><pre> <span class="rem">// While the form is still valid, render and process messages</span></pre><br /><pre class="alt"> <span class="kwrd">while</span> (Created) </pre><br /><pre> {</pre><br /><pre class="alt"> _renderer.FrameMove(); </pre><br /><pre> _renderer.Render();</pre><br /><pre class="alt"> Application.DoEvents();</pre><br /><pre> }</pre><br /><pre class="alt"> }</pre><br /><pre> }</pre><br /><pre class="alt"> </pre><br /><pre> <span class="kwrd">protected</span> <span class="kwrd">override</span> <span class="kwrd">void</span> OnPaint(PaintEventArgs e)</pre><br /><pre class="alt"> {</pre><br /><pre> <span class="kwrd">if</span>(_rendererIsOK)</pre><br /><pre class="alt"> {</pre><br /><pre> _renderer.Render();</pre><br /><pre class="alt"> }</pre><br /><pre> }</pre><br /><pre class="alt"> </pre><br /><pre> <span class="kwrd">protected</span> <span class="kwrd">override</span> <span class="kwrd">void</span> OnPaintBackground(PaintEventArgs pevent)</pre><br /><pre class="alt"> {</pre><br /><pre> <span class="rem">// Don't do anything to avoid the background being painted.</span></pre><br /><pre class="alt"> }</pre><br /><pre> </pre><br /><pre class="alt"> <span class="kwrd">private</span> <span class="kwrd">void</span> EnableControls()</pre><br /><pre> {</pre><br /><pre class="alt"> cmdAddRule.Enabled = ((txtLeftSide.Text != <span class="str">""</span>) && (txtRightSide.Text != <span class="str">""</span>));</pre><br /><pre> cmdModify.Enabled = (lvwRules.SelectedItems.Count > 0);</pre><br /><pre class="alt"> cmdDelete.Enabled = (lvwRules.SelectedItems.Count > 0);</pre><br /><pre> cmdPreview.Enabled = (txtStartString.Text != <span class="str">""</span>);</pre><br /><pre class="alt"> cmdGenerate.Enabled = ((txtStartString.Text != <span class="str">""</span>) && (lvwRules.Items.Count > 0));</pre><br /><pre> }</pre><br /><pre class="alt"> </pre><br /><pre> <span class="kwrd">private</span> <span class="kwrd">void</span> cboLeftSide_SelectedIndexChanged(<span class="kwrd">object</span> sender, System.EventArgs e)</pre><br /><pre class="alt"> {</pre><br /><pre> EnableControls();</pre><br /><pre class="alt"> }</pre><br /><pre> </pre><br /><pre class="alt"> <span class="kwrd">private</span> <span class="kwrd">void</span> buildRulesTable()</pre><br /><pre> {</pre><br /><pre class="alt"> _lSystem.ClearRules();</pre><br /><pre> </pre><br /><pre class="alt"> <span class="kwrd">foreach</span>(ListViewItem lvi <span class="kwrd">in</span> lvwRules.Items)</pre><br /><pre> {</pre><br /><pre class="alt"> <span class="kwrd">char</span> cLeftSide = lvi.SubItems[0].Text[0];</pre><br /><pre> <span class="kwrd">string</span> sLeftSide = lvi.SubItems[1].Text;</pre><br /><pre class="alt"> <span class="kwrd">float</span> fProb = <span class="kwrd">float</span>.Parse(lvi.SubItems[2].Text);</pre><br /><pre> </pre><br /><pre class="alt"> Rule newRule = <span class="kwrd">new</span> Rule(cLeftSide,sLeftSide,fProb);</pre><br /><pre> _lSystem.AddRule(newRule);</pre><br /><pre class="alt"> }</pre><br /><pre> }</pre><br /><pre class="alt"> </pre><br /><pre> <span class="kwrd">private</span> <span class="kwrd">void</span> cmdAddRule_Click(<span class="kwrd">object</span> sender, System.EventArgs e)</pre><br /><pre class="alt"> {</pre><br /><pre> lvwRules.Items.Add(<span class="kwrd">new</span> ListViewItem(<span class="kwrd">new</span> <span class="kwrd">string</span>[] {txtLeftSide.Text, txtRightSide.Text, numProbability.Value.ToString(<span class="str">"0.00"</span>)}, -1));</pre><br /><pre class="alt"> buildRulesTable();</pre><br /><pre> EnableControls();</pre><br /><pre class="alt"> txtLeftSide.Focus();</pre><br /><pre> }</pre><br /><pre class="alt"> </pre><br /><pre> <span class="kwrd">private</span> <span class="kwrd">void</span> cmdModify_Click(<span class="kwrd">object</span> sender, System.EventArgs e)</pre><br /><pre class="alt"> {</pre><br /><pre> ListViewItem lvwItem;</pre><br /><pre class="alt"> </pre><br /><pre> lvwItem = lvwRules.SelectedItems[0];</pre><br /><pre class="alt"> </pre><br /><pre> lvwItem.SubItems[0].Text = txtLeftSide.Text;</pre><br /><pre class="alt"> lvwItem.SubItems[1].Text = txtRightSide.Text;</pre><br /><pre> lvwItem.SubItems[2].Text = numProbability.Value.ToString(<span class="str">"0.00"</span>);</pre><br /><pre class="alt"> buildRulesTable();</pre><br /><pre> EnableControls();</pre><br /><pre class="alt"> }</pre><br /><pre> </pre><br /><pre class="alt"> <span class="kwrd">private</span> <span class="kwrd">void</span> cmdDelete_Click(<span class="kwrd">object</span> sender, System.EventArgs e)</pre><br /><pre> {</pre><br /><pre class="alt"> lvwRules.SelectedItems[0].Remove();</pre><br /><pre> buildRulesTable();</pre><br /><pre class="alt"> EnableControls();</pre><br /><pre> }</pre><br /><pre class="alt"> </pre><br /><pre> <span class="kwrd">private</span> <span class="kwrd">void</span> lvwRules_SelectedIndexChanged(<span class="kwrd">object</span> sender, System.EventArgs e)</pre><br /><pre class="alt"> {</pre><br /><pre> <span class="kwrd">if</span> (lvwRules.SelectedItems.Count > 0) </pre><br /><pre class="alt"> {</pre><br /><pre> ListViewItem lvwItem = lvwRules.SelectedItems[0];</pre><br /><pre class="alt"> txtLeftSide.Text = lvwItem.SubItems[0].Text;</pre><br /><pre> txtRightSide.Text = lvwItem.SubItems[1].Text;</pre><br /><pre class="alt"> numProbability.Value = <span class="kwrd">decimal</span>.Parse(lvwItem.SubItems[2].Text);</pre><br /><pre> }</pre><br /><pre class="alt"> EnableControls();</pre><br /><pre> }</pre><br /><pre class="alt"> </pre><br /><pre> <span class="kwrd">private</span> <span class="kwrd">void</span> cmdPreview_Click(<span class="kwrd">object</span> sender, System.EventArgs e)</pre><br /><pre class="alt"> {</pre><br /><pre> </pre><br /><pre class="alt"> }</pre><br /><pre> </pre><br /><pre class="alt"> <span class="kwrd">private</span> <span class="kwrd">void</span> cmdGenerate_Click(<span class="kwrd">object</span> sender, System.EventArgs e)</pre><br /><pre> {</pre><br /><pre class="alt"> <span class="kwrd">string</span> sCommand = _lSystem.PerformIterations(txtStartString.Text, (<span class="kwrd">int</span>)numIterations.Value);</pre><br /><pre> Console.WriteLine(<span class="str">"({0}) - {1}"</span>, sCommand.Length, sCommand);</pre><br /><pre class="alt"> VertexBuffer vb = _parser.Parse(sCommand);</pre><br /><pre> _renderer.Buffer = vb;</pre><br /><pre class="alt"> }</pre><br /><pre> </pre><br /><pre class="alt"> <span class="kwrd">private</span> <span class="kwrd">void</span> RuleControls_Leave(<span class="kwrd">object</span> sender, System.EventArgs e)</pre><br /><pre> {</pre><br /><pre class="alt"> EnableControls();</pre><br /><pre> }</pre><br /><pre class="alt"> </pre><br /><pre> <span class="kwrd">private</span> <span class="kwrd">void</span> frmRender_Closing(<span class="kwrd">object</span> sender, CancelEventArgs e)</pre><br /><pre class="alt"> {</pre><br /><pre> <span class="kwrd">if</span> ( ! ( <span class="kwrd">null</span> == _frmParams || _frmParams.IsDisposed ) )</pre><br /><pre class="alt"> {</pre><br /><pre> _frmParams.Close();</pre><br /><pre class="alt"> }</pre><br /><pre> }</pre><br /><pre class="alt"> </pre><br /><pre> <span class="preproc">#region</span> Main </pre><br /><pre class="alt"> </pre><br /><pre> <span class="rem">/// <summary></span></pre><br /><pre class="alt"> <span class="rem">/// The main entry point for the application</span></pre><br /><pre> <span class="rem">/// </summary></span></pre><br /><pre class="alt"> <span class="kwrd">static</span> <span class="kwrd">void</span> Main()</pre><br /><pre> {</pre><br /><pre class="alt"> <span class="kwrd">using</span> (frmRender frmRender = <span class="kwrd">new</span> frmRender()) </pre><br /><pre> {</pre><br /><pre class="alt"> frmRender.Show();</pre><br /><pre> frmRender.Run();</pre><br /><pre class="alt"> }</pre><br /><pre> }</pre><br /><pre class="alt"> </pre><br /><pre> <span class="preproc">#endregion</span></pre><br /><pre class="alt"> </pre><br /><pre> }</pre><br /><pre class="alt">}</pre><br /></div><br /><br />Y ya está... De momento eso es todo... ;)<br /><br />Cuando tenga listo el pintado del árbol, postearé el código completo (si puedo, en un zip, en vez de poner el código...)Augusto Ruizhttp://www.blogger.com/profile/05966632752704864542noreply@blogger.com0tag:blogger.com,1999:blog-12472470.post-1133433461310696902005-12-01T11:28:00.000+01:002005-12-01T11:37:41.416+01:00Sistemas de LindenmayerEl pasado fin de semana me puse a programar... Hacía mucho tiempo que no lo hacía (en mi tiempo libre, quiero decir), y en cosa de tres horas acabé programando un <a href="http://en.wikipedia.org/wiki/Lindenmayer_System">Sistema de Lindenmayer</a>.<br /><br />La idea es poder especificar de manera sencilla una gramática con un conjunto de reglas (en el sistema que he implementado se pueden especificar incluso las probabilidades de que se aplique una regla u otra) que permitan modelar estructuras de tipo fractal que se pueden encontrar en la naturaleza, como por ejemplo, los árboles.<br /><br />Un uso bastante espectacular de estos sistemas es el que se hizo en la película El club de la lucha, en la escena inicial, en la que podemos ver cómo partiendo desde las neuronas hacemos un rápido viaje hacia la boca del protagonista.<br /><br />En un subsiguiente post colgaré el código del Sistema de Lindenmayer (veréis que es sorprendentemente sencillo...).<br /><br />En la lista de lo que aún me queda por hacer está el hecho de convertir los resultados que me provee ese sistema en un conjunto de triángulos que pueda pintar la tarjeta gráfica. A ver si saco algo de tiempo y lo puedo terminar... XD<br /><br />Saludos!Augusto Ruizhttp://www.blogger.com/profile/05966632752704864542noreply@blogger.com0tag:blogger.com,1999:blog-12472470.post-1131104473165079012005-11-04T12:34:00.000+01:002005-11-04T12:41:13.176+01:00Hace mucho, mucho tiempo......que no escribo nada por aquí. Sin embargo aún doy guerra :P<br /><br />Al hilo del último post, quería comentar que varios de los colaboradores habituales de <a href="http://www.flipcode.com/">FlipCode</a> han abierto una web similar llamada <a href="http://www.devmaster.net">DevMaster</a>. ¡Hasta tienen implementado un Image of the day!<br /><br />Por lo demás, últimamente estoy con bastante trabajo y mucha vagancia fuera de él. Y ando investigando un poco con un tema muy interesante: Las <a href="http://lab.msdn.microsoft.com/teamsystem/workshop/sf/default.aspx">Software Factories</a>, una iniciativa de Microsoft para intentar mejorar la productividad de los programadores (como siempre...)<br /><br />¿Conseguiré postear algo de código DirectX en este blog?<br /><br />Quién sabe... :SAugusto Ruizhttp://www.blogger.com/profile/05966632752704864542noreply@blogger.com0tag:blogger.com,1999:blog-12472470.post-1124811895085218002005-08-23T17:38:00.000+02:002005-08-23T17:44:55.093+02:00Adiós, Flipcode...Muchos teníamos la manía de pasar por <a href="http://www.flipcode.com/">aquí</a> casi a diario, para ver lo que se cocía en el mundillo del desarrollo de juegos. Ya no podremos hacerlo más, salvo por nostalgia.<br /><br />Fue una gozada mientras duró, pero Kurt (el editor-creador de <a href="http://www.flipcode.com/">Flipcode</a>) ha decidido cerrar sus puertas.<br /><br />Flipcode ha muerto. Larga vida a Flipcode!!<br /><br />Otros sitios similares (pocos...):<br /><br /><ul><br /><li><a href="http://www.gamedev.net">GameDev</a></li><br /><li><a href="http://www.gamasutra.com">Gamasutra</a></li><br /><li><a href="http://www.gpwiki.org">Game Programming Wiki</a></li><br /><li><a href="http://lgdc.sunsite.dk/">Linux Game Development Center</a></li><br /></ul>Augusto Ruizhttp://www.blogger.com/profile/05966632752704864542noreply@blogger.com0tag:blogger.com,1999:blog-12472470.post-1122110978542402452005-07-23T11:19:00.000+02:002005-07-23T11:30:09.306+02:00Un nuevo blog...A las buenas!<br /><br />Hoy me he llevado la grata sorpresa de ver que otro amiguete mío (y compañero m&íacute;o) se ha apuntado a la fiebre de los blog. <a href="http://spaces.msn.com/members/jolurama/PersonalSpace.aspx?_c=">El blog de José Luis</a>.<br /><br />Esta semana de trabajo ha sido durilla, pero he estado haciendo algo interesante. Estaba programando en .NET un control que puede contener varios controles, y se pueden arrastrar para recolocarlos. Cuando los arrastras, se ve una imagen translúcida del control. Además, tambíén hice unos paneles que se podían colapsar o expandir. <br /><br />Esto me ha costado bastante más, porque cuando le cambias dinámicamente el tamaño a un control, si éste contenía varios controles, el framework se empeña en reposicionarlos, y el efecto de expandir o colapsar le costaba bastante (que iba muy lento y con parpadeo, vaya). Sin embargo, al final he conseguido que fuera bastante rápido haciendo un pequeño truco: Capturo una imagen del control tal cual está (si es para colapsar), se la pongo al control como imagen de fondo, y oculto los controles ;).<br /><br />Aplicando una variación de esta técnica en el otro control (el que puede contener varios controles y permite reposicionar) consigues que si uno de los controles se reposiciona, el resto se mueven muy suavemente.<br /><br />Además, al hacer que el cambio de tamaño se realice en un hilo diferente al del interfaz del usuario, haces que este siga respondiendo a los eventos del usuario, con lo que puedes tener varios controles a la vez redimensionandose.<br /><br />Interesante? No lo sé, pero la verdad es que en la pantalla queda bastante bien... ;)<br /><br />Bueno, pues nada, me despido ya... Hasta la próxima!Augusto Ruizhttp://www.blogger.com/profile/05966632752704864542noreply@blogger.com2tag:blogger.com,1999:blog-12472470.post-1120462810726645562005-07-04T09:40:00.000+02:002005-07-04T09:46:16.663+02:00NinjaiOtra serie en flash con banda sonora interesante, un poco gore, que esta bastante bien: <a href="http://ninjai.atomfilms.com/">Ninjai</a>.Augusto Ruizhttp://www.blogger.com/profile/05966632752704864542noreply@blogger.com0tag:blogger.com,1999:blog-12472470.post-1120311809979911252005-07-02T15:41:00.000+02:002005-07-02T15:43:29.983+02:00Nuevo episodio de Cálico ElectrónicoUna de las mejores series en flash que conozco, Cálico Electrónico. Acaban de sacar un nuevo capítulo. Lo podéis ver <a href="http://www.calicoelectronico.com/">aquí</a>. El título de este nuevo episodio es "El día en que conocí a un superhéroe".<br /><br />¡¡¡¡¡No os perdáis las tomas falsas!!!!Augusto Ruizhttp://www.blogger.com/profile/05966632752704864542noreply@blogger.com0tag:blogger.com,1999:blog-12472470.post-1120308896698040292005-07-02T14:54:00.000+02:002005-07-02T14:58:59.406+02:00En MalBicho, Valladolid.He de aclarar una cosa. Las fotos que he posteado otras veces y esta también, tienen entre cuatro y cinco años de antigüedad. Hace tiempo que ya no estoy en ningún grupo, aunque me gustaría volver a montar alguno... (alguien se apunta???? ;) )<br /><br />Esta foto la tomaron en un concierto en la sala MalBicho. Se puede ver al público con las bengalas mientras tocábamos una canción lenta... (son esas cosas amarillas que se ven de fondo). Y también se puede ver a Jesús con el pelucón rubio...<br /><a href='http://photos1.blogger.com/img/54/6476/640/untitled201.jpg'><img border='0' class='phostImg' src='http://photos1.blogger.com/img/54/6476/200/untitled201.jpg'></a><br /><span style='font-size: 8pt;'>Posted by <a href='http://picasa.google.com/' target='ext'>Picasa</a></span>Augusto Ruizhttp://www.blogger.com/profile/05966632752704864542noreply@blogger.com0tag:blogger.com,1999:blog-12472470.post-1119955997964509702005-06-28T00:44:00.000+02:002005-06-28T12:53:17.970+02:00Un par de links...Buceando por la web, he tropezado con un blog bastante interesante, de un fulano que curra en Microsoft. Su nombre es el PadreParada, y su trabajo es Evangelista de Microsoft...<br /><br /><a href="http://blogs.technet.com/padreparada/archive/2005/06/22/406684.aspx">El Blog del PadreParada</a><br /><br />Y para los que son torpes (como yo) o vagos (como yo) he aquí un mensaje en el foro de GameDev con links a páginas con sprites... Muy, muy interesante, para poder hacer prototipos chulos rápidamente (sin tener que pintar a mano los sprites ;))<br /><br /><a href="http://www.gamedev.net/community/forums/topic.asp?topic_id=272386">Sprites a porrillo</a>Augusto Ruizhttp://www.blogger.com/profile/05966632752704864542noreply@blogger.com0