Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Milena Adão

Print Graphics

Recommended Posts

Boa tarde!!

Desenvolvi um sistema em C# (WINDOWS FORMS) que cria alguns desenho em graphics de acordo com algumas medidas enviadas pelo usuário. Neste mesmo sistema o usuário tem a opção de imprimir a imagem em escala real ou em tamanho A4 e esta escala real muitas vezes é maior que uma folha A4 e precisa ser impressa em mais de uma folha, mas não estou conseguindo fazer isso, está imprimindo apenas a primeira folha. Preciso de algo parecido com o paint, que imprime em várias paginas, alguém me ajuda??

egue meu código:

private void button3_Click(object sender, EventArgs e)
{
//Documento que será impresso
printDialog1.Document = printDocument1;
//Se clicar no botão print
if( printDialog1.ShowDialog()==DialogResult.OK )
{
//Imprimimi o que está no documento. Esse documento será preenchido na função PrintDocument1_PrintPage.
printDocument1.Print();
}

#region desenhar
QuadradoRedondo quadred = new QuadradoRedondo();
quadrado_redondo quadrado_redondo = new quadrado_redondo();
Titulo tituilo = new Titulo();
quadred.Controls.Clear();
cgomo_real cv = new cgomo_real();
Graphics graphics = this.CreateGraphics();
graphics.Clear(Color.Black);
double R, x, altura, altura_peca, espessura, rzao, espaco, maior, dif, dif_prox2, xx, yy, reta_ab, reta_aa, reta_b4;
string text;
int divisoes;
//dados de entrada
R = double.Parse(txtrzao.Text);//dado digitado pelo usuario
xx = double.Parse(txtx.Text);//dado digitado pelo usuario
yy = double.Parse(txty.Text);//dado digitado pelo usuario
altura_peca = double.Parse(txtaltura.Text);//dado digitado pelo usuario
espessura = double.Parse(txt_espessura.Text);//dado digitado pelo usuario
divisoes = int.Parse(combodivisoes.Text);
//fim
double[] alturas = new double[divisoes + 1];
//calcular alturas
alturas = quadrado_redondo.Calculo_Alturas(R, xx, yy, altura_peca, espessura, divisoes);
//fim
double z = yy - (R / 2);
reta_b4 = Math.Sqrt((altura_peca * altura_peca) + (z * z));
reta_aa = yy - (espessura * 2);
reta_ab = (xx - (espessura * 2));
double espacototal = 2 * Math.PI * ((R / 2) - espessura);
if (espacototal < 0) { espacototal = espacototal * -1; }
espacototal = Math.Round(espacototal, 2);
espaco = espacototal / 12;
espaco = Math.Round(espaco, 2);
label6.Text = espaco.ToString();
rzao = R / 2;
x = 250;
//calcular maior altura
maior = cv.Calcular_Maior(alturas, divisoes * 2);
//fim
//desenho inicio
e.Graphics.PageUnit = GraphicsUnit.Millimeter;
// quadrado_redondo.Desenho(e.Graphics, alturas, alturas, espacototal, divisoes, maior, espacototal, "1:1", yy, R, xx, altura_peca, espessura);
#region desenho
x=0;
double esp = 0, diag, x1, x2, y1, y2, diag2, x12, x22, y12, y22;
espaco = espacototal / (divisoes);
espaco = Math.Round(espaco, 2);
Pen Azul = new Pen(Color.LightBlue, Convert.ToInt32(0.5));
Pen Amarelo = new Pen(Color.Yellow, Convert.ToInt32(0.5));
Pen Branco = new Pen(Color.Black, Convert.ToInt32(0.5));
Pen vermelho = new Pen(Color.Red, Convert.ToInt32(0.5));
Pen verde = new Pen(Color.Green, Convert.ToInt32(0.5));
string myText;
PointF pointF7 = new PointF();
SolidBrush solidBrushAzul = new SolidBrush(Color.LightBlue);
SolidBrush solidBrushAmarelo = new SolidBrush(Color.Yellow);
SolidBrush solidBrushBranxo = new SolidBrush(Color.White);
SolidBrush solidBrushvermelho = new SolidBrush(Color.Red);
FontFamily fontFamily = new FontFamily("Arial");
PointF pointF = new PointF();
Font font = new Font(fontFamily, 10, FontStyle.Regular, GraphicsUnit.Point);
StringFormat stringFormat = new StringFormat();
stringFormat.FormatFlags = StringFormatFlags.DirectionVertical;
StringFormat stringFormat2 = new StringFormat();
stringFormat2.FormatFlags = StringFormatFlags.DirectionRightToLeft;
#region Retas
double reta_ab_desenho =quadrado_redondo.Retas("ab", yy, R, xx, altura_peca, espessura), diag3, x123, y123, x223, y223;
double reta_aa_desenho = quadrado_redondo.Retas("aa", yy, R, xx, altura_peca, espessura);
z = (xx - R);
double reta_b4_desenho = quadrado_redondo.Retas("b4", yy, R, xx, altura_peca, espessura);
maior = maior + 15;
Azul = new Pen(Color.Black, Convert.ToInt16(0.5));
Amarelo = new Pen(Color.Black, Convert.ToInt16(0.5));
Branco = new Pen(Color.Black, Convert.ToInt16(0.5));
vermelho = new Pen(Color.Black, Convert.ToInt16(0.5));
verde = new Pen(Color.Black, Convert.ToInt16(0.5));
solidBrushAzul = new SolidBrush(Color.Black);
solidBrushAmarelo = new SolidBrush(Color.Black);
solidBrushBranxo = new SolidBrush(Color.Black);
x = 2;
#endregion
for (int a = 0; a <= divisoes; a++)
{
x1 = (x + reta_ab_desenho + (reta_aa_desenho / 2) - esp);
x2 = (x + reta_ab_desenho);
y1 = maior;
y2 = maior - alturas[a];
diag = (Math.Pow(x1 - x2, 2) - Math.Pow(y1 - y2, 2));
if (diag < 0)
{
diag = diag * -1;
}
diag = Math.Sqrt(diag);
diag = Math.Round(diag);
dif = diag - alturas[a];
dif = maior - (alturas[a] + dif);
if (a != divisoes)
{
e.Graphics.DrawLine(Branco, Convert.ToInt32(x + reta_ab_desenho), Convert.ToInt32((maior)), Convert.ToInt32(x + reta_ab_desenho + (reta_aa_desenho / 2) - esp), Convert.ToInt32((dif)));//linhas vesticais
e.Graphics.DrawLine(Branco, Convert.ToInt32(x + reta_ab_desenho + reta_aa_desenho), Convert.ToInt32(maior), Convert.ToInt32(x + reta_ab_desenho + (reta_aa_desenho / 2) + esp), Convert.ToInt32(dif));//linhas vesticais
}
else
{ e.Graphics.DrawLine(Branco, Convert.ToInt32((x + reta_ab_desenho + (reta_aa_desenho / 2) - esp)), Convert.ToInt32((dif)), Convert.ToInt32(x + reta_ab_desenho), Convert.ToInt32((maior)));//linhas vesticais
e.Graphics.DrawLine(Branco, Convert.ToInt32((x + reta_ab_desenho + (reta_aa_desenho / 2) + esp)), Convert.ToInt32((dif)), Convert.ToInt32(x + reta_ab_desenho + reta_aa_desenho), Convert.ToInt32((maior)));//linhas vesticais
}
pointF7 = new PointF(Convert.ToInt32(x + reta_ab_desenho + (reta_aa_desenho / 2) + esp), Convert.ToInt32(dif - 12));
e.Graphics.DrawLine(verde, Convert.ToInt32((x + reta_ab_desenho + (reta_aa_desenho / 2) + esp)), Convert.ToInt32((dif)), Convert.ToInt32((x + reta_ab_desenho + (reta_aa_desenho / 2) + esp)), Convert.ToInt32(dif - 10));//linhas vesticais
pointF7 = new PointF(Convert.ToInt32(x + reta_ab_desenho + (reta_aa_desenho / 2) - esp), Convert.ToInt32(dif - 12));
e.Graphics.DrawLine(verde, Convert.ToInt32((x + reta_ab_desenho + (reta_aa_desenho / 2) - esp)), Convert.ToInt32((dif)), Convert.ToInt32((x + reta_ab_desenho + (reta_aa_desenho / 2) - esp)), Convert.ToInt32(dif - 10));//linhas vesticais
esp += espaco;
}
}
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, isso parece simples mas é extremamente complexo, você vai ter que pegar as medidas das folhas que você precisa imprimir e dividir o seu desenho entre elas, então você pode correr o eixo X dividindo pelo tamanho máximo da folha. Mas tenha em mente que você vai precisar imaginar isso como um mapa, onde uma folha vai imprimir de pixel X a pixel Y.

 

