06-11-2020, 11:55 PM
Salve a tutti, sto cercando (con molta fatica) di sviluppare qualcosa in VB.NET e magari fare questo piccolo tutorial aiuta me e altri a muovere i primi passi
Prima di tutto scarichiamo MS visual studio apriamo un progetto e aggiungiamo questi riferimenti: hostdbmgd.dll + hostmgd.dll
Ora per chi ha dimestichezza con VBA ecco il codice che sto per spiegare in VBS che gira sotto nanoCAD:
Per comprendere da subito che siamo su tutto un altro pianeta ecco lo stesso codice in VB.NET
un bel casino per chi non è un programmatore di ultima generazione....
Comunque avviate nanoCAD digitate netload a caricate la DLL che verrà compilata da visual studio
e fate partire il programma
Prima di tutto scarichiamo MS visual studio apriamo un progetto e aggiungiamo questi riferimenti: hostdbmgd.dll + hostmgd.dll
Ora per chi ha dimestichezza con VBA ecco il codice che sto per spiegare in VBS che gira sotto nanoCAD:
Codice:
'Variabili
Dim pnt_1(2) 'Array di Double
Dim pnt_2(2) 'Array di Double
Dim lineObj 'Oggetto linea
pnt_1(0) = 200 'Coordinata X
pnt_1(1) = 200 'Coordinata Y
pnt_1(2) = 0 'Coordinata Z
pnt_2(0) = 200 'Coordinata X
pnt_2(1) = 300 'Coordinata Y
pnt_2(2) = 0 'Coordinata Z
'Creo l'oggetto lineObj con AddLine Method (ActiveX)
'RetVal = object.AddLine(StartPoint, EndPoint)
Set lineObj = ThisDrawing.ModelSpace.AddLine(pnt_1, pnt_2)
Per comprendere da subito che siamo su tutto un altro pianeta ecco lo stesso codice in VB.NET
Codice:
Namespace Utility
' Add_Line diventa un comando da prompt come se fosse integrato al CAD
<CommandMethod("Add_Line")>
Public Sub Add_Line()
' Riferimenti al database corrente (vedi prossimo post)
Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument
Dim acCurDb As Database = acDoc.Database
' Inizia una transazione (vedi prossimo post)
Using acTrans As Transaction = acCurDb.TransactionManager.StartTransaction()
' Apre la tabella block in lettura (vedi prossimo post)
Dim acBlkTbl As BlockTable
acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId, OpenMode.ForRead)
'' Apre la tabella block record nel ModelSpace per scrittura (vedi prossimo post)
Dim acBlkTblRec As BlockTableRecord
acBlkTblRec = acTrans.GetObject(acBlkTbl(BlockTableRecord.ModelSpace), OpenMode.ForWrite)
Dim point1 As Point3d = New Point3d(200, 200, 0)
Dim point2 As Point3d = New Point3d(200, 300, 0)
'' Crea linea
Dim acLine As Line = New Line(point1, point2)
acLine.SetDatabaseDefaults()
' Aggiunge il nuovo oggetto (linea) alla tabella block record
acBlkTblRec.AppendEntity(acLine)
acLine.GetHashCode()
' Aggiunge il nuovo oggetto (linea) alla transazione
acTrans.AddNewlyCreatedDBObject(acLine, True)
' Salva il nuovo oggetto (linea) nel database (disegno)
acTrans.Commit()
End Using
End Sub
End Namespace
un bel casino per chi non è un programmatore di ultima generazione....
Comunque avviate nanoCAD digitate netload a caricate la DLL che verrà compilata da visual studio
e fate partire il programma