Civil 3D API fail

Ora pois!!! Não sei por que, mas me apareceu um desenho com plano de sondagens onde o camarada insistia em querer o KM, ou estaca, do furo.

Bem, pensei, simples, enfia um Reference text no label do ponto fazendo referencia ao alinhamento e formata a mesma….

É… queria que fosse simples assim… Olhando o label style dos pontos, não há opção de reference text:

Bom, então vamos pro User-Defined Property Classifications e criamos uma propriedade para armazenar o valor do KM então:

Sim, fica até bacana no properties:

Tudo bem que é uma propriedade estática, que não irá se atualizar sozinha…

Em fim, pensei: escrevo meia duzia de linhas em LISP mesmo e coloco esse valor nos pontos, afinal são centenas de pontos e eu não quero ter de digitar um por um….

É aí que a vaca vai pro brejo. A API do Civil 3D tem a função necessária para isso, mas ela simplesmente não funciona!!!!

O método em questão é “SetUserDefinedPropertyValue”, que aparece no help do Civil 3D, aqui

Pensei, vai ver eu tô comendo bola e tentando usar o método de maneira errada…
Procurei e achei um post no forum da autodesk… leiam

A título de curiosidade, o programa em DOTNET seria assim:


Imports Autodesk.Civil.DatabaseServices
Imports Autodesk.AutoCAD.EditorInput
Imports Autodesk.AutoCAD.DatabaseServices
Imports Autodesk.AutoCAD.ApplicationServices
Imports Autodesk.AutoCAD.Runtime
Imports Autodesk.Civil.Land.DatabaseServices
Imports Autodesk.AECC.Interop.Land
Imports Autodesk.Civil.Land.Settings


Public Class Class1
Function ED() As Editor
Return Application.DocumentManager.MdiActiveDocument.Editor
End Function

Function TR() As Transaction
Return Application.DocumentManager.MdiActiveDocument.TransactionManager.StartTransaction
End Function

<commandmethod ("taoffpt") >
Public Sub StaOffPt()
Dim ss As PromptSelectionResult = ED.GetSelection(
New SelectionFilter({New TypedValue(0, "AECC_COGO_POINT")}))
If ss.Status <> PromptStatus.OK Then Exit Sub

Dim peo As New PromptEntityOptions(vbLf & "Selecione o alinhamento")
peo.SetRejectMessage(vbLf & "Somente alinhamento")
peo.AddAllowedClass(GetType(Alignment), True)

Dim per As PromptEntityResult = ED.GetEntity(peo)
If per.Status <> PromptStatus.OK Then Exit Sub

With TR()
Dim alin As Alignment = per.ObjectId.GetObject(OpenMode.ForRead)


Try
For Each ptid As ObjectId In ss.Value.GetObjectIds
Dim pt As PointEntity = ptid.GetObject(OpenMode.ForWrite)
Dim sta, offset As Double
Try
alin.StationOffset(pt.Location.X, pt.Location.Y, sta, offset)
Dim acadpt As IAeccPoint = pt.AcadObject

acadpt.SetUserDefinedPropertyValue("KM", sta)
acadpt.SetUserDefinedPropertyValue("OFFSET",
Math.Abs(offset))
acadpt.SetUserDefinedPropertyValue("LADO",
If(offset > 0, "L.D.", If(offset < 0, "L.E.", "EIXO")))
Catch
ED.WriteMessage(vbLf & Err.Description)
End Try
Next
Catch

End Try
.Commit()
End With
End Sub
End Class
</commandmethod>

Em fim…. Resultado, fiquei 3 horas digitando o KM em cada ponto…. Antes que você me pergunte, eu usei os pontos do civil só para poder criar as tabelas de pontos com suas coordenadas e o bendito KM…. Algo como:

Depois de pronto, cheguei a conclusão que teria sido mais produtivo usar blocos com atributos e programar a obtenção do KM e a geração da tabela. Que tal o desafio? Alguém se habilita?

7 comentários em “Civil 3D API fail”

  1. Eu tenho feito para trabalhos idênticos com o "Station Offset to Points",
    que faz a listagem dos pontos com o PK e o OffSet, crio a listagem no Excel e junto depois as outras colunas com as coordenadas.

    Não será feito por um método directo mas também não dá assim tanto trabalho.

    E o trabalho é o mesmo para fazer 3 pontos ou 3000 pontos.

  2. Neyton, com o comando "ReportPointsStaOffset" (Toolbox – Points – Station Offet to Points) não terias resolvido o problema de uma forma quase que directa?

    Eu tenho resolvido alguns problemas desta forma (embora precise de fazer uma passagem pelo Excel) e desta forma fazer o quadro para 3 pontos ou 3000 dará o mesmo trabalho.

    Sérgio Gil

  3. Na ferramenta Import Points é possível editar o point file format e adicionar uma coluna especifica para os argumentos customizados, bastava ter escrito o código para extrair esse argumentos do desenho em um arquivo de texto, e depois inseri-lo normalmente (importando o arquivo de texto). O erro da API foi no 2013?

Deixe um comentário

Carrinho de compras
Rolar para cima