Uns tempos atrás, um cliente solicitou essa propriedade nos tubos do SOLIDOS, aquele programa bom pra caramba, heheheh
Na época adicionei uma propriedade nas caixas que salvava o valor da geratriz superior do tubo de saída, usando a ferramenta "Obter Propriedade". Depois, no tubo em questão, usamos a mesma ferramenta para obter do PV de jusante este valor e então calcular:
DeltaGeratriz = EndInvertElevation - StartInvertElevation_tubo_saida
Ilustrando, seria algo assim:

Esta propriedade é importante, pois alguns órgãos públicos não aceitam que os tubos cheguem com elevação da geratriz superior, abaixo da geratriz superior do tubo de saída.
A implicação direta disso é que, como a rede deve funcionar à gravidade, com lâmina máxima a 80% ( por exemplo ), temos de garantir que esta situação não aconteça. Enfim. O caso é, como calcular?
No exemplo dado no início, foi bastante simples, mas implica em editar todas as caixas do catálogo, além de todos os tubos do catálogo... Baita trabalhão....
Nas não se desespere!!!
Lembra que uns tempos atrás, disponibilizei uma API para o SOLIDOS?
Pois bem, Nela, temos uma função chamada GetNodeParam (no Dynamo e no Visual Lisp, usamos SolidosGetNodeParam)
Agora, observe este fluxo:

Explicando:
- Iniciamos DeltaGeratriz = Double.NaN (não é um número)
- Usamos "Obter Propriedade" para calcular "OutPart":

- "OutPart" é o ID do PV de jusante do tubo
- Agora, usando a mesma ferramenta, obtemos a lista de dispositivos conectados ao PV de jusante (a variável ConnectedDevices):

- qtd é quantidade de itens da lista, fazendo:

- Agora, inicializamos um contador chamado "n" para iterarmos no looping (
desculpa aí PartBuilder!!!):

- Agora no "IF", colocamos a cláusula "n < qtd":

- Agora, obtemos o "enésimo" ID de tubo conectado (a variável "devId"):

- Agora, devemos nos certificar que é este o tubo que queremos processar, para isso obtemos o ID do PV de montante do enésimo tubo conectado:

- Observe a expressão:
GetNodeParam(devId, "InPart", Nothing, Nothing)
- GetNodeParam é uma função da API para o SOLIDOS. Sim, dá pra usar a API dentro do modelador também, mas fala baixo, não espalha!!!!

- Para o caso de termos encontrado o tubo correto, ou seja, o tubo que sai do PV de jusante do tubo em questão, basta obter a elevação da geratriz interna superior (StartInvertElevation, que será atribuída à variável "devStartInvert"):

- Agora, é só calcular a propriedade "DeltaGeratriz", fazendo: DeltaGeratriz = EndInvertElevation - devStartInvert

- Para o caso de não ser o tubo correto, incrementamos o contador e refazemos os passos:

Muito simples, não é mesmo? Acompanha cada caixinha do fluxograma e você entenderá o algoritmo sendo executado
O próximo passo, é replicar isso em todas as famílias de tubos que você criou. Para isso, basta usar um COPY/PASTE maroto!!!:

Depois, abre outro modelador qualquer e cola no local apropriado:

Obviamente, ao colar, você tem de observar se colou no local certo. Pois este fluxo pode depender de outras coisas. Exemplo: este fluxo especificamente, depende da elevação da geratriz superior de jusante (EndInvertElevation) já ter sido calculado. Isso ocorre dentro do fluxo "Processar Degrau". Por isso, "Calcula DeltaGeratriz" tem de vir depois de "Processa Degrau".
Aliás, você já viu o fluxo "Processa Degrau"? É bem interessante!!!, Saca só:

Não vou entrar em detalhes sobre ele. Em linhas gerais, ele calcula "EndPoint" caso o usuário altere:
- EndInvertElevation - Geratriz superior interna de jusante
- EndElevation - Geratriz inferior interna de jusante
- Degrau - diferença entre EndElevation e SumpElevation do PV de jusante
- MidElev - elevação do ponto médio do tubo
- EndCover - Cobrimento na saída do tubo
- ProfCD - diferença de elevação entre a superfície de referência e a elevação do degrau
Na ajuda, eu chamo essas dependências de propriedades de "propriedades redundantes". Vale a pena conferir!!!