private void OrganizarFiguras(List <DXFItem> figuras) { Bitmap bitmapOcupacao = PlacaGravacao.GetBitmap(); foreach (var figura in figuras) { int x = 0, y = 0; if (EncontrarPosicaoFiguraNoPlano(figura, out x, out y, bitmapOcupacao)) { log.Enqueue("Alocado a figura " + figura.nome + " na posicao X: " + x.ToString() + " e Y: " + y.ToString()); //Adiciona o item na lista de itens organizado ItemOrganizado item = new ItemOrganizado(figura); item.X = x + espacamentoX; item.Y = y + espacamentoY; item.FiguraPosicionada = true; itemOrganizados.Add(item); //Ocupa a area do bitmap PreencherAreaPosicionamento(item, ref bitmapOcupacao); } else { log.Enqueue("Nao foi possivel encontrar espaco para alocar a figura " + figura.nome); } } }
private void ReposicionarFiguraGeometrica(List <ItemOrganizado> itemOrganizados) { figurasPosicionadas = new DXFItem(); figurasPosicionadas.entities = new netDxf.Collections.EntityCollection(); figurasPosicionadas.entities.AddRange(PlacaGravacao.entities); foreach (var item in itemOrganizados) { ItemOrganizado itemPosicionar = item; DXFItem itemPosicionado = AtualizarPosicaoEntidades(itemPosicionar); figurasPosicionadas.entities.AddRange(itemPosicionado.entities); sucessoOrganizador = true; } figurasPosicionadas.AtualizarInformacoes(); }
private void PreencherAreaPosicionamento(ItemOrganizado item, ref Bitmap bitmapOcupacao) { int largura = (int)item.Figura.Largura; int altura = (int)item.Figura.Altura; for (int x = item.X; x < item.X + largura; x++) { for (int y = item.Y; y < item.Y + altura; y++) { bitmapOcupacao.SetPixel(x, (int)PlacaGravacao.Altura - y - 1, Color.Red); } } }
private DXFItem AtualizarPosicaoEntidades(ItemOrganizado item) { DXFItem figura = item.Figura; //Circulos List <Circle> circles = figura.entities.OfType <Circle>().ToList(); foreach (var circle in circles) { figura.entities.Remove(circle); Circle circleAtualizado = new Circle( new Vector2(circle.Center.X + item.X - figura.Origem[0], circle.Center.Y + item.Y - figura.Origem[1]), //Centro circle.Radius); //Raio figura.entities.Add(circleAtualizado); } //Linhas List <Line> lines = figura.entities.OfType <Line>().ToList(); foreach (var line in lines) { figura.entities.Remove(line); Line linha = new Line( new Vector2(line.StartPoint.X + item.X - figura.Origem[0], line.StartPoint.Y + item.Y - figura.Origem[1]), //Start new Vector2(line.EndPoint.X + item.X - figura.Origem[0], line.EndPoint.Y + item.Y - figura.Origem[1]) //End ); figura.entities.Add(linha); } //Elipses List <Ellipse> ellipses = figura.entities.OfType <Ellipse>().ToList(); foreach (var ellipse in ellipses) { figura.entities.Remove(ellipse); Ellipse ellipseAtualizado = new Ellipse( new Vector2(ellipse.Center.X + item.X, ellipse.Center.Y + item.Y), ellipse.MajorAxis, ellipse.MinorAxis ); figura.entities.Add(ellipseAtualizado); } //LwPolilinhas List <LwPolyline> lwPolylines = figura.entities.OfType <LwPolyline>().ToList(); foreach (var lwPolyline in lwPolylines) { figura.entities.Remove(lwPolyline); LwPolyline polyline = new LwPolyline(); foreach (var vertex in lwPolyline.Vertexes) { polyline.Vertexes.Add(new LwPolylineVertex(new Vector2(vertex.Position.X + item.X, vertex.Position.Y + item.Y), vertex.Bulge)); } figura.entities.Add(polyline); } //Arcos(entities.OfType<Arc>()); List <Arc> arcs = figura.entities.OfType <Arc>().ToList(); foreach (var arc in arcs) { figura.entities.Remove(arc); Arc arco = new Arc(new Vector2(arc.Center.X + item.X, arc.Center.X + item.X), arc.Radius, arc.StartAngle, arc.EndAngle); figura.entities.Add(arco); } return(figura); }