http://stackoverflow.com/questions/1113123/using-c-sharp-to-print-large-images-over-mulitple-pages

http://stackoverflow.com/questions/6198937/printing-graphics-on-multiple-pages-using-system-drawing-printing-based-on-the

Compartilhar este post


Link para o post
Compartilhar em outros sites

KhaosDoctor,

 

Eu teria então que desenhar na folha 1, por exemplo, as coordenadas que cabem na folha e nos demais a continuação das linhas seguindo a mesma lógica?

Porém, eu tenho apenas os pontos(x,y) do início e final da rela, e muitas vezes esta fica na diagonal. Não sei como faço para conseguir os pontos(x,y) finais que cabem na folha, e os pontos (x,y) da continuação desta rela na próxima pagina. Segue um link com exemplo de um dos tipos de desenhos que o sistema retorna.

 

http://janunes.blogspot.com.br/p/transicao-quadrado-para-redondo.html

(Chapa desenvolvida pelo programa)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Siga o primeiro link (http://stackoverflow.com/questions/1113123/using-c-sharp-to-print-large-images-over-mulitple-pages) ele tem dicas de como dividir imagens entre multiplas telas, não imagine como sendo várias coordenadas, mas tente visualizar como uma imagem completa.

 

Outra opção seria você salvar a imagem no computador da pessoa e usar o printDialog para imprimir o arquivo salvo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.