Em projetos com muitas infraestruturas enterradas, cada vista de perfil deve mostrar as tubagens e estruturas que cruzam ou acompanham o seu alinhamento. Fazê-lo à mão com Draw Parts in Profile View obriga a selecionar as peças uma a uma, folha após folha, e é fácil esquecer alguma. Um pequeno plugin .NET faz o trabalho em segundos.
É esta a abordagem por trás de um comando que desenvolvi para o trabalho de produção diário. Segue-se uma versão simplificada que pode adaptar.
O método-chave da API
Na API .NET do Civil 3D, os objetos Pipe e Structure expõem o método AddToProfileView(ObjectId profileViewId). O resto é apenas encontrar as peças certas e chamá-lo.
Um comando mínimo
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Runtime;
using Autodesk.Civil.ApplicationServices;
using Autodesk.Civil.DatabaseServices;
public class ProfileCommands
{
[CommandMethod("ADDPIPEPROFILE")]
public void AddPipesToProfileView()
{
Document doc = Application.DocumentManager.MdiActiveDocument;
Editor ed = doc.Editor;
CivilDocument civDoc = CivilApplication.ActiveDocument;
var peo = new PromptEntityOptions("\nSelecione uma vista de perfil: ");
peo.SetRejectMessage("\nO objeto tem de ser uma vista de perfil.");
peo.AddAllowedClass(typeof(ProfileView), true);
PromptEntityResult per = ed.GetEntity(peo);
if (per.Status != PromptStatus.OK) return;
int count = 0;
using (Transaction tr = doc.TransactionManager.StartTransaction())
{
foreach (ObjectId netId in civDoc.GetPipeNetworkIds())
{
var net = (Network)tr.GetObject(netId, OpenMode.ForRead);
foreach (ObjectId pipeId in net.GetPipeIds())
{
var pipe = (Pipe)tr.GetObject(pipeId, OpenMode.ForWrite);
pipe.AddToProfileView(per.ObjectId);
count++;
}
foreach (ObjectId strId in net.GetStructureIds())
{
var str = (Structure)tr.GetObject(strId, OpenMode.ForWrite);
str.AddToProfileView(per.ObjectId);
count++;
}
}
tr.Commit();
}
ed.WriteMessage($"\n{count} peça(s) adicionada(s) à vista de perfil.");
}
}
Prepará-lo para produção
O exemplo adiciona todas as peças de todas as redes, o que raramente é o pretendido. Uma ferramenta real deve incluir alguns filtros:
- Distância ao alinhamento: obtenha o alinhamento da vista de perfil e use
Alignment.StationOffset()para manter apenas as peças dentro de uma distância definida e do intervalo de quilometragem da vista. - Escolha das redes: deixe o utilizador escolher as redes a incluir (doméstica, pluvial, abastecimento de água).
- Ignorar peças já representadas para evitar duplicados quando o comando é executado duas vezes.
- Redes sob pressão: trate também as tubagens, acessórios e equipamentos sob pressão, pois os cruzamentos de infraestruturas são igualmente importantes. Consulte a referência da API para a sua versão do Civil 3D.
- Modo em lote: percorra todas as vistas de perfil do desenho para um verdadeiro resultado com um clique.
Implementação
Compile com as bibliotecas do Civil 3D e do AutoCAD da sua versão (AcMgd, AcDbMgd, AcCoreMgd, AeccDbMgd), defina Copy Local como false e carregue a DLL com NETLOAD. Para distribuir pela equipa, um bundle autoloader (PackageContents.xml na pasta ApplicationPlugins) carrega o plugin automaticamente no arranque.
Algumas linhas de C# podem poupar horas em cada projeto de infraestruturas. Comece pequeno e depois acrescente os filtros de que o seu fluxo de trabalho precisa.
