https://foro.gambas-es.org/viewtopic.php?f=24&t=8005
-----------------------------------
tercoIDE
Martes, 28 Abril 2020, 20:32

Radiografia De Una Entidad De GambasCAD
-----------------------------------
(este post ira modificandose a medida que agregamos cosas)

IMPORTANTE: estos puntos no estan en PIXEL sino en METROS

[img]https://foro.gambas-es.org/files/images/2399/captura_de_pantalla_de_2020_05_02_09_17_20.png[/img]

Los puntos se guardan en arrays de Float[] en pares x0,y0,x1,y1,x2.....

[code linenumbers=false syntax=gambas]
' El nombe de la entidad, que difiere del nombre del archivo de la clase, desde la linea de comandos podra invocarse este nombre para dibujar algo, sin tener que hacer click en un boton. Listo para ser traducido.
Public gender As String = ("Slab")

' Este numero se usa para determinar que cosa se dibuja primero. El 0 se dibuja primero y es tapado por el resto de las cosas.
Public Const DrawingOrder As Integer = 1        ' 1 = draws first 
numero de puntos minimo para que pueda dibujarse algo
Public Const PointsToDraw As Integer = 1             ' minimal point requered for drawing something usefull

' esto se escribe en el prompt, como ayuda al user
Public Const HelperTrabajo As String = ("Insert a Slab")


'  a partir de aqui se guardan cosas en el disco             
'========================================================================
 son los puntos que definen las cosas, lo que le usuario debera marcar al dibujarlas.
Public P As New Float[]                         'X,Z pairs

' un parametro de texto, pero puede servir para alojar una lista separable con Split()
Public StringData As String

' estos todavia no los usamos
Public Layer As Integer
Public Block As Integer
Public _Color As Integer                     ' Para darle un color distinto
Public LineType As Integer                  
Public LineWidth As Integer                  
'========================================================================
' hasta aqui se guardan cosas en el disco, lo que sigue son variables durante el uso
indica si algun punto fue seleccionado con el recuadro verde
Public Psel As New Boolean[] 

' True si durante la construccion ya tiene suficientes elementos para poder hacer una representacion digna
Public DrawAble As Boolean = False

' si ya lo terminamos de dibujar
Public Finished As Boolean = False

 ' Pertenecemos a un grupo?
Public Group As Integer = 0             

' es un backup de P[] , muy util a la hora de volver las cosas al lugar original cuando el use se arrepiente de una accion
Public B As New Float[]   

' define un poligono alrededor de las cosas y sirve para detectar cuando se hace click en algo para sleeccionarlo. Esta dibujado en azul y puede verse con F6 a modo de Debug
Public BoundingPoligon As New Float[]  
[/code]


-----------------------------------
tercoIDE
Martes, 28 Abril 2020, 20:49

Re: Radiografia De Una Entidad De GambasCADE
-----------------------------------
[code linenumbers=false syntax=gambas]

'' La rutina principal de la clase: dibujarse
'' Esta rutina es la UNICA que se invoca a intervalos regulares, la clase deberia utilizarla para hacer todas las tareas
'' que dependan del tiempo, como por ejemplo moverse a cierta velocidad, transmitir agua , etc
Public Sub Draw()
   
    If Not Me.DrawAble Then Return                
    If FMain.DrawOriginales Then DrawOriginal
      ' AQUI VAN LAS RUTINAS DE DIBUJO 
      Paint.Reset ' dejamos todo en orden para la proxima entidad
End


'' Esta rutina pude utilizarse para dibujar un fantasma durante alguna operacion como Copiar
'' es invocada por .Draw()
Public Sub DrawOriginal()
       
End


'' Determina si el objeto puede moverse, en general es cuando todos sus puntos estan seleccionados.
'' La entidad puede negarse al movimiento!!!
Public Function Movable() As Boolean

    If "MIS CONDICIONES PARA PERMITIR MOVIMIENTOS" Then   
        Return True
    Else
        Return False
    End If

End

'' Idem, tambien puede negarse a que la deformen !!!!
Public Function Stretchable() As Boolean
    
  If "MIS CONDICIONES PARA PERMITIR ESTIRAMIENTOS" Then 
      
        Return True
    Else
       Return False
       
    Endif
                                            
End


'' Recibe un punto y debe responder si esta dentro de si misma
Public Sub PointSelection(Xr As Float, Zr As Float) As Boolean
    
    
    If "MIS CONDICIONES PARA VER SI UN PUNTO CUALQUIERA Xr,Zr ESTA DENTRO DE ESTE ELEMENTO" Then
      
        Return True 
    Else
            
        Return False
    End If
End



'' Aqui se crea el poligono que envuelve a la entidad y sirve para cosas como detectar clicks
Public Sub CreateBoundingPoligon()
    
End


'' Esto se invoca una unica vez al finalizar la creacion de la entidad, o sea cuando el user
'' marco todos lo puntos y escribio los parametros numericos.
Public Sub Finish()
        
    If " all is OK?" Then
    
        ForDeletion = False
        DrawAble = True
    
    Else
        
        ForDeletion = True 
        DrawAble = False
    
    End If
    
End [/code]


-----------------------------------
tercoIDE
Sabado, 02 May 2020, 13:21

Re: Radiografia De Una Entidad De GambasCADE
-----------------------------------
Las entidades generan un array de puntos de donde engancharnos. Se llaman POI[] por "puntos de interes" en ingles. 

El array es analizado duarante el MouseMove y nos engancha al punto en cuestion, es el Snap de los CAD


