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#:
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
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
Postar um comentário