VB.NET qualche suggerimento ?

Shape

Utente Senior
Professione: Disegnatore Carpenteria
Software: Autocad, VBA-AutoLisp, Tecnometal4D, GIMP
Regione: Friuli
Al di la dei vari tutorial (a dire il vero pochini) che si trovano in rete, c'è nessuno che ha qualche consiglio su come prendere di petto questo "nuovo" linguaggio applicato ad autocad ovviamente.

Perchè è apparentemente così diverso dal Visual basic che siamo abituati ad usare su autocad ?

In che modo va preso ?

Magari qualche esempio pratico sulle varie operazioni che si eseguono normalmente in autocad, disegnare linee, creare selezioni, modificare qualcosa.

Ma sopratutto come va strutturato un progetto.

So che sono parecchie domande tutte buttate li, sono partito da 0 anche con il visual basic e alla fine ne sono uscito bene ma con il .NET cavolo sono ancora piantato al "hello world" ......
 

carry

Utente Standard
Professione: progettista carpenteria
Software: Autocad-Prosteel 3d
Regione: Lombardia
ciao Shape
Anche a me piacerebbe passare al NET, ma....
Ho acquistato, penso l'unico book dedicato alla programmazione di Autocad con il net
qui http://www.vbcad.com/ al di la del problema di interpretare un inglese tecnico ma piano piano ci si arriva, ti mette anche diposizione un template con le impostazioni iniziali per caricare le librerie e impostare l'ambiente ecc.
Il problema del NET, linguaggio a quello che si dice molto potente, sicuro ecc.
sia un linguaggio quasi esclusivamente per programmatori professionisti, giusto questa mattina ho letto questo articolo http://www.cadalyst.com/cad/autocad/the-world-autocad-programming-platforms-part-1-14398 ove conferma quanto già si sapeva, abbandono del VBA, si mantiene il VLISP quale linguaggio per noi tiralinee e si spinge per il NET.
Credo che noi utenti dovremmo chiedere in coro di aggiornare le DCL del lisp, per varie ragioni:
1) anche i tiralinee continuano a personalizzarsi il proprio cad in maniera più professionale.
2) Ma la cosa più importante di questi tempi magri, se si aggiornassere le DCL del lisp, potrebbero nascere molte aplicazioni specifiche di settore, create da chi ha l'esperienza sul campo, cosa molto difficile da trasferire a un programmatore (sperimentato).
si andrebbe a incrementare anche il mercato creando probabilmente anche posti di lavoro ecc.
ciao
 

Shape

Utente Senior
Professione: Disegnatore Carpenteria
Software: Autocad, VBA-AutoLisp, Tecnometal4D, GIMP
Regione: Friuli
Infatti mi sa che che la scelta fatta a suo tempo VBA piuttosto che Lisp è stata sbagliata.
Ora abbandonando il VBA sarò costretto a "rifare" tutto in LISP, il VB.NET per il momento e per le mie conoscenze mi risulta inaccessibile.

Anche se non mi è chiaro come mai microsoft abbia ritarato il cambio non abbandonando il VB mentre autodesk si ostina a mollarlo definitivamente.
 

carry

Utente Standard
Professione: progettista carpenteria
Software: Autocad-Prosteel 3d
Regione: Lombardia
Autodesk ha abbandonato il VBA perchè funziona soltanto a 32 bit, a 64 crea enormi problemi.
Microsoft lo ha abbandonato il VBA e non lo sviluppa più, pertanto sono costretti a questa scelta.
Il .NET è una piattaforma entro la quale puoi utilizzare vari linguaggi, VB C C++
J# ecc. (potrebbe essere che si possa utilizzare anche il lisp, vedi
http://it.wikipedia.org/wiki/Microsoft_.NET#Linguaggi_di_programmazione_.NET)
pertanto sembra sia un interprete di questi linguaggi.
Ora non ti s'ho spiegare in temini tecnici il tutto ma ho l'impressione che Microsoft ha copiato JAVA anche questo è una piattaforma nella quale è possibile utilizzare vari linguaggi.
 

Emo

Utente poco attivo
Professione: Ingegnere
Software: Inventor, Abaqus, Dyna
Regione: Lombardia
VBA funziona anche 64bit visto che vba enabler c'è anche per i 64bit :wink:
Inoltre Microsoft continua a supportare vba nei suoi prodotti office anche a 64bit. :cool:

Quello che trovo poco pratico nel passaggio a .net è che per fare 4 semplici righe o punti ci metto 5min di orologio mentre in vba ci metto 5 sec. Non devo compilare, usare 2 programmi pesantissimi, creare tutti i riferimenti alle librerie.
Poi alla fine grosse differenze fra vba e vb.net non ce ne sono.

Capisco se si dovessero fare veri e propri programmi sopra autocad, ma per fare procedure iterative credo che vba sia ancora molto potente. Inoltre chi usa vba per excel o altro non ci mette molto a sviluppare su autocad :smile:
Visual lisp dal canto suo dovrebbe essere rivisitato , troppo vecchio ... e poco visual !

