Newsgroup: it.comp.lang.visual-basic
Titolo: Creazione di un fill

Ciao a tutti
qualcuno saprebbe dirmi come poter realizzare un trapezio (o comunque
qualsiasi altra forma definita da vertici) colorato internamente inserito
in una Picturebox (in matlab il comando sarebbe fill)?
Ho già visto il metodo line, ma questo permette sono di realizzare
rettangoli o quadrati.
Ciao e grazie a tutti
Peter 
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 rettangoli o quadrati.
Dubito.

 Dubito.
Ma sulla guida in linea ho trovato come parametri di Line:
B= Facoltativa. Se è inclusa, determina il disegno di un rettangolo. Le
coordinate verranno utilizzate per indicare gli angoli opposti del
rettangolo. 
F= Facoltativa. Se viene utilizzata l'opzione B, l'opzione F specifica che
il rettangolo verrà riempito con lo stesso colore utilizzato per il
disegno. L'opzione F non può essere utilizzata senza B. Se B viene
utilizzata senza F, il rettangolo verrà riempito in base alle impostazioni
correnti delle proprietà FillColor e FillStyle. Il valore predefinito di
FillStyle è trasparente. 


 in una Picturebox (in matlab il comando sarebbe fill)?
Io ho scritto una funzione che usa iterativamente .line per generare
triangoli partendo dalle coordinate dei vertici (arbitrari).
Se il poligono che devi disegnare è convesso (un trapezio è convesso) puoi
suddividerlo facilmente in triangoli.
Se nessuno ti da' una soluzione migliore stasera ti posto la mia funzione
(che però è piuttosto lenta).
termoPilucco.

 (che però è piuttosto lenta).
Si ma La funzione da te scritta permette il riempimento con colore della
figura?
Ciao 


 figura?
Certo.
Ecco il codice: a te basta chiamare tr(varie coordinate, colore);
colore è il classico RGB di VB.
Dovrai modificare tutte le istruzioni line in TuoOggetto.line, infine
ricordati di porre TuoOggetto.Aautoredraw=true per rendere persistenti le
regioni.
Sub tr(ByVal x1 As Single, ByVal y1 As Single, ByVal x2 As Single, ByVal y2
As Single, ByVal x3 As Single, ByVal y3 As Single, colore As Long)
' Disegna un triangolo del colore passato dati i tre vertici
Dim tmpx As Single, tmpy As Single
' ordino i vertici dall'alto al basso
If y1 > y2 Then
    tmpx = x2
    tmpy = y2
    y2 = y1
    x2 = x1
    x1 = tmpx
    y1 = tmpy
End If
If y1 > y3 Then
    tmpx = x3
    tmpy = y3
    y3 = y1
    x3 = x1
    x1 = tmpx
    y1 = tmpy
End If
If y2 > y3 Then
    tmpx = x3
    tmpy = y3
    y3 = y2
    x3 = x2
    x2 = tmpx
    y2 = tmpy
End If
' determino se il triangolo è a base piatta, generico o a base piatta
rivolto verso il basso
If Int(y1) = Int(y2) Then
    tg x3, y3, x2, y2, x1, y1, colore
ElseIf Int(y2) = Int(y3) Then
    tsu x1, y1, x2, y2, x3, y3, colore
Else
    tsg x1, y1, x2, y2, x3, y3, colore
End If
End Sub
Sub tsu(ByVal x1 As Single, y1 As Single, ByVal x2 As Single, y2 As Single,
ByVal x3 As Single, y3 As Single, colore As Long)
' disegna un triangolo con lato superiore orizzontale dati i tre vertici
ordinati in base alle coordinate y
Dim a As Integer
Dim p1 As Single
Dim p2 As Single
Dim dy As Integer
dy = y2 - y1
      If dy <= 1 Then: Exit Sub
      ' calcolo i dx dei lati dati i dy
      p1 = (x2 - x1) / dy
      p2 = (x3 - x1) / dy
      x2 = x1
If p1 > p2 Then
      For a = y1 To y2
            Line (x2, a)-(x1, a), colore
            x1 = x1 + p1
            x2 = x2 + p2
      Next
Else
      For a = y1 To y2
            Line (x1, a)-(x2, a), colore
            x1 = x1 + p1
            x2 = x2 + p2
      Next
End If
End Sub
Sub tsg(ByVal x1 As Single, y1 As Single, ByVal x2 As Single, y2 As Single,
ByVal x3 As Single, y3 As Single, colore As Long)
' disegna un triangolo generico dati i tre vertici ordinati in base alle
coordinate y
Dim a As Integer
Dim p1 As Single
Dim p2 As Single
Dim dy As Integer
Dim vx2 As Single
'dy = y2 - y1
'If dy <= 1 Then: Exit Sub
p1 = (x2 - x1) / ((y2 - y1))
p2 = (x3 - x1) / ((y3 - y1))
vx2 = x1
If p1 > p2 Then
    For a = y1 To y2
      Line (vx2, a)-(x1, a), colore
      x1 = x1 + p1
      vx2 = vx2 + p2
    Next
Else
    For a = y1 To y2
        Line (x1, a)-(vx2, a), colore
      x1 = x1 + p1
      vx2 = vx2 + p2
    Next
End If
p1 = (x3 - x2) / ((y3 - y2))
x1 = x2 + p1
If p1 > p2 Then
    For a = y2 + 1 To y3
      Line (x1, a)-(vx2, a), colore
      x1 = x1 + p1
      vx2 = vx2 + p2
    Next
Else
    For a = y2 + 1 To y3
      Line (vx2, a)-(x1, a), colore
      x1 = x1 + p1
      vx2 = vx2 + p2
    Next
End If
End Sub
Sub tg(ByVal x1 As Single, y1 As Single, ByVal x2 As Single, y2 As Single,
ByVal x3 As Single, y3 As Single, colore As Long)
' disegna un triangolo con base piatta dati i tre vertici ordinati in base
alle coordinate y
Dim a As Integer
Dim p1 As Single
Dim p2 As Single
Dim dy As Integer
dy = y1 - y2
      If dy <= 1 Then: Exit Sub
      p1 = (x2 - x1) / dy
      p2 = (x3 - x1) / dy
      x2 = x1
If p1 > p2 Then
      For a = y1 To y2 Step -1
        Line (Round(x2), a)-(Round(x1), a), colore
        x1 = x1 + p1
        x2 = x2 + p2
      Next
Else
      For a = y1 To y2 Step -1
        Line (Round(x1), a)-(Round(x2), a), colore
        x1 = x1 + p1
        x2 = x2 + p2
      Next
End If
End Sub
termoPilucco

 rettangoli o quadrati.
E un ottagono come lo realizzeresti?
Ciao
--
Math Parser : 
http://www.neodatatype.net
Sito Comune : 
http://www.it-lang-vb.net

 ha scritto nel messaggio
news:bdsakl$e8h$1...@news.newsland.it...


Grazie 1000 a tutti


righe crei i poligoni più disperati.
Sadico ;-)
-- 
ciao, hal