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:
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?
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?
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?
ResponderExcluirEu tenho feito para trabalhos idênticos com o "Station Offset to Points",
Excluirque 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.
É verdade... me ocorreu isso DEPOIS de ter feito a edição na mão... ainda consegui aproveitar a idéia em menos de 10% do trabalho, hehehehe
ResponderExcluirI pay а quіck νisit evегy day a fеw
ResponderExcluirblogs and sitеs to гeаd articles οr гevіews, hοwеѵeг thiѕ blog
provіdes feature baѕed articles.
Here is my webpage network
Neyton, com o comando "ReportPointsStaOffset" (Toolbox - Points - Station Offet to Points) não terias resolvido o problema de uma forma quase que directa?
ResponderExcluirEu 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
Sim, resolve a parte do station offset.
ResponderExcluirMas é que eu queria usar as tabelas automatizadas do civil em função do point group.
De qualquer forma, fica a sua dica, obrigado!!!
Excellеnt post. I absоlutеly loѵe thiѕ site.
ResponderExcluirThankѕ!
Also see my web site - Referencement Gratuit