Insomma secondo me vba è ancora comodo e finché si può usare io lo uso.

Quando lo toglieranno definitivamente farò il porting ... magari in quel momento avranno automatizzato le procedure :wink:
 

ale

Utente Junior
Professione: tecnico
Software: office+autocad
Regione: Veneto
Salve,
ho letto i Vs. post, anch’io da qualche settimana ho iniziato con VB.NET, pertanto mi unisco al coro.
Seguendo solo le indicazioni che ho trovato nelle discussioni del forum qualche procedura elementare sono riuscito ad eseguirla.
Certo il VBA, che conosco così e così, è molto pratico, VB.NET è molto più lungo e macchinoso, considerando che comunque questo è l’orientamento di Autodesk per come la vedo è meglio iniziare e affrontare l’argomento, l’ambiente microsoft unito ad autocad permette di ottenere risultati notevoli.
Ci sarà da tribolare, ………… e non poco.
Allego questa piccola procedura "comando: ora" , ho visto che shape chiedeva qualche esempio pratico, è molto semplice, ...... se può servire.

PS : come si fa ad allegare un .dll ?? :confused:
 

Shape

Utente Senior
Professione: Disegnatore Carpenteria
Software: Autocad, VBA-AutoLisp, Tecnometal4D, GIMP
Regione: Friuli
Qui potete trovare dei tutorial della Autodesk per iniziare ad apprendere il VB.NET:

http://usa.autodesk.com/adsk/servlet/index?id=18162650&siteID=123112
I tutorial vanno bene, ma quello che manca ( o mi manca) del VBA è l'help su l'utilizzo dei vari comandi e procedure, con il VBA anche se non sai come si usa utilizzi l'help o la libreria e vedi sintassi esempi e quindi in qualche modo ne esci sempre.

Qui partono dicendo carichi la libreria poi usi questi riferimenti etc etc... ma danno per scontato tantissime cose che solo un "vero" programmatore sa. A mio parere stanno tagliando fuori quelli che come noi utilizzano i linguaggi per facilitare il lavoro, e lo stanno complicando notevolmente.
 

Shape

Utente Senior
Professione: Disegnatore Carpenteria
Software: Autocad, VBA-AutoLisp, Tecnometal4D, GIMP
Regione: Friuli
Si si la guida va bene, io mi riferivo all'ambiente VISUAL che nel VBA ti da subito un grosso aiuto. Ma forse è solo un mio limite nel non trovare o nel cercare delle analogie tra i due linguaggi.
Forse il miglio approccio è dimenticarsi tutto e ripartire da zero come feci quando iniziai con il VBA senza saper nulla di programmazione.
 

ale

Utente Junior
Professione: tecnico
Software: office+autocad
Regione: Veneto
scusate il ritardo, ma posso collegarmi solo alla sera al forum.
allego il file di cui vi parlavo, a titolo di esempio.
 

Allegati

pertengineering

