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 gosta ai

Trabalhando mais rápido utilizando Express Tools

Se você não está usando o AutoCAD Express Tools, está perdendo tempo. O Express Tools é uma coleção de pequenas ferramentas de aprimoramento de produtividade que são instaladas com o AutoCAD. Eles são criadas usando as APIs do AutoCAD, como o AutoLISP, e, portanto, não estão disponíveis no AutoCAD LT também (aquela versão baratinha do AutoCAD). Aqui algumas possibilidades do Express Tools Nossa jornada começa com a barra de menus do estilo antigo. Ative-o com o comando MENUBAR e no estado 1. Clique em Express no lado direito e ele será expandido para mostrar mais de 10 categorias de ferramentas. Ainda fui mais longe e nos submenus consegui contar mais de 60 outros comandos. Ferramentas para blocos Existe dentro do Express Tools ferramentas específicas para blocos. vamos a algumas: Copy Nernest Objects - com essa ferramente você pode copiar objetos de dentro de um bloco para fora sem precisar explodir o bloco. Export Atribute Information - Você pode ain