Benvenuti nella nostra community - Visita anche il blog

Benvenuto ospite! Login Registrati

Benvenuto/a ospite! . Per leggere i contenuti del forum non è richiesta la registrazione ma se vuoi interagire con noi ponendo domande ed avendo una risposta ai tuoi problemi devi registrarti. La registrazione è gratuita e puoi farla cliccando su Registrati in alto a destra, oppure entrando con i tuoi account social.


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
Thanks given by:
#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
Thanks given by:


Discussioni simili
Discussione Autore Risposte Letto Ultimo messaggio
  VBscript applicati a nanoCAD tracciatura.net 6 2.811 10-06-2020, 03:15 PM
Ultimo messaggio: tracciatura.net



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