Utente Junior
Professione: progettazione
Software: autocad, cadworx, solidworks
Regione: friuli
Shape scusa il ritardo.
sono due i problemi che ho incontrato nello sviluppo vbnet vs vba:
1) avendo una macchina X64,il codice in DEBUG ,quando lo metto in pausa, nn e' editabile.
Questo si puo' ovviare facendo compilare il codice per architettura x32.
2) Mi e' preclusa ogni operazione di Debug perche' devo sempre caricare la DLL compilata in autocad con NETLOAD ,quindi esco dall'ambiente Visual con tutte le sue qualita' (come detto edit on -time ,watch di variabili ,esecuzione di codice nella finestra immediata... ci siamo capiti)
Oggi ho trovato qui http://usa.autodesk.com/adsk/servlet/index?siteID=123112&id=18162797 quello che dovrebbe essere la panacea ai nostri mali cioe' un template proprio per Autocad .... in modo dafare il debug come in VBA
L'ho provato sull' express 2008 ma mi da un errore (nella descrizione e' scritto che per Autocad2012 che io ho serve Express 2010 )
Adesso sto scaricando questa versione,starin a viodi.
Sergio
 

pertengineering

Utente Junior
Professione: progettazione
Software: autocad, cadworx, solidworks
Regione: friuli
Aggiornato a VB2010: il plugin di post #13 funziona e abbiamo il debug on-time. Grande!!!
 

Shape

Utente Senior
Professione: Disegnatore Carpenteria
Software: Autocad, VBA-AutoLisp, Tecnometal4D, GIMP
Regione: Friuli
dopo un po' di sangue dal naso a forza di scuffioni piano piano se ne viene fuori "quasi" bene
http://images.autodesk.com/adsk/files/autocad_2010_dotnet_training.zip
Grazie, questo tutorial è proprio la manna, parte dal farti capire come ès trutturato il comando, e sapendo come facevi in VBA capisci che devi DIMENTICARTI TUTTO.

Io mi stavo arenando appunto perchè cercavo di recuperare qlc di conosciuto invece qui bisogna veramente ripartire da "Hello word".

:finger:

Mandi Furlan !!!
 

pertengineering

Utente Junior
Professione: progettazione
Software: autocad, cadworx, solidworks
Regione: friuli
Per cominciare metto le mani aavanti professando la mia ignoranza in materia.
Elenco una serie di considerazioni,come spunto per discussione.
L'idea che mi sono fatto e' che con VBNET si riesca a lavorare in maniera molto simile al VBA ,con la piccola differenza che gli oggetti (intendo linee ,archi ecc) sono "nascosti" all'interno di una struttura di matrioske che lasciano spiazzati.

vorrei esporre questa parte di codice:
Codice:
Imports Autodesk.AutoCAD.EditorInput
Imports Autodesk.AutoCAD.DatabaseServices
Imports Autodesk.AutoCAD.Runtime
Imports Autodesk.AutoCAD.Geometry
Imports Autodesk.AutoCAD.ApplicationServices
Imports DBTransMan = Autodesk.AutoCAD.DatabaseServices.TransactionManager
#1 da inserire all'inizio di modulo/classe,che sono delle scorciatoie ai vari settori (namespace) delle librerie autocad da caricare come riferimento.
Nel senso che invece di scrivere Autodesk.AutoCAD.DatabaseServices.Database
possiamo scrivere direttamente
Database per richiamare quell'oggetto.

Con VBA eravamo abituati a manovrare gli oggetti del disegno direttamente da Thisdrawing.modelspace ,in VBNET e' simile solo incasinato al cubo.
Io mi sono creato altre scorciatoie:
Codice:
Friend ReadOnly Property ThisDrawing() As Document
        Get
            Return docman.MdiActiveDocument
        End Get
    End Property
    Friend ReadOnly Property lockdoc() As DocumentLock
        Get
            Return ThisDrawing.LockDocument(DocumentLockMode.Write, Nothing, Nothing, True)
        End Get
    End Property
    Friend ReadOnly Property tr_start() As Transaction
        Get
            Return ThisDrawing.TransactionManager.StartTransaction
        End Get
    End Property
    Friend ReadOnly Property ThisDatabase() As Database
        Get
            Return ThisDrawing.Database
        End Get
    End Property
    Friend ReadOnly Property docman() As DocumentCollection
        Get
            Return Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager
        End Get
    End Property
    Friend ReadOnly Property Edi() As Editor
        Get
            Return ThisDrawing.Editor
        End Get
    End Property
in modo da avere sotto mano thisDrawing quasi come una volta.
qui entra il discorso delle matrioske per arrivare agli oggetti:
Codice:
Friend Sub lineshow()
        Dim acDoc As Document = ThisDrawing
        Using docloc As DocumentLock = lockdoc
            Dim Db As Database = ThisDatabase
            Using tr As Transaction = tr_start
                Using dict As DBDictionary = tr.GetObject(Db.GroupDictionaryId, OpenMode.ForRead, True)
                    For Each gp As DictionaryEntry In dict
                        Dim grp As Group = CType(tr.GetObject(gp.Value, OpenMode.ForRead), Group)
                        Dim myids() As ObjectId = grp.GetAllEntityIds()
                        For Each id As ObjectId In myids
                            Using obj As Object = tr.GetObject(id, OpenMode.ForWrite)
                                Using myEnt As Entity = CType(obj, Entity)
                                    myEnt.Visible = True
                                End Using
                            End Using
                        Next
                    Next
                    tr.Commit()
                End Using
            End Using
        End Using
    End Sub
Questa piccola ma succosa sub rende visibili tutti gli oggetti nel corrente modelspace (ok ,ok prima avremmo dovuto nasconderli... non fate i pignoli ,e' un esempio).
Fate attenzione che prima fa un filtro in modo da agire solo su oggetti che fanno parte di un gruppo (si puo' bypassare quella parte per agire su tutti gli oggetti...)

Questo e' un esempio di come arrivare all'entita' (che puo' essere linea ,cerchio ecc basta cambiare CType(obj, Entity) (consiglio di usare la sintassi If TypeOf (obj) Is Polyline Then ..... per ricavare tipi di entita' specifici)

Se ci sono domande,a disposizione.
 

Shape

Utente Senior
Professione: Disegnatore Carpenteria
Software: Autocad, VBA-AutoLisp, Tecnometal4D, GIMP
Regione: Friuli
Per cominciare metto le mani aavanti professando la mia ignoranza in materia.

Se ci sono domande,a disposizione.
Alla faccia della pupazza... sei avanti al cubo !!! :biggrin:

Io giuro mi sto impegnando per mettermi sotto, ma con il VBA ancora sotto mano non ce la faccio proprio a complicarmi la vita al cubo... grgrgrgrgrggrgrgr