{"id":525,"date":"2013-07-05T10:27:31","date_gmt":"2013-07-05T10:27:31","guid":{"rendered":"https:\/\/blogs.autodesk.com\/autodesk-infrabrasil\/2013\/07\/05\/numerando-curvas-de-bordo-via-api\/"},"modified":"2016-05-20T12:01:33","modified_gmt":"2016-05-20T15:01:33","slug":"numerando-curvas-de-bordo-via-api","status":"publish","type":"post","link":"https:\/\/blogs.autodesk.com\/mundoaec\/numerando-curvas-de-bordo-via-api\/","title":{"rendered":"Numerando Curvas de Bordo via API"},"content":{"rendered":"<p>Por <strong>Augusto Gon\u00e7alves<\/strong>, <a href=\"http:\/\/www.autodesk.com\/joinadn\" target=\"_blank\">Autodesk Developer Network<\/a><\/p>\n<p>Neste post irei mostrar como numerar as curvas de bordo de um alinhamento utilizando VB.NET. \u00c9 necess\u00e1rio ter completado o exemplo do <a href=\"https:\/\/blogs.autodesk.com\/autodesk-infrabrasil\/comeando-com-apis-civil-3d\/\">post anterior<\/a>.<\/p>\n<p>O objetivo geral \u00e9, em um dado alinhamento, por exemplo em verde na figura abaixo, localizar as curvas de bordo e escrever um texto indicativo numerado, por exemplo, \u201cCurva = 1\u201d.<\/p>\n<p><a href=\"http:\/\/civil3dbr.typepad.com\/.a\/6a01538e6fd9d0970b0192abe202d9970d-pi\"><img loading=\"lazy\" decoding=\"async\" style=\"padding-top: 0px;padding-left: 0px;padding-right: 0px;border-width: 0px\" title=\"resultado_final\" src=\"http:\/\/civil3dbr.typepad.com\/.a\/6a01538e6fd9d0970b0192abe202e3970d-pi\" alt=\"resultado_final\" width=\"244\" height=\"229\" border=\"0\" \/><\/a><\/p>\n<p>Para numerar as curvas, \u00e9 necess\u00e1rio descobrir a ordem. Sempre que trabalhamos com programa\u00e7\u00e3o, temos que elaborar uma regra inequ\u00edvoca para determinar a quais curvas ser\u00e3o consideradas e a ordem.<\/p>\n<p>Ent\u00e3o algumas regras deve ser adotadas: deve existir um Alinhamento do Civil 3D como refer\u00eancia, as curvas de bordo devem ser do tipo Arco do AutoCAD, e estes arcos devem estar at\u00e9 uma dist\u00e2ncia m\u00e1xima do alinhamento. Estas regras definem quais arcos ser\u00e3o considerados.<\/p>\n<p>Para determinar a ordem iremos determinar qual a estaca mais pr\u00f3xima do centro do arco que representa a curva de bordo (ver figura abaixo). Esta ordem deve ser definida no sentido de crescimento das estacas. Desta maneira, independente do lado, a numera\u00e7\u00e3o dos arcos ser\u00e1 definida pela estaca onde o centro do arco est\u00e1 projetado.<\/p>\n<p><a href=\"http:\/\/civil3dbr.typepad.com\/.a\/6a01538e6fd9d0970b01901e22da13970b-pi\"><img loading=\"lazy\" decoding=\"async\" style=\"padding-top: 0px;padding-left: 0px;padding-right: 0px;border-width: 0px\" title=\"visao_geral_curvas\" src=\"http:\/\/civil3dbr.typepad.com\/.a\/6a01538e6fd9d0970b01910418def2970c-pi\" alt=\"visao_geral_curvas\" width=\"378\" height=\"246\" border=\"0\" \/><\/a><\/p>\n<p>Dica: embora possam parecer \u00f3bvias, as regras que ser\u00e3o implementadas em programa\u00e7\u00e3o devem ser o mais especificas poss\u00edveis. Regras fracas levam a rotinas que podem falhar (produzir resultados inesperados).<\/p>\n<p><strong><span style=\"text-decoration: underline\">Preparando para o c\u00f3digo!<\/span><\/strong><\/p>\n<p>Partindo do projeto do post anterior, inicie o Visual Basic 2010 Express, abra o projeto <strong>ProjetoCivil3DBR<\/strong>. Na janela de <em>Solution Explorer<\/em>, clique com o bot\u00e3o direto no projeto e escolha <em>Add,<\/em> em seguida a op\u00e7\u00e3o <em>Class<\/em>. No formul\u00e1rio que se abrir\u00e1, digite o nome da classe, neste exemplo <strong>CurvasBordo<\/strong>.<\/p>\n<p><a href=\"http:\/\/civil3dbr.typepad.com\/.a\/6a01538e6fd9d0970b01901e22da26970b-pi\"><img loading=\"lazy\" decoding=\"async\" style=\"padding-top: 0px;padding-left: 0px;padding-right: 0px;border-width: 0px\" title=\"menu_add_class\" src=\"http:\/\/civil3dbr.typepad.com\/.a\/6a01538e6fd9d0970b0192abe202ff970d-pi\" alt=\"menu_add_class\" width=\"479\" height=\"261\" border=\"0\" \/><\/a><\/p>\n<p><a href=\"http:\/\/civil3dbr.typepad.com\/.a\/6a01538e6fd9d0970b01910418df06970c-pi\"><img loading=\"lazy\" decoding=\"async\" style=\"padding-top: 0px;padding-left: 0px;padding-right: 0px;border-width: 0px\" title=\"classe_curvas_bordo\" src=\"http:\/\/civil3dbr.typepad.com\/.a\/6a01538e6fd9d0970b01901e22da48970b-pi\" alt=\"classe_curvas_bordo\" width=\"480\" height=\"272\" border=\"0\" \/><\/a><\/p>\n<p>Na pr\u00e1tica n\u00e3o \u00e9 necess\u00e1rio criar uma classe para cada novo comando, mas iremos adotar esta abordagem para facilitar a organiza\u00e7\u00e3o. A nova classe ser\u00e1 criada em um novo arquivo .vb do projeto.<\/p>\n<p><strong><span style=\"text-decoration: underline\">API de busca e ordena\u00e7\u00e3o<\/span><\/strong><\/p>\n<p>Na pr\u00e1tica vamos sempre assumir que uma lista de qualquer coisa estar\u00e1 fora da ordem desejada. Para este exemplo, temos que selecionar todos os arcos, filtrar pelos que est\u00e3o at\u00e9 uma determinada dist\u00e2ncia m\u00e1xima do alinhamento, e orden\u00e1-los pela estaca.<\/p>\n<p>A API do Civil 3D n\u00e3o incluir m\u00e9todos para filtros muito espec\u00edficos ou ordena\u00e7\u00e3o, mas por se tratar de uma API .NET, podemos utilizar recursos nativos da plataforma VB.NET. E isto vale para (praticamente) todos as maravilhas do .NET! Espetacular!<\/p>\n<p>Para filtro e ordena\u00e7\u00e3o, dentre outros, temos uma API do .NET chamada LINQ (<a href=\"http:\/\/msdn.microsoft.com\/library\/vstudio\/bb397926.aspx\" target=\"_blank\">Language-Integrated Query<\/a>), que existe desde a vers\u00e3o 3.5 e \u00e9 extremamente \u00fatil. Vale a pena estudar um pouco.<\/p>\n<p><strong>Nota<\/strong>: Civil 3D 2012, 2013 e 2014 usam .NET 4.0.<\/p>\n<p><strong><span style=\"text-decoration: underline\">Hora do c\u00f3digo!<\/span><\/strong><\/p>\n<p>Como no exemplo anterior, todas a linhas de c\u00f3digo que come\u00e7am com \u2018 (aspas simples) s\u00e3o coment\u00e1rios e ficam verde no Visual Basic 2010 Express. Utilizamos coment\u00e1rios para explicar o que um conjunto de linhas de c\u00f3digo ir\u00e1 executar. N\u00e3o \u00e9 necess\u00e1rio, ou pr\u00e1tico, comentar todas a linhas de c\u00f3digo, apenas o que for necess\u00e1rio.<\/p>\n<p>O c\u00f3digo abaixo come\u00e7a de maneira similar ao c\u00f3digo do post anterior, com <em>CommandMethod. <\/em>Esta marca\u00e7\u00e3o (atributo em .NET) define o nome do comando no AutoCAD Civil 3D. Ou seja, sempre que digitarmos <strong>N<\/strong>UMERAR<strong>C<\/strong>URVA<strong>B<\/strong>ORDO na linha de comando, iremos executar a rotina deste comando.<\/p>\n<p>Este comando requer que o usu\u00e1rio selecione um alinhamento e digite uma dist\u00e2ncia. Temos que garantir que isso ocorra, caso contr\u00e1rio o comando n\u00e3o pode prosseguir. Observe o <em>Exit Sub<\/em> quando o resultado da sele\u00e7\u00e3o n\u00e3o \u00e9 OK (o c\u00f3digo &lt;&gt; significa diferente).<\/p>\n<p>Em seguida selecionamos todos os arcos do <em>model space<\/em>. Estes arcos ser\u00e3o filtrados pela distancia m\u00e1xima e ordenados pelo estaca, resultando na cole\u00e7\u00e3o <em>curvasBordoFiltrada<\/em>. Esta cole\u00e7\u00e3o ser\u00e1 utilizada para a cria\u00e7\u00e3o dos textos indicativos (similares ao <em>label<\/em>).<\/p>\n<p>Agora copie o c\u00f3digo abaixo, cole no arquivo <span style=\"text-decoration: underline\">CurvaBordo.vb<\/span> aberto no Visual Basic 2010 Express. O resultado deve ser como na imagem abaixo. Retire eventuais linhas em branco.<\/p>\n<p><a href=\"http:\/\/civil3dbr.typepad.com\/.a\/6a01538e6fd9d0970b0192abe20320970d-pi\"><img loading=\"lazy\" decoding=\"async\" style=\"padding-top: 0px;padding-left: 0px;padding-right: 0px;border-width: 0px\" title=\"vs_codigo_curva_bordo\" src=\"http:\/\/civil3dbr.typepad.com\/.a\/6a01538e6fd9d0970b0192abe20332970d-pi\" alt=\"vs_codigo_curva_bordo\" width=\"494\" height=\"435\" border=\"0\" \/><\/a><\/p>\n<div style=\"background: white\">\n<p style=\"margin: 0px\"><span style=\"color: #0000ff\"><span style=\"font-size: 8pt\">Imports<\/span><\/span><span style=\"font-size: 8pt;color: #000000\"> Autodesk.AutoCAD.Runtime<\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"color: #0000ff\"><span style=\"font-size: 8pt\">Imports<\/span><\/span><span style=\"font-size: 8pt;color: #000000\"> Autodesk.AutoCAD.EditorInput<\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"color: #0000ff\"><span style=\"font-size: 8pt\">Imports<\/span><\/span><span style=\"font-size: 8pt;color: #000000\"> Autodesk.AutoCAD.DatabaseServices<\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"color: #0000ff\"><span style=\"font-size: 8pt\">Imports<\/span><\/span><span style=\"font-size: 8pt;color: #000000\"> Autodesk.AutoCAD.Geometry<\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"color: #0000ff\"><span style=\"font-size: 8pt\">Imports<\/span><\/span><span style=\"font-size: 8pt;color: #000000\"> Autodesk.AutoCAD.ApplicationServices<\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"font-size: 8pt;color: #000000\">\u00a0<\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"color: #0000ff\"><span style=\"font-size: 8pt\">Imports<\/span><\/span><span style=\"font-size: 8pt;color: #000000\"> Autodesk.Civil.DatabaseServices<\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"font-size: 8pt;color: #000000\">\u00a0<\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"color: #0000ff\"><span style=\"font-size: 8pt\">Public<\/span><\/span><span style=\"font-size: 8pt\"> <span style=\"color: #0000ff\">Class<\/span> <\/span><span style=\"font-size: 8pt;color: #2b91af\">CurvasBordo<\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"color: #000000\"><span style=\"font-size: 8pt\">\u00a0 &lt;<\/span><\/span><span style=\"font-size: 8pt\"><span style=\"color: #2b91af\">CommandMethod<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #a31515\">&#8220;numerarCurvaBordo&#8221;<\/span><span style=\"color: #000000\">)&gt; _<\/span><\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"color: #000000\"><span style=\"font-size: 8pt\">\u00a0 <\/span><\/span><span style=\"font-size: 8pt\"><span style=\"color: #0000ff\">Public<\/span> <span style=\"color: #0000ff\">Sub<\/span><span style=\"color: #000000\"> CmdNumerarCurvaBordo()<\/span><\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"color: #000000\"><span style=\"font-size: 8pt\">\u00a0\u00a0\u00a0 <\/span><\/span><span style=\"font-size: 8pt;color: #008000\">&#8216; acessar o editor do AutoCAD<\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"color: #000000\"><span style=\"font-size: 8pt\">\u00a0\u00a0\u00a0 <\/span><\/span><span style=\"font-size: 8pt;color: #008000\">&#8216; atrav\u00e9s deste objeto podemos selecionar<\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"color: #000000\"><span style=\"font-size: 8pt\">\u00a0\u00a0\u00a0 <\/span><\/span><span style=\"font-size: 8pt;color: #008000\">&#8216; entidade na tela<\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"color: #000000\"><span style=\"font-size: 8pt\">\u00a0\u00a0\u00a0 <\/span><\/span><span style=\"font-size: 8pt\"><span style=\"color: #0000ff\">Dim<\/span><span style=\"color: #000000\"> ed <\/span><span style=\"color: #0000ff\">As<\/span> <span style=\"color: #2b91af\">Editor<\/span><span style=\"color: #000000\"> = <\/span><span style=\"color: #2b91af\">Application<\/span><span style=\"color: #000000\">.DocumentManager.<\/span><\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"font-size: 8pt;color: #000000\">\u00a0\u00a0\u00a0\u00a0\u00a0 MdiActiveDocument.Editor<\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"font-size: 8pt;color: #000000\">\u00a0<\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"color: #000000\"><span style=\"font-size: 8pt\">\u00a0\u00a0\u00a0 <\/span><\/span><span style=\"font-size: 8pt;color: #008000\">&#8216; selecionar o alinhamento<\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"color: #000000\"><span style=\"font-size: 8pt\">\u00a0\u00a0\u00a0 <\/span><\/span><span style=\"font-size: 8pt;color: #008000\">&#8216; o m\u00e9todo AddAllowedClass garante que apenas alinhamentos<\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"color: #000000\"><span style=\"font-size: 8pt\">\u00a0\u00a0\u00a0 <\/span><\/span><span style=\"font-size: 8pt;color: #008000\">&#8216; poder\u00e3o ser selecionados pelo usu\u00e1rio<\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"color: #000000\"><span style=\"font-size: 8pt\">\u00a0\u00a0\u00a0 <\/span><\/span><span style=\"font-size: 8pt\"><span style=\"color: #0000ff\">Dim<\/span><span style=\"color: #000000\"> opSelAlinhamento <\/span><span style=\"color: #0000ff\">As<\/span> <span style=\"color: #0000ff\">New<\/span> <span style=\"color: #2b91af\">PromptEntityOptions<\/span><span style=\"color: #000000\">(<\/span><\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"color: #000000\"><span style=\"font-size: 8pt\">\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><\/span><span style=\"font-size: 8pt\"><span style=\"color: #a31515\">&#8220;Selecione o alinhamento: &#8220;<\/span><span style=\"color: #000000\">)<\/span><\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"color: #000000\"><span style=\"font-size: 8pt\">\u00a0\u00a0\u00a0 opSelAlinhamento.SetRejectMessage(<\/span><\/span><span style=\"font-size: 8pt\"><span style=\"color: #a31515\">&#8220;Apenas alinhamento&#8221;<\/span><span style=\"color: #000000\">)<\/span><\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"color: #000000\"><span style=\"font-size: 8pt\">\u00a0\u00a0\u00a0 opSelAlinhamento.AddAllowedClass(<\/span><\/span><span style=\"font-size: 8pt\"><span style=\"color: #0000ff\">GetType<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #2b91af\">Alignment<\/span><span style=\"color: #000000\">), <\/span><span style=\"color: #0000ff\">True<\/span><span style=\"color: #000000\">)<\/span><\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"color: #000000\"><span style=\"font-size: 8pt\">\u00a0\u00a0\u00a0 <\/span><\/span><span style=\"font-size: 8pt\"><span style=\"color: #0000ff\">Dim<\/span><span style=\"color: #000000\"> resSelAlinhamento <\/span><span style=\"color: #0000ff\">As<\/span> <span style=\"color: #2b91af\">PromptEntityResult<\/span><span style=\"color: #000000\"> =<\/span><\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"font-size: 8pt;color: #000000\">\u00a0\u00a0\u00a0\u00a0\u00a0 ed.GetEntity(opSelAlinhamento)<\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"color: #000000\"><span style=\"font-size: 8pt\">\u00a0\u00a0\u00a0 <\/span><\/span><span style=\"font-size: 8pt\"><span style=\"color: #0000ff\">If<\/span><span style=\"color: #000000\"> (resSelAlinhamento.Status &lt;&gt; <\/span><span style=\"color: #2b91af\">PromptStatus<\/span><span style=\"color: #000000\">.OK) <\/span><span style=\"color: #0000ff\">Then<\/span> <\/span><span style=\"font-size: 8pt;color: #0000ff\">Exit Sub<\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"color: #000000\"><span style=\"font-size: 8pt\">\u00a0\u00a0\u00a0 <\/span><\/span><span style=\"font-size: 8pt\"><span style=\"color: #0000ff\">Dim<\/span><span style=\"color: #000000\"> idAlinhamento <\/span><span style=\"color: #0000ff\">As<\/span> <span style=\"color: #2b91af\">ObjectId<\/span><span style=\"color: #000000\"> = resSelAlinhamento.ObjectId<\/span><\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"font-size: 8pt;color: #000000\">\u00a0<\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"color: #000000\"><span style=\"font-size: 8pt\">\u00a0\u00a0\u00a0 <\/span><\/span><span style=\"font-size: 8pt;color: #008000\">&#8216; distancia m\u00e1xima para centro do circulo<\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"color: #000000\"><span style=\"font-size: 8pt\">\u00a0\u00a0\u00a0 <\/span><\/span><span style=\"font-size: 8pt\"><span style=\"color: #0000ff\">Dim<\/span><span style=\"color: #000000\"> opSelDistancia <\/span><span style=\"color: #0000ff\">As<\/span> <span style=\"color: #0000ff\">New<\/span> <span style=\"color: #2b91af\">PromptDistanceOptions<\/span><span style=\"color: #000000\">(<\/span><\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"color: #000000\"><span style=\"font-size: 8pt\">\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><\/span><span style=\"font-size: 8pt\"><span style=\"color: #a31515\">&#8220;Distancia m\u00e1xima das curvas (centro): &#8220;<\/span><span style=\"color: #000000\">)<\/span><\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"color: #000000\"><span style=\"font-size: 8pt\">\u00a0\u00a0\u00a0 opSelDistancia.AllowZero = <\/span><\/span><span style=\"font-size: 8pt;color: #0000ff\">False<\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"color: #000000\"><span style=\"font-size: 8pt\">\u00a0\u00a0\u00a0 <\/span><\/span><span style=\"font-size: 8pt\"><span style=\"color: #0000ff\">Dim<\/span><span style=\"color: #000000\"> resSelDistancia <\/span><span style=\"color: #0000ff\">As<\/span> <span style=\"color: #2b91af\">PromptDoubleResult<\/span><span style=\"color: #000000\"> =<\/span><\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"font-size: 8pt;color: #000000\">\u00a0\u00a0\u00a0\u00a0\u00a0 ed.GetDistance(opSelDistancia)<\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"color: #000000\"><span style=\"font-size: 8pt\">\u00a0\u00a0\u00a0 <\/span><\/span><span style=\"font-size: 8pt\"><span style=\"color: #0000ff\">If<\/span><span style=\"color: #000000\"> (resSelDistancia.Status &lt;&gt; <\/span><span style=\"color: #2b91af\">PromptStatus<\/span><span style=\"color: #000000\">.OK) <\/span><span style=\"color: #0000ff\">Then<\/span> <\/span><span style=\"font-size: 8pt;color: #0000ff\">Exit Sub<\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"color: #000000\"><span style=\"font-size: 8pt\">\u00a0\u00a0\u00a0 <\/span><\/span><span style=\"font-size: 8pt\"><span style=\"color: #0000ff\">Dim<\/span><span style=\"color: #000000\"> distanciaMax <\/span><span style=\"color: #0000ff\">As<\/span> <span style=\"color: #0000ff\">Double<\/span><span style=\"color: #000000\"> = resSelDistancia.Value<\/span><\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"font-size: 8pt;color: #000000\">\u00a0<\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"color: #000000\"><span style=\"font-size: 8pt\">\u00a0\u00a0\u00a0 <\/span><\/span><span style=\"font-size: 8pt\"><span style=\"color: #0000ff\">Dim<\/span><span style=\"color: #000000\"> db <\/span><span style=\"color: #0000ff\">As<\/span> <span style=\"color: #2b91af\">Database<\/span><span style=\"color: #000000\"> = <\/span><span style=\"color: #2b91af\">Application<\/span><span style=\"color: #000000\">.DocumentManager.<\/span><\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"font-size: 8pt;color: #000000\">\u00a0\u00a0\u00a0\u00a0\u00a0 MdiActiveDocument.Database<\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"color: #000000\"><span style=\"font-size: 8pt\">\u00a0\u00a0\u00a0 <\/span><\/span><span style=\"font-size: 8pt\"><span style=\"color: #0000ff\">Using<\/span><span style=\"color: #000000\"> trans <\/span><span style=\"color: #0000ff\">As<\/span> <span style=\"color: #2b91af\">Transaction<\/span><span style=\"color: #000000\"> =<\/span><\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"font-size: 8pt;color: #000000\">\u00a0\u00a0\u00a0\u00a0\u00a0 db.TransactionManager.StartTransaction<\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"font-size: 8pt;color: #000000\">\u00a0<\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"color: #000000\"><span style=\"font-size: 8pt\">\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><\/span><span style=\"font-size: 8pt;color: #008000\">&#8216; abrir o alinhamento<\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"color: #000000\"><span style=\"font-size: 8pt\">\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><\/span><span style=\"font-size: 8pt\"><span style=\"color: #0000ff\">Dim<\/span><span style=\"color: #000000\"> alinhamento <\/span><span style=\"color: #0000ff\">As<\/span> <span style=\"color: #2b91af\">Alignment<\/span><span style=\"color: #000000\"> = trans.GetObject(<\/span><\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"color: #000000\"><span style=\"font-size: 8pt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 idAlinhamento, <\/span><\/span><span style=\"font-size: 8pt\"><span style=\"color: #2b91af\">OpenMode<\/span><span style=\"color: #000000\">.ForRead)<\/span><\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"font-size: 8pt;color: #000000\">\u00a0<\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"color: #000000\"><span style=\"font-size: 8pt\">\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><\/span><span style=\"font-size: 8pt;color: #008000\">&#8216; abrir o model space<\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"color: #000000\"><span style=\"font-size: 8pt\">\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><\/span><span style=\"font-size: 8pt\"><span style=\"color: #0000ff\">Dim<\/span><span style=\"color: #000000\"> mSpace <\/span><span style=\"color: #0000ff\">As<\/span> <span style=\"color: #2b91af\">BlockTableRecord<\/span><span style=\"color: #000000\"> = trans.GetObject(<\/span><\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"color: #000000\"><span style=\"font-size: 8pt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 alinhamento.OwnerId, <\/span><\/span><span style=\"font-size: 8pt\"><span style=\"color: #2b91af\">OpenMode<\/span><span style=\"color: #000000\">.ForWrite)<\/span><\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"font-size: 8pt;color: #000000\">\u00a0<\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"color: #000000\"><span style=\"font-size: 8pt\">\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><\/span><span style=\"font-size: 8pt;color: #008000\">&#8216; criar uma lista de arcos<\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"color: #000000\"><span style=\"font-size: 8pt\">\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><\/span><span style=\"font-size: 8pt\"><span style=\"color: #0000ff\">Dim<\/span><span style=\"color: #000000\"> curvasBordo <\/span><span style=\"color: #0000ff\">As<\/span> <span style=\"color: #0000ff\">New<\/span> <\/span><span style=\"font-size: 8pt;color: #2b91af\">DBObjectCollection<\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"color: #000000\"><span style=\"font-size: 8pt\">\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><\/span><span style=\"font-size: 8pt;color: #008000\">&#8216; percorrer o model space buscando por curvas de bordo<\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"color: #000000\"><span style=\"font-size: 8pt\">\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><\/span><span style=\"font-size: 8pt\"><span style=\"color: #0000ff\">For<\/span> <span style=\"color: #0000ff\">Each<\/span><span style=\"color: #000000\"> idEntidade <\/span><span style=\"color: #0000ff\">As<\/span> <span style=\"color: #2b91af\">ObjectId<\/span> <span style=\"color: #0000ff\">In<\/span><span style=\"color: #000000\"> mSpace<\/span><\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"color: #000000\"><span style=\"font-size: 8pt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><\/span><span style=\"font-size: 8pt;color: #008000\">&#8216; abrir cada entidade do model space e tentar <\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"color: #000000\"><span style=\"font-size: 8pt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><\/span><span style=\"font-size: 8pt;color: #008000\">&#8216; converter para Arc, se a convers\u00e3o acontecer,<\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"color: #000000\"><span style=\"font-size: 8pt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><\/span><span style=\"font-size: 8pt;color: #008000\">&#8216; ent\u00e3o temos um arco e adicionamos a lista,<\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"color: #000000\"><span style=\"font-size: 8pt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><\/span><span style=\"font-size: 8pt;color: #008000\">&#8216; se n\u00e3o, vamos para a pr\u00f3xima entidade<\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"color: #000000\"><span style=\"font-size: 8pt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><\/span><span style=\"font-size: 8pt\"><span style=\"color: #0000ff\">Dim<\/span><span style=\"color: #000000\"> curva <\/span><span style=\"color: #0000ff\">As<\/span> <span style=\"color: #2b91af\">Arc<\/span><span style=\"color: #000000\"> = <\/span><span style=\"color: #0000ff\">TryCast<\/span><span style=\"color: #000000\">(trans.GetObject(<\/span><\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"color: #000000\"><span style=\"font-size: 8pt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 idEntidade, <\/span><\/span><span style=\"font-size: 8pt\"><span style=\"color: #2b91af\">OpenMode<\/span><span style=\"color: #000000\">.ForRead), <\/span><span style=\"color: #2b91af\">Arc<\/span><span style=\"color: #000000\">)<\/span><\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"color: #000000\"><span style=\"font-size: 8pt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><\/span><span style=\"font-size: 8pt;color: #008000\">&#8216; se for vazio, ent\u00e3o pr\u00f3ximo item da lista<\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"color: #000000\"><span style=\"font-size: 8pt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><\/span><span style=\"font-size: 8pt\"><span style=\"color: #0000ff\">If<\/span><span style=\"color: #000000\"> (curva <\/span><span style=\"color: #0000ff\">Is<\/span> <span style=\"color: #0000ff\">Nothing<\/span><span style=\"color: #000000\">) <\/span><span style=\"color: #0000ff\">Then<\/span> <\/span><span style=\"font-size: 8pt;color: #0000ff\">Continue For<\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"font-size: 8pt;color: #000000\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 curvasBordo.Add(curva)<\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"color: #000000\"><span style=\"font-size: 8pt\">\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><\/span><span style=\"font-size: 8pt;color: #0000ff\">Next<\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"font-size: 8pt;color: #000000\">\u00a0<\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"color: #000000\"><span style=\"font-size: 8pt\">\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><\/span><span style=\"font-size: 8pt;color: #008000\">&#8216; usando LINQ para filtrar e ordenar os arcos<\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"color: #000000\"><span style=\"font-size: 8pt\">\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><\/span><span style=\"font-size: 8pt;color: #008000\">&#8216; obteremos o ponto no alinhamento mais pr\u00f3ximo do centro<\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"color: #000000\"><span style=\"font-size: 8pt\">\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><\/span><span style=\"font-size: 8pt;color: #008000\">&#8216; do arco em seguida iremos ordenar estes pontos, desta <\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"color: #000000\"><span style=\"font-size: 8pt\">\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><\/span><span style=\"font-size: 8pt;color: #008000\">&#8216; maneira os arcos estar\u00e3o ordenados pelo ponto mais<\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"color: #000000\"><span style=\"font-size: 8pt\">\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><\/span><span style=\"font-size: 8pt;color: #008000\">&#8216; proximo no alinhamento<\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"color: #000000\"><span style=\"font-size: 8pt\">\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><\/span><span style=\"font-size: 8pt\"><span style=\"color: #0000ff\">Dim<\/span><span style=\"color: #000000\"> curvasBordoFiltrada =<\/span><\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"color: #000000\"><span style=\"font-size: 8pt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><\/span><span style=\"font-size: 8pt\"><span style=\"color: #0000ff\">From<\/span><span style=\"color: #000000\"> arco <\/span><span style=\"color: #0000ff\">As<\/span> <span style=\"color: #2b91af\">Arc<\/span> <span style=\"color: #0000ff\">In<\/span><span style=\"color: #000000\"> curvasBordo<\/span><\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"color: #000000\"><span style=\"font-size: 8pt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><\/span><span style=\"font-size: 8pt\"><span style=\"color: #0000ff\">Where<\/span><span style=\"color: #000000\"> arco.Center.DistanceTo(<\/span><\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"font-size: 8pt;color: #000000\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 alinhamento.GetClosestPointTo(<\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"color: #000000\"><span style=\"font-size: 8pt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 arco.Center, <\/span><\/span><span style=\"font-size: 8pt\"><span style=\"color: #0000ff\">False<\/span><span style=\"color: #000000\">)) &lt; distanciaMax<\/span><\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"color: #000000\"><span style=\"font-size: 8pt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><\/span><span style=\"font-size: 8pt\"><span style=\"color: #0000ff\">Order<\/span> <span style=\"color: #0000ff\">By<\/span><span style=\"color: #000000\"> alinhamento.GetDistAtPoint(<\/span><\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"color: #000000\"><span style=\"font-size: 8pt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 alinhamento.GetClosestPointTo(arco.Center, <\/span><\/span><span style=\"font-size: 8pt\"><span style=\"color: #0000ff\">False<\/span><span style=\"color: #000000\">))<\/span><\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"font-size: 8pt;color: #000000\">\u00a0<\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"color: #000000\"><span style=\"font-size: 8pt\">\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><\/span><span style=\"font-size: 8pt;color: #008000\">&#8216; numerador que ser\u00e1 usado no texto<\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"color: #000000\"><span style=\"font-size: 8pt\">\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><\/span><span style=\"font-size: 8pt\"><span style=\"color: #0000ff\">Dim<\/span><span style=\"color: #000000\"> cont <\/span><span style=\"color: #0000ff\">As<\/span> <span style=\"color: #0000ff\">Integer<\/span><span style=\"color: #000000\"> = 1<\/span><\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"font-size: 8pt;color: #000000\">\u00a0<\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"color: #000000\"><span style=\"font-size: 8pt\">\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><\/span><span style=\"font-size: 8pt;color: #008000\">&#8216; escrever os textos nas curvas utilizando DBText<\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"color: #000000\"><span style=\"font-size: 8pt\">\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><\/span><span style=\"font-size: 8pt;color: #008000\">&#8216; os textos ser\u00e3o independentes do alinhamento<\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"color: #000000\"><span style=\"font-size: 8pt\">\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><\/span><span style=\"font-size: 8pt\"><span style=\"color: #0000ff\">For<\/span> <span style=\"color: #0000ff\">Each<\/span><span style=\"color: #000000\"> curva <\/span><span style=\"color: #0000ff\">As<\/span> <span style=\"color: #2b91af\">Arc<\/span> <span style=\"color: #0000ff\">In<\/span><span style=\"color: #000000\"> curvasBordoFiltrada<\/span><\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"color: #000000\"><span style=\"font-size: 8pt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><\/span><span style=\"font-size: 8pt;color: #008000\">&#8216; linha de refer\u00eancia entre os pontos inicial e<\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"color: #000000\"><span style=\"font-size: 8pt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><\/span><span style=\"font-size: 8pt;color: #008000\">&#8216; final do arco. Esta linha n\u00e3o ser\u00e1 desenhada no <\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"color: #000000\"><span style=\"font-size: 8pt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><\/span><span style=\"font-size: 8pt;color: #008000\">&#8216; Civil3D, apenas utilizada para encontrar o midpoint,<\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"color: #000000\"><span style=\"font-size: 8pt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><\/span><span style=\"font-size: 8pt;color: #008000\">&#8216; onde ser\u00e1 inserido o texto<\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"color: #000000\"><span style=\"font-size: 8pt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><\/span><span style=\"font-size: 8pt\"><span style=\"color: #0000ff\">Dim<\/span><span style=\"color: #000000\"> linhaRef <\/span><span style=\"color: #0000ff\">As<\/span> <span style=\"color: #0000ff\">New<\/span> <span style=\"color: #2b91af\">LineSegment3d<\/span><span style=\"color: #000000\">(<\/span><\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"font-size: 8pt;color: #000000\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 curva.StartPoint, curva.EndPoint)<\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"font-size: 8pt;color: #000000\">\u00a0<\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"color: #000000\"><span style=\"font-size: 8pt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><\/span><span style=\"font-size: 8pt\"><span style=\"color: #0000ff\">Dim<\/span><span style=\"color: #000000\"> labelCurva <\/span><span style=\"color: #0000ff\">As<\/span> <span style=\"color: #0000ff\">New<\/span> <\/span><span style=\"font-size: 8pt;color: #2b91af\">DBText<\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"font-size: 8pt;color: #000000\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 labelCurva.SetDatabaseDefaults()<\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"color: #000000\"><span style=\"font-size: 8pt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><\/span><span style=\"font-size: 8pt;color: #008000\">&#8216; especificar o texto<\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"color: #000000\"><span style=\"font-size: 8pt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 labelCurva.TextString = <\/span><\/span><span style=\"font-size: 8pt\"><span style=\"color: #0000ff\">String<\/span><span style=\"color: #000000\">.Format(<\/span><\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"color: #000000\"><span style=\"font-size: 8pt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><\/span><span style=\"font-size: 8pt\"><span style=\"color: #a31515\">&#8220;Curva = {0}&#8221;<\/span><span style=\"color: #000000\">, cont)<\/span><\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"color: #000000\"><span style=\"font-size: 8pt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><\/span><span style=\"font-size: 8pt;color: #008000\">&#8216; alinha pelo centro<\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"font-size: 8pt;color: #000000\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 labelCurva.HorizontalMode =<\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"color: #000000\"><span style=\"font-size: 8pt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><\/span><span style=\"font-size: 8pt\"><span style=\"color: #2b91af\">TextHorizontalMode<\/span><span style=\"color: #000000\">.TextCenter<\/span><\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"color: #000000\"><span style=\"font-size: 8pt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><\/span><span style=\"font-size: 8pt;color: #008000\">&#8216; alinhar pelo MidPoint<\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"font-size: 8pt;color: #000000\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 labelCurva.AlignmentPoint = linhaRef.MidPoint<\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"color: #000000\"><span style=\"font-size: 8pt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><\/span><span style=\"font-size: 8pt;color: #008000\">&#8216; rotacionar alinhado com os pontos do arco<\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"font-size: 8pt;color: #000000\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 labelCurva.Rotation = linhaRef.<\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"color: #000000\"><span style=\"font-size: 8pt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Direction.GetAngleTo(<\/span><\/span><span style=\"font-size: 8pt\"><span style=\"color: #2b91af\">Vector3d<\/span><span style=\"color: #000000\">.XAxis)<\/span><\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"font-size: 8pt;color: #000000\">\u00a0<\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"color: #000000\"><span style=\"font-size: 8pt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><\/span><span style=\"font-size: 8pt;color: #008000\">&#8216; adicionar ao model space<\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"font-size: 8pt;color: #000000\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 mSpace.AppendEntity(labelCurva)<\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"color: #000000\"><span style=\"font-size: 8pt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 trans.AddNewlyCreatedDBObject(labelCurva, <\/span><\/span><span style=\"font-size: 8pt\"><span style=\"color: #0000ff\">True<\/span><span style=\"color: #000000\">)<\/span><\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"font-size: 8pt;color: #000000\">\u00a0<\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"color: #000000\"><span style=\"font-size: 8pt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><\/span><span style=\"font-size: 8pt;color: #008000\">&#8216; incrementar o numerador<\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"font-size: 8pt;color: #000000\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 cont += 1<\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"color: #000000\"><span style=\"font-size: 8pt\">\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><\/span><span style=\"font-size: 8pt;color: #0000ff\">Next<\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"font-size: 8pt;color: #000000\">\u00a0<\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"color: #000000\"><span style=\"font-size: 8pt\">\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><\/span><span style=\"font-size: 8pt;color: #008000\">&#8216; este &#8216;commit&#8217; confirma que as altera\u00e7\u00f5es est\u00e3o<\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"color: #000000\"><span style=\"font-size: 8pt\">\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><\/span><span style=\"font-size: 8pt;color: #008000\">&#8216; ok e podem ser enviadas para a base de dados do C3D<\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"font-size: 8pt;color: #000000\">\u00a0\u00a0\u00a0\u00a0\u00a0 trans.Commit()<\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"color: #000000\"><span style=\"font-size: 8pt\">\u00a0\u00a0\u00a0 <\/span><\/span><span style=\"font-size: 8pt\"><span style=\"color: #0000ff\">End<\/span> <\/span><span style=\"font-size: 8pt;color: #0000ff\">Using<\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"color: #000000\"><span style=\"font-size: 8pt\">\u00a0 <\/span><\/span><span style=\"font-size: 8pt\"><span style=\"color: #0000ff\">End<\/span> <\/span><span style=\"font-size: 8pt;color: #0000ff\">Sub<\/span><\/p>\n<p style=\"margin: 0px\"><span style=\"color: #0000ff\"><span style=\"font-size: 8pt\">End<\/span><\/span> <span style=\"font-size: 8pt;color: #0000ff\">Class<\/span><\/p>\n<\/div>\n<p>Agora com o c\u00f3digo inserido no Visual Basic 2010 Express, v\u00e1 ao menu <em>Debug, <\/em>escolha a op\u00e7\u00e3o <em>Build ProjetoCivil3DBR, <\/em>da mesma forma que foi feito para o exemplo do primeiro post.<\/p>\n<p><a href=\"http:\/\/civil3dbr.typepad.com\/.a\/6a01538e6fd9d0970b01901e22da89970b-pi\"><img loading=\"lazy\" decoding=\"async\" style=\"padding-top: 0px;padding-left: 0px;padding-right: 0px;border-width: 0px\" title=\"build_DLL\" src=\"http:\/\/civil3dbr.typepad.com\/.a\/6a01538e6fd9d0970b0192abe20345970d-pi\" alt=\"build_DLL\" width=\"396\" height=\"102\" border=\"0\" \/><\/a><\/p>\n<p>Finalmente abra o Civil 3D, execute o comando NETLOAD, escolha a DLL na pasta <em>Release<\/em>. Assim como no exemplo do primeiro post, a DLL deve estar na pasta:<\/p>\n<p>\u2026\\ProjetoCivil3DBR\\ProjetoCivil3DBR\\bin\\Release\\<strong>ProjetoCivil3DBR.dll<\/strong><\/p>\n<p>O novo comando est\u00e1 pronto, execute <strong>N<\/strong>UMERAR<strong>C<\/strong>URVA<strong>B<\/strong>ORDO, selecione o alinhamento, especifique a distancia m\u00e1xima e pronto. O textos ser\u00e3o desenhados no projeto do Civil 3D.<\/p>\n<p>No pr\u00f3ximo post iremos incrementar este comando para desenhar uma tabela de curvas, com raio, comprimento, PC e PT.<\/p>\n<p>Sugest\u00f5es e coment\u00e1rios s\u00e3o bem vindos!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Por Augusto Gon\u00e7alves, <a href=\"http:\/\/www.autodesk.com\/joinadn\" target=\"_blank\">Autodesk Developer Network<\/a><\/p>\n<p>Neste post irei mostrar como numerar as curvas de bordo de um alinhamento utilizando VB.NET. \u00c9 necess\u00e1rio ter completado o exemplo do <a href=\"https:\/\/blogs.autodesk.com\/autodesk-infrabrasil\/comeando-com-apis-civil-3d\/\">post anterior<\/a>.<\/p>\n<p>O objetivo geral \u00e9, em um dado alinhamento, por exemplo em verde na figura abaixo,<\/p>\n","protected":false},"author":1431,"featured_media":1140,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1],"tags":[117,1152,207,105,993,1203,96,1200,141,1197,1206,1209],"class_list":["post-525","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-mundo-aec-autodesk","tag-3d","tag-api","tag-autocad","tag-autodesk","tag-basic","tag-bordo","tag-civil","tag-curvas","tag-de","tag-numerando","tag-via","tag-visual"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v21.3 (Yoast SEO v27.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Numerando Curvas de Bordo via API | Mundo AEC - Autodesk<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blogs.autodesk.com\/mundoaec\/numerando-curvas-de-bordo-via-api\/\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Pedro Soethe\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/blogs.autodesk.com\\\/mundoaec\\\/numerando-curvas-de-bordo-via-api\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.autodesk.com\\\/mundoaec\\\/numerando-curvas-de-bordo-via-api\\\/\"},\"author\":{\"name\":\"Pedro Soethe\",\"@id\":\"https:\\\/\\\/blogs.autodesk.com\\\/mundoaec\\\/#\\\/schema\\\/person\\\/3707a63eb2b5ba94534d68d7e1a65e9c\"},\"headline\":\"Numerando Curvas de Bordo via API\",\"datePublished\":\"2013-07-05T10:27:31+00:00\",\"dateModified\":\"2016-05-20T15:01:33+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/blogs.autodesk.com\\\/mundoaec\\\/numerando-curvas-de-bordo-via-api\\\/\"},\"wordCount\":1347,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/blogs.autodesk.com\\\/mundoaec\\\/numerando-curvas-de-bordo-via-api\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blogs.autodesk.com\\\/mundoaec\\\/wp-content\\\/uploads\\\/sites\\\/84\\\/2013\\\/07\\\/6a01538e6fd9d0970b01910418def2970c.png\",\"keywords\":[\"3D\",\"API\",\"AutoCAD\",\"Autodesk\",\"Basic\",\"Bordo\",\"Civil\",\"Curvas\",\"de\",\"Numerando\",\"via\",\"Visual\"],\"articleSection\":[\"Mundo AEC - Autodesk\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/blogs.autodesk.com\\\/mundoaec\\\/numerando-curvas-de-bordo-via-api\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/blogs.autodesk.com\\\/mundoaec\\\/numerando-curvas-de-bordo-via-api\\\/\",\"url\":\"https:\\\/\\\/blogs.autodesk.com\\\/mundoaec\\\/numerando-curvas-de-bordo-via-api\\\/\",\"name\":\"Numerando Curvas de Bordo via API | Mundo AEC - Autodesk\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.autodesk.com\\\/mundoaec\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/blogs.autodesk.com\\\/mundoaec\\\/numerando-curvas-de-bordo-via-api\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/blogs.autodesk.com\\\/mundoaec\\\/numerando-curvas-de-bordo-via-api\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blogs.autodesk.com\\\/mundoaec\\\/wp-content\\\/uploads\\\/sites\\\/84\\\/2013\\\/07\\\/6a01538e6fd9d0970b01910418def2970c.png\",\"datePublished\":\"2013-07-05T10:27:31+00:00\",\"dateModified\":\"2016-05-20T15:01:33+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/blogs.autodesk.com\\\/mundoaec\\\/#\\\/schema\\\/person\\\/3707a63eb2b5ba94534d68d7e1a65e9c\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/blogs.autodesk.com\\\/mundoaec\\\/numerando-curvas-de-bordo-via-api\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/blogs.autodesk.com\\\/mundoaec\\\/numerando-curvas-de-bordo-via-api\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/blogs.autodesk.com\\\/mundoaec\\\/numerando-curvas-de-bordo-via-api\\\/#primaryimage\",\"url\":\"https:\\\/\\\/blogs.autodesk.com\\\/mundoaec\\\/wp-content\\\/uploads\\\/sites\\\/84\\\/2013\\\/07\\\/6a01538e6fd9d0970b01910418def2970c.png\",\"contentUrl\":\"https:\\\/\\\/blogs.autodesk.com\\\/mundoaec\\\/wp-content\\\/uploads\\\/sites\\\/84\\\/2013\\\/07\\\/6a01538e6fd9d0970b01910418def2970c.png\",\"width\":378,\"height\":246},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/blogs.autodesk.com\\\/mundoaec\\\/numerando-curvas-de-bordo-via-api\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/blogs.autodesk.com\\\/mundoaec\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Numerando Curvas de Bordo via API\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/blogs.autodesk.com\\\/mundoaec\\\/#website\",\"url\":\"https:\\\/\\\/blogs.autodesk.com\\\/mundoaec\\\/\",\"name\":\"Mundo AEC - Autodesk\",\"description\":\"Blog Oficial sobre solu\u00e7\u00f5es da Autodesk Brasil\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/blogs.autodesk.com\\\/mundoaec\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/blogs.autodesk.com\\\/mundoaec\\\/#\\\/schema\\\/person\\\/3707a63eb2b5ba94534d68d7e1a65e9c\",\"name\":\"Pedro Soethe\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/blogs.autodesk.com\\\/mundoaec\\\/wp-content\\\/uploads\\\/sites\\\/84\\\/2021\\\/06\\\/30\\\/Capture-150x150.jpg\",\"url\":\"https:\\\/\\\/blogs.autodesk.com\\\/mundoaec\\\/wp-content\\\/uploads\\\/sites\\\/84\\\/2021\\\/06\\\/30\\\/Capture-150x150.jpg\",\"contentUrl\":\"https:\\\/\\\/blogs.autodesk.com\\\/mundoaec\\\/wp-content\\\/uploads\\\/sites\\\/84\\\/2021\\\/06\\\/30\\\/Capture-150x150.jpg\",\"caption\":\"Pedro Soethe\"},\"description\":\"Pedro Luis Soethe Cursino \u00e9 formado em Engenharia Civil pela Universidade de Taubat\u00e9, tem p\u00f3s-gradua\u00e7\u00e3o em Georreferenciamento pela Faculdade de Pirassununga e em Estradas e Vias Urbanas pela FESP. Trabalha a mais de 15 anos na \u00e1rea de infraestrutura e \u00e9 respons\u00e1vel por v\u00e1rios projetos executados no Brasil em diversas disciplinas como estradas, projetos urbanos, loteamentos, infraestrutura hidro-sanit\u00e1ria, drenagem, terraplanagem entre outras.\",\"sameAs\":[\"https:\\\/\\\/www.linkedin.com\\\/in\\\/pedrosoethe\\\/\"],\"url\":\"https:\\\/\\\/blogs.autodesk.com\\\/mundoaec\\\/author\\\/pedrosoethe\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Numerando Curvas de Bordo via API | Mundo AEC - Autodesk","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blogs.autodesk.com\/mundoaec\/numerando-curvas-de-bordo-via-api\/","twitter_misc":{"Written by":"Pedro Soethe","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blogs.autodesk.com\/mundoaec\/numerando-curvas-de-bordo-via-api\/#article","isPartOf":{"@id":"https:\/\/blogs.autodesk.com\/mundoaec\/numerando-curvas-de-bordo-via-api\/"},"author":{"name":"Pedro Soethe","@id":"https:\/\/blogs.autodesk.com\/mundoaec\/#\/schema\/person\/3707a63eb2b5ba94534d68d7e1a65e9c"},"headline":"Numerando Curvas de Bordo via API","datePublished":"2013-07-05T10:27:31+00:00","dateModified":"2016-05-20T15:01:33+00:00","mainEntityOfPage":{"@id":"https:\/\/blogs.autodesk.com\/mundoaec\/numerando-curvas-de-bordo-via-api\/"},"wordCount":1347,"commentCount":0,"image":{"@id":"https:\/\/blogs.autodesk.com\/mundoaec\/numerando-curvas-de-bordo-via-api\/#primaryimage"},"thumbnailUrl":"https:\/\/blogs.autodesk.com\/mundoaec\/wp-content\/uploads\/sites\/84\/2013\/07\/6a01538e6fd9d0970b01910418def2970c.png","keywords":["3D","API","AutoCAD","Autodesk","Basic","Bordo","Civil","Curvas","de","Numerando","via","Visual"],"articleSection":["Mundo AEC - Autodesk"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blogs.autodesk.com\/mundoaec\/numerando-curvas-de-bordo-via-api\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blogs.autodesk.com\/mundoaec\/numerando-curvas-de-bordo-via-api\/","url":"https:\/\/blogs.autodesk.com\/mundoaec\/numerando-curvas-de-bordo-via-api\/","name":"Numerando Curvas de Bordo via API | Mundo AEC - Autodesk","isPartOf":{"@id":"https:\/\/blogs.autodesk.com\/mundoaec\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blogs.autodesk.com\/mundoaec\/numerando-curvas-de-bordo-via-api\/#primaryimage"},"image":{"@id":"https:\/\/blogs.autodesk.com\/mundoaec\/numerando-curvas-de-bordo-via-api\/#primaryimage"},"thumbnailUrl":"https:\/\/blogs.autodesk.com\/mundoaec\/wp-content\/uploads\/sites\/84\/2013\/07\/6a01538e6fd9d0970b01910418def2970c.png","datePublished":"2013-07-05T10:27:31+00:00","dateModified":"2016-05-20T15:01:33+00:00","author":{"@id":"https:\/\/blogs.autodesk.com\/mundoaec\/#\/schema\/person\/3707a63eb2b5ba94534d68d7e1a65e9c"},"breadcrumb":{"@id":"https:\/\/blogs.autodesk.com\/mundoaec\/numerando-curvas-de-bordo-via-api\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blogs.autodesk.com\/mundoaec\/numerando-curvas-de-bordo-via-api\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/blogs.autodesk.com\/mundoaec\/numerando-curvas-de-bordo-via-api\/#primaryimage","url":"https:\/\/blogs.autodesk.com\/mundoaec\/wp-content\/uploads\/sites\/84\/2013\/07\/6a01538e6fd9d0970b01910418def2970c.png","contentUrl":"https:\/\/blogs.autodesk.com\/mundoaec\/wp-content\/uploads\/sites\/84\/2013\/07\/6a01538e6fd9d0970b01910418def2970c.png","width":378,"height":246},{"@type":"BreadcrumbList","@id":"https:\/\/blogs.autodesk.com\/mundoaec\/numerando-curvas-de-bordo-via-api\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/blogs.autodesk.com\/mundoaec\/"},{"@type":"ListItem","position":2,"name":"Numerando Curvas de Bordo via API"}]},{"@type":"WebSite","@id":"https:\/\/blogs.autodesk.com\/mundoaec\/#website","url":"https:\/\/blogs.autodesk.com\/mundoaec\/","name":"Mundo AEC - Autodesk","description":"Blog Oficial sobre solu\u00e7\u00f5es da Autodesk Brasil","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blogs.autodesk.com\/mundoaec\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/blogs.autodesk.com\/mundoaec\/#\/schema\/person\/3707a63eb2b5ba94534d68d7e1a65e9c","name":"Pedro Soethe","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/blogs.autodesk.com\/mundoaec\/wp-content\/uploads\/sites\/84\/2021\/06\/30\/Capture-150x150.jpg","url":"https:\/\/blogs.autodesk.com\/mundoaec\/wp-content\/uploads\/sites\/84\/2021\/06\/30\/Capture-150x150.jpg","contentUrl":"https:\/\/blogs.autodesk.com\/mundoaec\/wp-content\/uploads\/sites\/84\/2021\/06\/30\/Capture-150x150.jpg","caption":"Pedro Soethe"},"description":"Pedro Luis Soethe Cursino \u00e9 formado em Engenharia Civil pela Universidade de Taubat\u00e9, tem p\u00f3s-gradua\u00e7\u00e3o em Georreferenciamento pela Faculdade de Pirassununga e em Estradas e Vias Urbanas pela FESP. Trabalha a mais de 15 anos na \u00e1rea de infraestrutura e \u00e9 respons\u00e1vel por v\u00e1rios projetos executados no Brasil em diversas disciplinas como estradas, projetos urbanos, loteamentos, infraestrutura hidro-sanit\u00e1ria, drenagem, terraplanagem entre outras.","sameAs":["https:\/\/www.linkedin.com\/in\/pedrosoethe\/"],"url":"https:\/\/blogs.autodesk.com\/mundoaec\/author\/pedrosoethe\/"}]}},"_links":{"self":[{"href":"https:\/\/blogs.autodesk.com\/mundoaec\/wp-json\/wp\/v2\/posts\/525","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.autodesk.com\/mundoaec\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.autodesk.com\/mundoaec\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.autodesk.com\/mundoaec\/wp-json\/wp\/v2\/users\/1431"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.autodesk.com\/mundoaec\/wp-json\/wp\/v2\/comments?post=525"}],"version-history":[{"count":0,"href":"https:\/\/blogs.autodesk.com\/mundoaec\/wp-json\/wp\/v2\/posts\/525\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blogs.autodesk.com\/mundoaec\/wp-json\/wp\/v2\/media\/1140"}],"wp:attachment":[{"href":"https:\/\/blogs.autodesk.com\/mundoaec\/wp-json\/wp\/v2\/media?parent=525"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.autodesk.com\/mundoaec\/wp-json\/wp\/v2\/categories?post=525"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.autodesk.com\/mundoaec\/wp-json\/wp\/v2\/tags?post=525"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}