(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:
‘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:
[HKEY_CURRENT_USERSoftwareAutodeskAutoCADR17.2ACAD-7000:409ApplicationsTESTE]
“DESCRIPTION”=”TESTE, este é um teste de AUTOLOAD”
“LOADCTRLS”=dword:0000000c
“MANAGED”=dword:00000001
“LOADER”=”I:vbnetTESTEtestebinReleaseteste.dll”
[HKEY_CURRENT_USERSoftwareAutodeskAutoCADR17.2ACAD-7000:409ApplicationsTESTECommands]
“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: