Ciao ospite, se leggi questo messaggio significa che non sei ancora registrato. Ti consiglio di registrarti velocemente con i tuoi account social (Facebook, Google, Linkedin), basta un semplice click. Oppure clicca qui per registrarti in pochi semplici passaggi. Così potrai godere di tutte le funzionalità del nostro Forum.
Ciao ospite, se leggi questo messaggio significa che non sei ancora registrato. Ti consiglio di registrarti velocemente con i tuoi account social (Facebook, Google, Linkedin), basta un semplice click. Oppure clicca qui per registrarti in pochi semplici passaggi. Così potrai godere di tutte le funzionalità del nostro Forum.

Guarda il Video tutorial su come si usa il forum sul nostro canale YouTube. x


Valutazione discussione:
  • 0 voto(i) - 0 media
  • 1
  • 2
  • 3
  • 4
  • 5
VB.NET applicati a nanoCAD
#1
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:

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:
Imports Teigha.Runtime                      'Namespace HostMgd.ApplicationServices -> Public NotInheritable Class CommandMethodAttribute
Imports HostMgd.ApplicationServices         'Namespace HostMgd.ApplicationServices -> Public NotInheritable Class Document
Imports Teigha.DatabaseServices             'Namespace Teigha.DatabaseServices -> Public NotInheritable Class Database
Imports Teigha.Geometry                     'Namespace Teigha.Geometry -> Public Structure Point3d

Namespace Test_01
    Public Class 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 Class
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
Cita messaggio
#2
Come mai ho commentato alcune parti con (vedi prossimo post) ? 
Per spiegare i passaggi dobbiamo dare un occhiata all' Object Hierarchy (.NET)


[Immagine: GUID-1AA8F78F-DF90-4AA4-A975-A06FBF65231C.png]

quindi per arrivare all'obbiettivo 
Set lineObj = ThisDrawing.ModelSpace.AddLine(pnt_1, pnt_2)
 dobbiamo fare alcuni passaggi :
  • Arrivare al Documento tramite Application.DocumentManager.MdiActiveDocument
  • Arrivare al Database  tramite Application.DocumentManager.MdiActiveDocument.Database
  • Iniziare una Transaction tramite  Application.DocumentManager.MdiActiveDocument.Database.TransactionManager.StartTransaction()
  • Arrivare al BlockTabled tramite acTrans.GetObject(acCurDb.BlockTableId, OpenMode.ForRead)
  • Arrivare al BlockTableRecord tramite acTrans.GetObject(acBlkTbl(BlockTableRecord.ModelSpace), OpenMode.ForWrite)
  • Creare virtualmente la linea con Dim acLine As Line = New Line(point1, point2)
  • Aggiungerla al record BlockTableRecord con acBlkTblRec.AppendEntity(acLine)
  • Aggiunger la linea alla transazione Transaction con acTrans.AddNewlyCreatedDBObject(acLine, True)
  • Eseguire tutto quello chiesto con acTrans.Commit()
Cita messaggio


Discussioni simili
Thread Autore Replies Views Last Post
  VBscript applicati a nanoCAD tracciatura.net 9 6,376 12-18-2024, 12:53 PM
Last Post: jakasspeech8

Vai al forum:


Utenti che stanno guardando questa discussione: 1 Ospite(i)