none
Come impostare il viewport RRS feed

  • Domanda

  • Salve a tutti. Usando un oggetto Image mi sono imbattuto nel problema di stabilire l'origine del disegno che è normalmente impostato in alto a sinistra. ho bisogno di portarlo in basso a sinistra come nei normali assi cartesiani.

    l'istanza si apre con il seguente codice:

                    
     using (DrawingContext drwo = drw.RenderOpen())
    e per disegnare:
    
       drwo.DrawLine(gh1, jh, hj);
    
    dove gh1 è il pennello e jh e hj sono le coordinate
    
    poi si effettua l'operazione di rendering:
    
                    bmp.Render(drw);
    
                }
                            
                
                immagine.Source = bmp;
    dove bmp è definito come:
    
    RenderTargetBitmap bmp = new RenderTargetBitmap(577, 577, 10, 10, PixelFormats.Pbgra32);

    E' possibile ottenere il risultato ponendo nell'ordinata y il valore Image.Height-y. Penso che ci sarà un modo migliore:

    La mia domanda è come ottenere il ViewPort nell'origine.

    ringrazio in anticipo per l'eventuale risposta




    Aggiungo che si può seguire la via di mettere al posto della ordinata y con image.Height-y tuttavia ci sarà un modo migliore.
    Aggiungo che si può seguire la via di mettere al posto della ordinata y con image.Height-y tuttavia ci sarà un modo migliore.
    lunedì 28 novembre 2022 18:16

Risposte

  • Ciao, secondo me dovresti fare una trasformazione degli assi, per porre l'origine in basso a sinistra, e invertire l'asse Y, una cosa di questo tipo:

    Canvas myCanvas = new Canvas();
    myCanvas.Width = 300;
    myCanvas.Height = 300;            
    myCanvas.Background = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#005588"));
                
    //inverte l'asse Y e fissa la nuova origine che così viene in basso a sinistra:
    myCanvas.LayoutTransform = new ScaleTransform(1,-1, 0, 0);
    MyGrid.Children.Add(myCanvas);
    
    DrawingVisual drw = new DrawingVisual();            
    DrawingContext drwo = drw.RenderOpen();
                
    //disegna una linea bianca di spessore 2 nel context del DrawingVisual:
    Pen myPen = new Pen(new SolidColorBrush(Color.FromArgb(255,255,255,255)), 2);
    drwo.DrawLine(myPen,new Point(0,0),new Point(300,300));                        
    drwo.Close();

    Funziona perfettamente (l'ho provato). Tracciando una linea, l'origine è in basso a sinistra.




    sabato 3 dicembre 2022 16:22

Tutte le risposte

  • Ciao molokko,

    Puoi inserire il codie in "Code block". Ho modificato un po' la domanda.


    Microsoft offre questo servizio gratuitamente, per aiutare gli utenti e aumentare il database dei prodotti e delle tecnologie. Il contenuto fornito “as is“ non comporta alcuna responsabilità da parte dell’azienda.

    martedì 29 novembre 2022 12:55
    Moderatore
  • Salve a tutti. Usando un oggetto Image mi sono imbattuto nel problema di stabilire l'origine del disegno che è normalmente impostato in alto a sinistra. ho bisogno di portarlo in basso a sinistra come nei normali assi cartesiani.

    l'istanza si apre con il seguente codice:

                    
     using (DrawingContext drwo = drw.RenderOpen())
    e per disegnare:
    
       drwo.DrawLine(gh1, jh, hj);
    
    dove gh1 è il pennello e jh e hj sono le coordinate
    
    poi si effettua l'operazione di rendering:
    
                    bmp.Render(drw);
    
                }
                            
                
                immagine.Source = bmp;
    dove bmp è definito come:
    
    RenderTargetBitmap bmp = new RenderTargetBitmap(577, 577, 10, 10, PixelFormats.Pbgra32);

    E' possibile ottenere il risultato ponendo nell'ordinata y il valore Image.Height-y. Penso che ci sarà un modo migliore:

    La mia domanda è come ottenere il ViewPort nell'origine.

    ringrazio in anticipo per l'eventuale risposta





    • Modificato molokko martedì 29 novembre 2022 16:17
    martedì 29 novembre 2022 16:16
  • Ciao, secondo me dovresti fare una trasformazione degli assi, per porre l'origine in basso a sinistra, e invertire l'asse Y, una cosa di questo tipo:

    Canvas myCanvas = new Canvas();
    myCanvas.Width = 300;
    myCanvas.Height = 300;            
    myCanvas.Background = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#005588"));
                
    //inverte l'asse Y e fissa la nuova origine che così viene in basso a sinistra:
    myCanvas.LayoutTransform = new ScaleTransform(1,-1, 0, 0);
    MyGrid.Children.Add(myCanvas);
    
    DrawingVisual drw = new DrawingVisual();            
    DrawingContext drwo = drw.RenderOpen();
                
    //disegna una linea bianca di spessore 2 nel context del DrawingVisual:
    Pen myPen = new Pen(new SolidColorBrush(Color.FromArgb(255,255,255,255)), 2);
    drwo.DrawLine(myPen,new Point(0,0),new Point(300,300));                        
    drwo.Close();

    Funziona perfettamente (l'ho provato). Tracciando una linea, l'origine è in basso a sinistra.




    sabato 3 dicembre 2022 16:22