2009-02-17 6 views
2

Fondamentalement, ce que j'essaie de faire est de faciliter mon travail de dessin.Equivalent .Net pour ScaleHeight et Scalewidth

À l'époque de VB6, il y avait quelque chose qui s'appelait Scalewidth et Scaleheight et je pouvais les mettre à des valeurs personnalisées. Ex. 100.

Ensuite, quand je devais dessiner un point au centre de l'espace disponible, je le dessinais à 50,50.

Y a-t-il un moyen, dans .Net, d'obtenir des fonctionnalités similaires?

Donc, quelle que soit la taille de la toile de dessin que je reçois, je peux dessiner dessus en utilisant des coordonnées absolues.

Répondre

1

Je ne sais pas s'il y a un moyen d'y parvenir dans .NET, mais vous pouvez facilement mettre en œuvre vous-même:

// Unscaled coordinates = x, y; canvas size = w, h; 
// Scaled coordinates = sx, sy; Scalewidth, Scaleheight = sw, sh; 
x = (sx/sw) * w; 
y = (sy/sh) * h; 

// Or the other way round 
sx = (x/w) * sw; 
sy = (y/h) * sh; 
+0

C'est ce que j'ai fait. –

0

Schnaader avait la bonne idée ... En fin de compte, je mis en œuvre quatre fonctions pour faire ce. Les fonctions sont inférieures

private float cnvX(double x) 
{ 
    return (float)((Width/100.00) * x); 
} 

private float rcnvX(double x) 
{ 
    return (float)(x/Width) * 100; 
} 

private float rcnvY(double y) 
{ 
    return (float)((y/Height) * 100); 
} 

private float cnvY(double y) 
{ 
    return (float)((Height/100.00) * y); 
} 
1

D'abord, pourquoi ne pas utiliser Graphics.ScaleTransform au lieu de manipuler tous les vous-même mise à l'échelle? Quelque chose comme:

e.Graphics.ScaleTransform( 
    100.0/this.ClientSize.Width, 
    100.0/this.ClientSize.Height); 

Votre code se terminera beaucoup plus clair, et je parierais une bière ce serait un peu plus rapide. Deuxièmement, si vous respectez vos fonctions cnvX/rcnvX, veillez à utiliser this.ClientSize.Width (et la même chose pour la hauteur) au lieu de "this.Width".

+0

Merci slimCode, je vais étudier cela aujourd'hui. Probablement c'est ce que je cherchais plus tôt. –