コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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");
            }
        }
コード例 #4
0
        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);
        }
コード例 #5
0
 //Verifica se a area da figura pode ser contida
 private bool ValidarAreaFiguras(DXFItem figura)
 {
     if (figura.Area > PlacaGravacao.Area)
     {
         return(false);
     }
     else
     {
         return(true);
     }
 }
コード例 #6
0
 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();
 }
コード例 #7
0
 //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;
 }
コード例 #8
0
        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);
        }
コード例 #9
0
 public ItemOrganizado(DXFItem figura)
 {
     Figura = new DXFItem(figura);
 }
コード例 #10
0
        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);
        }