Este foro usa cookies
Este foro utiliza cookies para almacenar su información de inicio de sesión si está registrado y su última visita si no lo está. Las cookies son pequeños documentos de texto almacenados en su computadora; las cookies establecidas por este foro solo se pueden usar en este sitio web y no representan ningún riesgo de seguridad. Las cookies en este foro también rastrean los temas específicos que ha leído y la última vez que los leyó. Si Ud. continúa navegando, entenderemos que acepta todas las cookies.

Se almacenará una cookie en su navegador, independientemente de la elección, para evitar que se le vuelva a hacer esta pregunta. Podrá cambiar la configuración de sus cookies en cualquier momento utilizando el enlace en el pie de página.

El foro antiguo se encuentra accesible desde https://foro.gambas-es.org en modo de solo lectura.

Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5

Macro de dibujo de viñetas en plantilla de guion de cómic LibreOffice
#1

A raíz de hacer una plantilla para redactar guiones de historietas que se adaptase a mi forma de trabajar, pensé que debía añadirle una herramienta que permitiese hacer un diagrama de viñetas sin necesidad de gastar la, más o menos, hora por cada 15-18 páginas.
La cuestión planteada en  https://gambas-es.org/showthread.php?tid=645  venía al caso para poder hacer un diagrama de viñetas que ayudase al dibujante «víctima» del guionista de turno. Esto es, el «escribidor» realiza un guion con la plantilla y ésta, de manera automática, fabrica un esquema de viñetas. Para tal propósito son necesaria dos cosas:
  1. Que las páginas y las viñetas estén formateadas con los párrafos correspondientes.
  2. Que el texto de las viñetas indique el tamaño y posición según el método sugerido por Peio Soria.
Este método es muy simple. Como explico en https://www.faneo.es/forum/forum/guion-y...1068#11068, En su manual «Mi guion de cómic», que está para bajar libremente en pdf desde su página, Peio Soria describe el que, para mí, es el método más lógico y sencillo. Se trata de emplear unas fracciones en vertical y en horizontal, de la manera 2/3Vx2/4H, por ejemplo. ¿Cómo se interpretaría? Fácil, 2/3V significa que se toma el segundo de los tres tercios posibles de la división vertical de la página, esto es, columnas. Además se toma el segundo de las cuatro posibles partes de división horizontal, filas, de la página. Superponiendo ambos, resulta la viñeta que queremos indicar.
[Imagen: Vi-etas-de-Peio.png]
Para abarcar varias partes en el caso de alguna viñeta más irregular o una que ocupe toda unidad, se pueden emplear nomenclaturas especiales.
Véase un ejemplo de cómo queda escrito:
[Imagen: 2021-10-31-12-15.png]

De esta manera, al ejecutar la macro, se obtiene:
[Imagen: Esquema-Vinetas.png]
Documento que ya se puede enviar para que el dibujante pueda interpretar más fácilmente lo que dice el guionista y, después,... hacer lo que le venga en gana  Tongue .
Además, la macro permite:
  1. Solapamiento de viñetas —como en la página 37 del ejemplo—.
  2. Cambio INMEDIATO de formato de página —apaisado, vertical, A5, B5, cuadrado, fanzine...— con sólo introducir un número.
  3. Detecta errores en la nomenclatura e indica el lugar en el que se produce.
  4. Se le ha añadido un apéndice de estadísticas que permite ver, aparte de las palabras y caracteres que ya indica el programa con «contar palabras», el número de páginas del cómic, el número bruto de viñetas y el número de bocadillos.
