NETLOAD - que saco!!

Fez sua ".net" dll e toda vez que vai usar ela tem que usar o netload? Resolveu ela com lisp:
(command "netload" "c:/testenet.dll")???
Credo!!! Eu também já me encomodei com isso... em fim, eu fiz uma gambiarra aqui que pode te ser util, primeiro pegue aquele pequeno teste de vb.net, ou copia este:

mais...


Public Class teste
'o autocad em si
Public acadApp AsIAcadApplication

Public Sub New()
'17.0? = cad 2007
'17.1 = cad 2008
'17.2 = cad 2009
acadApp = GetObject(, "Autocad.Application.17.1")

'adiciona o loader ao registro:

'calcula a chave de registro:
Dim acadkey As String = SystemObjects.DynamicLinker.ProductKey & _
"\Applications"

'monta a string da localização da DLL:
Dim loader As String = My.Application.Info.DirectoryPath & "\" & _
My.Application.Info.AssemblyName & ".dll"

'cria e/ou abre uma chave para sua aplicação:
Dim key As RegistryKey = Registry.CurrentUser. _
OpenSubKey(acadkey, True). _
CreateSubKey("TESTE")

'caso voce mude a pasta onde está instalada, deve atualizar no registro:
If key.GetValue("LOADER") <>loader Then
With key
.SetValue("DESCRIPTION", "TESTE,este é um teste de AUTOLOAD")

'estes valores não mudam:
.SetValue("LOADCTRLS", 12, RegistryValueKind.DWord)
.SetValue("MANAGED", 1, RegistryValueKind.DWord)
.SetValue("LOADER", loader)

'aqui, adiciona a lista os comandos criados:
With .CreateSubKey("Commands")
Dim mtr() AsObject = {"DESENHALINHA","TESTE"}
ForEach k In mtr
.SetValue(k, k)
Next
End With
End With
End If

End Sub

<CommandMethod("TESTE")> _
Public Sub TESTE()
MsgBox("OLÁ MUNDO!")
End Sub
'expoe a sub como um novo comando do autocad
<CommandMethod("DESENHALINHA")> _
Public Sub desenhalinha()
Dim Thisdrawing As IAcadDocument = acadApp.ActiveDocument
Dim pt1(2), pt2(2) AsDouble
Dim linha As AcadLine
Dim lay As AcadLayer

'pede o primeiro ponto:
pt1 = Thisdrawing.Utility.GetPoint(, "Entre com o primeiro ponto")

'pede o segundo ponto:
pt2 = Thisdrawing.Utility.GetPoint(pt1,"Entre com o segundo ponto")

'desenha uma linha:
linha = Thisdrawing.ModelSpace.AddLine(pt1, pt2)

'troca o layer, criando se ele nao existe:
Try
linha.Layer = "layer_teste"
Catch
lay = Thisdrawing.Layers.Add("layer_teste")
linha.Layer = "layer_teste"
End Try

End Sub

End Class

A idéia é usar o registro do windows, como descrito aqui

Este exemplo, gerou estas linhas no registro:


Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Autodesk\AutoCAD\R17.2\ACAD-7000:409\Applications\TESTE]
"DESCRIPTION"="TESTE, este é um teste de AUTOLOAD"
"LOADCTRLS"=dword:0000000c
"MANAGED"=dword:00000001
"LOADER"="I:\\vbnet\\TESTE\\teste\\bin\\Release\\teste.dll"

[HKEY_CURRENT_USER\Software\Autodesk\AutoCAD\R17.2\ACAD-7000:409\Applications\TESTE\Commands]
"DESENHALINHA"="DESENHALINHA"
"TESTE"="TESTE"



Veja que adicionei algumas linhas na sub "NEW" da minha classe, que faz o trabalho de adicionar ao registro os parâmetros necessários ao autoload.

Assim, só é necessário UM netload, que acaba funcionando como uma instalação. Se você fechar o autocad e abrir novamente, bastará digitar o nome do comando que você criou na sua dll, basta apenas que a inclua naquela lista, deste exemplo:
Dim mtr() AsObject = {"DESENHALINHA","TESTE"}
"DESENHALINHA" e "TESTE" são os nomes dos comandos implementados nesta dll.

Se quiser, baixe aqui o código fonte para o cad 2009. Caso tenha anteriores, apenas troque as referências:

Nenhum comentário:

Postar um comentário