Pular para o conteúdo principal

Alterando a cor da borda de uma imagem no AutoCAD usando .NET

Trabalho muitas vezes com documentos com padrão de penas baseados em cor. A cor branca é usada para linhas muito grossas. Em imagens com o Raster sempre que colocava uma imagem tinha que modificar a cor do contorno (borda) da imagem para vermelho que é a pena mais fina de impressão.

Um desenho com ortofotos pode possuir mais de 10 imagens de Raster sobrepostas e sempre tinha que modificar uma a uma a cor da borda.

Pensando nisso busquei alguns códigos exemplo de como modificar a cor da borda da imagem de maneira sistemática para facilitar essa modificação.

Existe uma função previamente pronta chamada DrawableOverrule, a encontrei em um post do suporte da Autodesk.

Esse é o código em C#:

using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.GraphicsInterface;
using Autodesk.AutoCAD.Runtime;

namespace RasterImage_Functions

{
    public class RasterImageDisplayOverrule : DrawableOverrule
    {
        public short Color { get; set; }

        public override void ViewportDraw(Drawable d, ViewportDraw vd)
        {
            vd.SubEntityTraits.Color = Color;
            base.ViewportDraw(d, vd);
        }
    }

    public class Commands
    {
        // Variável compartilhada para armazenar nossa instância Overrule
        private static RasterImageDisplayOverrule _orule;

        [CommandMethod("RasterImage_ModificarCordaBorda")]
        public static void RasterImage_ModificarCordaBorda()
        {
            var doc = Application.DocumentManager.MdiActiveDocument;
            if (doc == null)
                return;
            var db = doc.Database;
            var ed = doc.Editor;

            //Selecionar o indice da cor a ser utilizada.
            var pio = new PromptIntegerOptions("");
            pio.SetMessageAndKeywords(
              "\n Informe índice de cores para bordas da imagem [None]:",
              "None"
            );
            var pir = ed.GetInteger(pio);

            // Sinalizador para determinar se deve regenerarerar o modelo 
            //(para atualizar a cor, se não selecionar cor nenhuma permanece como está)
            bool regenerar = false;

            if (pir.Status == PromptStatus.Keyword)
            {
                if (_orule != null)
                {
                    //Remover overrule
                    Overrule.RemoveOverrule(
                      RXObject.GetClass(typeof(RasterImage)), _orule
                    );
                    _orule.Dispose();
                    _orule = null;

                    // Agora que foi atualizado e reescriuta a cor
                    //podemos fazer um regenerar na tela.
                    regenerar = true;
                }
            }
            else if (pir.Status == PromptStatus.OK)
            {
                // Inicializa e tenta sobreescrver a cor por uma primeira vez
                if (_orule == null)
                {
                    // habilitando a sobreeescrita no desenho
                    _orule = new RasterImageDisplayOverrule();
                    Overrule.AddOverrule(
                      RXObject.GetClass(typeof(RasterImage)), _orule, false
                    );
                    Overrule.Overruling = true;
                }

                // Se a cor mudou então atualiza a tela.
                regenerar = _orule.Color != (short)pir.Value;
                if (regenerar)
                {
                    _orule.Color = (short)pir.Value;
                }
            }

            // Atualiza a tela.
            if (regenerar)
            {
                doc.Editor.Regen();
            }
        }
    }

}


A substituição é simples porque a borda é a única parte da entidade da imagem rasterizada que se preocupa com a configuração de cores assim foi possível fazer uma reescrita em cima da cor default.

Veja como o comando é executado:


Projeto em Visual Studio 2019: Download

Comentários

Postagens mais visitadas deste blog

Numeração Automática no AutoCAD

Sem dúvida esse é uma ferramenta única que fazia falta a tempos e foi introduzida recentemente no AutoCAD, na última década… Em 2013 tinha feito um programa para criar uma bolinhas de numeração automática usando o conceito de Leader eu fazia um controle dos números dos itens na mão mesmo, depois de um tempo resolvi fazer um menuzinho para controlar o conteúdo do número dos bullets, hoje isso não é mais necessário, existe um comando no próprio AutoCAD para isso e faz parte das Ferramentas Expressas do AutoCAD. Gosto de compartilhar ferramentas e dicas que tendem a ser menos conhecidas ou subutilizadas, mas ainda podem fornecer um impulso para sua produtividade e fluxo de trabalho e que eu mesmo me surpreendi quando as encontrei Hoje, quero apresentar outra ferramenta, a numeração automática. Como o nome indica, o comando Numeração automática permite que você adicione automaticamente um número às etiquetas ou texto em um desenho. Vou mostrar como a numeração automática pode ser usada par...

Alterar a cor de fundo do AutoCAD

Eu sou um adepto do fundo preto, tudo que eu posso mudo a cor do fundo para preto. Nas ultimas versões do AutoCAD tenho notado que não é mais o padrão o fundo preto absoluto, é um cinza escuro. As vezes gosto também de mudar a cor do Layout de branco para preto afinal de contas quando trabalhamos com penas e contraste no model space preto, ver um desenho no layout é impossível.  Você pode mudar sua cor de fundo do AutoCAD para a cor que quiser. Definindo cores personalizadas Primeiro, vá para o menu Opções (botão Aplicativo> Opções), selecione a guia Exibição e clique no botão Cores. Agora você deve ver a caixa de diálogo Cores da janela de desenho: Agora você pode atualizar as cores de qualquer elemento da interface. Isso incluí o plano de fundo em qualquer contexto (selecione Model e Layout). Você pode escolher qualquer uma das predefinições, ou você pode escolher a partir de todo o espectro (basta escolher a opção Selecionar Cor ...). Se você não gost...

Operando com Imagens Georreferenciadas no AutoCAD - Ortofotos

A coisa mais desagradável para quem trabalha com documentos em DWG com ortofotos ( fotos aéreas georreferenciadas) é quando se recebe o documento e a ortofoto não é carregada. Uma linha de transmissão onde a plotagem da estruturas é feita em um documento combinado de planta e perfil. Na área da planta é feito pela topografia um serviço de recorte e renderização das imagens em formato de ortofoto na região do desenho. Como a linha de transmissão a projeção é feita sempre linear na planta observando os vértices uma mesma ortofoto pode ser representada várias vezes numa mesma folha em um enjanelamento diferente. Tratamento de Ortofotos no AutoCAD - EXTERNALREFERENCES As ortofotos no AutoCAD são tratadas como referências a objetos externos. Isso é bom porque cada ortofoto pode ter de poucos kb até Gb de tamanho. Se for parte integrante do DWG poderia deixa-lo grande de mais para ser manipulado. Cada projeção no documento funciona como uma imagem projetada em um...