A esta macro, después de pelearme mucho, muchísimo, más todavía, con los mal documentados y dispersas especificaciones del UNO de Star BASIC —al menos así le pareció a éste, su humilde servidor—, logré terminarla en una versión más o menos útil:
GAMBAS
  1. REM  *****  BASIC  *****
  2.  
  3. ' DIBUJAR ESQUEMAS PARA GUION DE HISTORIETAS Y ESTADÍSITCAS.
  4. '    SOFTWARE LIBRE
  5. '    --------------
  6. '    
  7. '    Grandamakulo, 2021
  8. '    grandamakulo@gmail.com
  9. '    
  10. '    * Puedes:
  11. '    Distribuirlo
  12. '    Modificarlo
  13. '    Regalarlo
  14. '    Si te place, acredítame
  15. '    
  16. '    * No puedes:
  17. '    Cobrar por él o por sus variaciones directas
  18. '    Si quieres hacerlo, ponte en contacto conmigo
  19. '    —Hay muchas fundaciones a las que ayudar—
  20. '    
  21. '    * Garantías:
  22. '    Estás de guasa, ¿no?
  23. '    Si se te funde la lavadora o se te hace un 
  24. '    desconchón en la pared, soluciónalo tú.
  25. '    
  26. '    ESTE PROGRAMA CONSIDERA LAS TRES --O CUATRO--
  27. '    LEYES DE LA ROBÓTICA. Más o menos.
  28.  
  29.  
  30. Option Explicit
  31. Const sC As String = """"
  32. Const sA As String = "'" 
  33.  
  34. Sub DibujaEsquema()
  35.     ' A partir de los datos del formato de página que introduce el usuario,
  36.     ' del número de páginas y de la información que el usuario ha establecido
  37.     ' en el tipo de párrafo viñeta, se dibuja en SVG —y se guarda en el mismo
  38.     ' directorio que el Documento— un ESQUEMA DE VIÑETAS.
  39.     
  40.     Dim oDoc As Object            'Documento actual
  41.     Dim oEnu As Object            'Partes del documento actual
  42.     Dim oTex As Object            'Un elemento texto de oEnu
  43.     Dim iPag As Integer            'Número de página
  44.     Dim iVin As Integer            'Número de viñeta en cada página
  45.     
  46.     Dim oSitio As Object
  47.     
  48.     Dim _iRel As Double            'Relación entre alto y ancho
  49.     Dim _iAnM As Double            'Ancho de marco = 210,0224103814 mm eq A4
  50.     Dim _iAlM As Double            'Alto del marco = _iAnt * _iRel
  51.     Dim _iCaM As Double            'Ancho de calle marco  = 5 mm
  52.     Dim _iCaP As Double            'Ancho de calle página = 5 mm
  53.     Dim _iCaV As Double            'Ancho de calle viñeta = 2 mm
  54.     Dim _iAnP As Double            'Ancho de página
  55.     Dim _iAlP As Double            'Alto de página
  56.     Dim _sCoM As String            'Color marco
  57.     Dim _sCoP As String            'Color página
  58.     Dim _sCoB As String            'Color borde viñeta
  59.     Dim _sCoV As String            'Color viñeta
  60.     Dim _iAnB As Double            'Ancho borde viñeta
  61.     Dim _sFuP As String            'Fuente página
  62.     Dim _iFTP As Integer        'Tamaño fuente página
  63.     Dim _sFuV As String            'Fuente viñeta
  64.     Dim _iFTV As Integer        'Tamaño fuente viñeta
  65.     
  66.     Dim iXM  As Double            'Coordenada X origen del marco actual
  67.     Dim iYM  As Double            'Coordenada Y origen del marco actual
  68.     Dim iXP  As Double            'Coordenada X origen de la página actual
  69.     Dim iYP  As Double            'Coordenada Y origen de la página actual
  70.     Dim iXV  As Double            'Coordenada X origen de la viñeta actual
  71.     Dim iYV  As Double            'Coordenada Y origen de la viñeta actual
  72.     Dim iAnV As Double            'Ancho de la viñeta actual
  73.     Dim iAlV As Double            'Alto de la viñeta actual
  74.     
  75.     Dim iKK  As Byte
  76.     Dim iFil As Byte
  77.     Dim iCol As Byte
  78.     Dim iVis As Variant
  79.     
  80.     Dim Paso As String            'Variable comodín
  81.     
  82.     Dim tSVG As String            'Cadena SVG resultado
  83.     
  84.     On ERROR GOTO Errr
  85.     
  86.     'Tamaño y orientación de la página
  87.     Paso="A4 vertical: " & sqr(2) & Chr(13)
  88.     Paso=Paso & "A4 Horizontal: " & 1/sqr(2) & Chr(13)
  89.     Paso=Paso & "Cuadrado:      " & 1 & Chr(13)
  90.     Paso=Paso & "O un número cualquiera como proporción entre alto y ancho."
  91.     _iRel=InputBox(Paso, "Formato", sqr(2))
  92.     if _iRel<=0 then end
  93.     Paso=""
  94.     
  95.     'Iniciar variables de color, forma y fuentes
  96.     _sCoM="#000080"'"#000000FF"
  97.     _sCoP="#FFFFFF"
  98.     _sCoB="#008080"
  99.     _sCoV="#00FFFF80"
  100.     _iAnB=2
  101.     _sFuP="Liberation Mono"
  102.     _sFuV="Liberation Mono"
  103.     _iFTV=16
  104.     _iFTP=72
  105.     
  106.     _iAnM= 210.0224103814*3.779527559055
  107.     _iAlM=_iAnM*_iRel
  108.     _iCaM=5
  109.     _iCaP=5
  110.     _iCaV=1
  111.     _iAnP=(_iAnM-3*_iCaP)/4
  112.     _iAlP=(_iAlM-5*_iCap)/4
  113.     
  114.     tSVG="<svg version=" & sC & "1.1" & sC & " xmlns=" & sC & "http://www.w3.org/2000/svg" & sC 
  115.     tSVG=tSVG & " xmlns:xlink=" & sC & "http://www.w3.org/1999/xlink" & sC & ">"
  116.     
  117.     'Primer marco
  118.     iXM=0
  119.     iYM=0
  120.     tSVG=tSVG & RectSVG(iXM, iYM, _iAnM, _iAlM, _sCoM) & Chr(13)
  121.     
  122.     oDoc=ThisComponent
  123.     oEnu=oDoc.Text.createEnumeration
  124.     
  125.     While oEnu.hasMoreElements
  126.         oTex=oEnu.nextElement
  127.         If oTex.supportsService("com.sun.star.text.Paragraph") Then
  128.             
  129.             If oTex.ParaStyleName=("CC_Página") Then
  130.                 iPag=iPag+1
  131.                 iVin=0
  132.                 '¿Marco nuevo? A dibujarlo
  133.                 iKK=iPag MOD &H10
  134.                 If iKK=0 Then
  135.                     iYM=0
  136.                     iXM=(iPag \ &H10)*(_iAnM+_iCaM)
  137.                     tSVG=tSVG & RectSVG(iXM, iYM, _iAnM, _iAlM, _sCoM) & Chr(13)
  138.                 End If
  139.                 'Dibuja la página
  140.                 Paso = iPag
  141.                 iCol=iKK MOD 4
  142.                 iFil=iKK \ 4
  143.                 iYP=iYM+_iCaP+(_iCaP+_iAlP)*iFil
  144.                 iXP=iXM+_iCaP+_iAnP*iCol+((iCol+1) MOD 2)*_iCap
  145.                 tSVG=tSVG & RectSVG(iXP, iYP, _iAnP, _iAlP, _sCoP,"1","#000000",_sFuP, _iFTP, "gray",Paso) & Chr(13)
  146.             End If
  147.             If oTex.ParaStyleName=("CC_Viñeta") Then
  148.                 iVin=iVin+1
  149.                 'Dibuja la viñeta
  150.                 'Interpreta posición y tamaño
  151.                 iVis=SoriaVin(oTex.String, Str(iPag & "." & iVin))
  152.                 iYV=iVis(0,0)*_iAlP+iYP
  153.                 iXV=iVis(1,0)*_iAnP+iXP
  154.                 iAnV=iVis(1,1)*_iAnP
  155.                 iAlV=iVis(0,1)*_iAlP
  156.                 Paso=iPag & "." & iVin
  157.                 tSVG=tSVG & RectSVG(iXV, iYV, iAnV, iAlV, _sCoV, "1", _sCoB, _sFuV, _iFTV,"gray",Paso) & Chr(13)
  158.             End If
  159.                     
  160.         End If
  161.     Wend
  162.     tSVG=tSVG & "</svg>"
  163.     GlobalScope.BasicLibraries.loadLibrary("Tools")
  164.     GuardaArchivo(tSVG, Tools.Strings.DirectoryNameoutofPath(oDoc.URL, "/") & "/EsquemaVinetas.svg")
  165.     'Print tSVG
  166.     MsgBox("¡Terminado!")
  167.     Exit Sub
  168. Errr:
  169.     Reset
  170.     MsgBox("Numeración incorrecta en la viñeta: " & iPag & "." & iVin & Chr(13) & oTex.String)
  171.  
  172.  
  173. Sub CuentaVinetas()
  174.     'Cuenta páginas, bocadillos y viñetas por tipo de párrafo y lo muestra en un mensaje 
  175.     Dim oDoc As Object
  176.     Dim oEnu As Object
  177.     Dim oTex As Object
  178.     Dim iPag As Integer
  179.     Dim iVin As Integer
  180.     Dim iBoc As Integer
  181.     
  182.     Dim Paso As String
  183.    
  184.     oDoc=ThisComponent
  185.     oEnu=oDoc.Text.createEnumeration
  186.     
  187.     While oEnu.hasMoreElements
  188.         oTex=oEnu.nextElement
  189.         If oTex.supportsService("com.sun.star.text.Paragraph") Then
  190.             If oTex.ParaStyleName=("CC_Viñeta")    Then iVin = iVin+1
  191.             If oTex.ParaStyleName=("CC_Página")    Then iPag = iPag+1
  192.             If oTex.ParaStyleName=("CC_Bocadillo") Then iBoc = iBoc+1
  193.         End If
  194.     Wend
  195.      Paso = "Páginas:    " & iPag & Chr(13)
  196.      Paso = Paso & "Viñetas:    " & iVin & Chr(13)
  197.      Paso = Paso & "Bocadillos: " & iBoc
  198.  
  199.     MSGBOX (Paso, 64, "Estadísitcas")
  200.  
  201.  
  202. Private Function RectSVG (iX As Double, iY As Double, iAnc As Double, iAlt As Double, sFondo As String, Optional iBorde As Double, Optional sBorde As String, Optional sFuente As String, Optional iTam As Integer, Optional sColor As String, Optional tTexto As String) As String
  203.     'Genera un texto SVG con un rectángulo y un texto dentro.
  204.     Dim Paso as String
  205.     'Posición
  206.     Paso=Paso & "<rect x=" & sC & Int(iX) & sC & " y=" & sC & Int(iY) & sC 
  207.     'Tamaño
  208.     Paso=Paso & " width=" & sC & Int(iAnc) & sC & " height=" & sC & Int(iAlt) & sC
  209.     'Color
  210.     Paso=Paso & " style=" & sC & "fill:" & sFondo
  211.     'Borde, si se le añade
  212.     If Not IsMissing(sBorde) Then
  213.         Paso=Paso & ";stroke:" & sBorde & ";stroke-width:" & iBorde & "px"
  214.     End If
  215.     Paso=Paso & sC & "/>" & Chr(13)
  216.     
  217.     If Not IsMissing(tTexto) Then
  218.         'Texto, si se le añade
  219.         'Fuente
  220.         Paso=Paso & "<text font-family=" & sC & sFuente & sC & " font-size=" & sC & iTam & sC & " fill=" & sC & sColor & sC
  221.         'Posición
  222.         Paso=Paso & " x=" & sC & Int(iX+iAnc/2) & sC & " y=" & sC & Int(iY+iAlt/2) & sC
  223.         'Centrar
  224.         Paso=Paso & " text-anchor=" & sC & "middle" & sC & " alignment-baseline=" & sC & "center" & sC
  225.         'Texto
  226.         Paso=Paso & ">" & tTexto & "</text>"
  227.     End If
  228.     
  229.     RectSVG=Paso
  230.  
  231. Private Sub GuardaArchivo(tTexto as String, sRuta as String)
  232.     Dim iLibre as Integer
  233.     sRuta = ConvertToUrl(sRuta)
  234.     iLibre = FreeFile
  235.     Open sRuta For Output As #iLibre
  236.     Print #iLibre,tTexto
  237.     Close #iLibre
  238.  
  239. Private Function SoriaVin(sTex As String, Donde As String) As Variant
  240.     
  241.     Dim sGGG As String        'Texto Soria en mayuúsculas y sin espacios
  242.     Dim sMMM() As String    'Matriz para tratar el texto
  243.     Dim sTTT() As String    'Submatriz
  244.     Dim iPX (0 To 1, 0 To 1) As Double '0 Hor ;1 Ver | 0 Origen; 1 Ancho
  245.     Dim iPA (0 To 1, 0 To 2) As Double '0 Hor ;1 Ver | 0 Desde; 1 Hasta ; 2 De
  246.     Dim i   As Byte            'Contador
  247.     Dim k     As Byte            'Contador
  248.     
  249.     sGGG = Ucase(Trim(sTex))
  250.     if Not IsNumeric(Left(sGGG,1)) Then
  251.     'Si no comienza por número, viñeta a toda página
  252.         sGGG="1/1VX1/1H"
  253.     End If
  254.     sMMM=Split(sGGG," ")
  255.     sGGG=sMMM(0)
  256.     sMMM=Split(sGGG,"X")
  257.     If Ubound(sMMM)=0 Then
  258.         Redim Preserve sMMM(0 To 1)
  259.         if Instr(sMMM(0),"V") Then sMMM(1)="1/1H" Else sMMM(1)="1/1V"
  260.     End If
  261.     For i=0 To 1
  262.         sGGG=sMMM(i)
  263.         If InStr(sGGG,"H") Then k=0 Else k=1
  264.         sGGG=Left(sGGG,Len(sGGG)-1)
  265.         sTTT=Split(sGGG, "/")
  266.         iPA(k,2)=sTTT(Ubound(sTTT))
  267.         sTTT=Split(sTTT(0),"-")
  268.         If Ubound(sTTT)=1 Then
  269.                 iPA(k,0)=sTTT(0)
  270.                 iPA(k,1)=sTTT(1)
  271.             Else
  272.                 iPA(k,0)=sTTT(0)
  273.                 iPA(k,1)=sTTT(0)
  274.         End If
  275.         iPX(k,0)=(iPA(k,0)-1)/iPA(k,2)
  276.         iPX(k,1)=(iPA(k,1)-iPA(k,0)+1)/iPA(k,2)
  277.     Next i
  278.     
  279.     SoriaVin=iPX




Archivos adjuntos
.zip Plantilla_KK_macro.ott.zip Tamaño: 18.05 KB  Descargas: 1

En un lugar de La Mancha de cuyo nombre me acuerdo perfectamente...
[-] Los siguientes 2 usuarios dicen gracias a Grandamakulo por este post:
  • Shell, Shordi
    ¡Gracias!


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)