public List <DXFItem> OrganizarCustomizado(List <DXFItem> figurasGeometricas) { List <DXFItem> listResultado = new List <DXFItem>(); DXFItem[] ordenacao = new DXFItem[figurasGeometricas.Count]; double[] vetorOrdem = new double[figurasGeometricas.Count]; for (int i = 0; i < figurasGeometricas.Count; i++) { vetorOrdem[i] = figurasGeometricas[i].Ordem; } vetorOrdem = InsertionSort(vetorOrdem); foreach (var ordem in vetorOrdem) { foreach (var figura in figurasGeometricas) { if (figura.Ordem == ordem) { listResultado.Add(figura); figurasGeometricas.Remove(figura); break; } } } return(listResultado); }
public List <DXFItem> OrganizarPorLargura(List <DXFItem> figurasGeometricas) { List <DXFItem> listResultado = new List <DXFItem>(); DXFItem[] ordenacao = new DXFItem[figurasGeometricas.Count]; double[] vetor = new double[figurasGeometricas.Count]; for (int i = 0; i < figurasGeometricas.Count; i++) { vetor[i] = figurasGeometricas[i].Largura; } vetor = InsertionSort(vetor); foreach (var largura in vetor) { foreach (var figura in figurasGeometricas) { if (figura.Largura == largura) { listResultado.Add(figura); figurasGeometricas.Remove(figura); break; } } } return(listResultado); }
public void IniciarOrganizador(DXFItem placaGravacao, List <DXFItem> figurasGeometricas) { progressoAlgoritmo = 0; sucessoOrganizador = false; itemOrganizados.Clear(); this.PlacaGravacao = placaGravacao; this.FigurasGeometricas = figurasGeometricas; //Atualiza o plano de gravacao para o tamanho original PlacaGravacao.GerarBitmap(1, 0, 0, (int)PlacaGravacao.Largura, (int)PlacaGravacao.Altura, Color.Black, Color.White, true); //Atualiza o progresso progressoAlgoritmo++; //Remove figuras com area maior que a area do plano de gravacao figurasGeometricas = RemoverFigurasAreaExcedente(figurasGeometricas); //Atualiza o progresso progressoAlgoritmo++; //Caso nao tenha sobrado figuras, interrompe a execucao do algoritmo if (figurasGeometricas.Count == 0) { log.Enqueue("Nao sobrou figura geometrica para organizar"); //Atualiza o progresso progressoAlgoritmo = 4; return; } //Executa o algoritmo de organizacao das figuras geometricas dentro do plano OrganizarFiguras(figurasGeometricas); //Atualiza o progresso progressoAlgoritmo++; //Cria a posiciona cada entidade dentro do plano geometrico ReposicionarFiguraGeometrica(itemOrganizados); //Atualiza o progresso progressoAlgoritmo++; if (itemOrganizados.Count <= 0) { log.Enqueue("Finalizado a organizacao sem sucesso em nenhuma figura"); } else if (sucessoOrganizador) { log.Enqueue("Organizador concluido com sucesso"); } else { log.Enqueue("Organizador concluido sem sucesso"); } }
public static void Exportar(string path, DXFItem item) { DxfDocument dxf = new DxfDocument(); foreach (var c in item.entities.OfType <EntityObject>()) { dxf.AddEntity((EntityObject)c.Clone()); } dxf.Save(path); }
//Verifica se a area da figura pode ser contida private bool ValidarAreaFiguras(DXFItem figura) { if (figura.Area > PlacaGravacao.Area) { return(false); } else { return(true); } }
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(); }
//Clonar objeto public DXFItem(DXFItem item) { this.figuraFechada = item.figuraFechada; this.id = item.id; this.bitmap = item.bitmap; this.desenhador = item.desenhador; this.Altura = item.Altura; this.Largura = item.Largura; this.Area = item.Area; this.menorX = item.menorX; this.menorY = item.menorY; this.maiorX = item.maiorX; this.maiorY = item.maiorY; this.Origem = item.Origem; this.docFigura = item.docFigura; this.path = item.path; this.nome = item.nome; this.entities = new EntityCollection(); this.entities.AddRange(item.entities); this.Ordem = item.Ordem; }
private bool EncontrarPosicaoFiguraNoPlano(DXFItem figura, out int PosX, out int PosY, Bitmap bitmapPlano) { PosX = 0; PosY = 0; for (int x = 0; x < PlacaGravacao.Largura; x++) { for (int y = 0; y < PlacaGravacao.Altura; y++) { if (bitmapPlano.GetPixel(x, (int)PlacaGravacao.Altura - y - 1).B == 255) { if (AnalisarPixel(x, y, bitmapPlano, figura.Largura + espacamentoX, figura.Altura + espacamentoY)) { PosX = x; PosY = y; return(true); } } } } return(false); }
public ItemOrganizado(DXFItem figura) { Figura = new DXFItem(figura); }
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); }