Salut,
je regarde comment le vb.net se soupille avec mon ACAD et j'essaye de faire les exemples donnés dans le AutoCAD .NET Developer's Guide http://docs.autodesk.com/ACD/2010/ENU/AutoCAD%20.NET%20Developer%27s%20Guide/index.html
et notamment le premier exercice :
Getting Started with Microsoft Visual Studio > Exercises: Create Your First Project > Exercise: Create a New Command
Sauf que le copier-collé remis en forme, il reste une erreur sur AddNewlyCreatedDBObject:
'AddNewlyCreatedDBObject' n'est pas un membre de 'Autodesk.AutoCAD.DatabaseServices.Transaction'
J'ai essayé plusieurs exemples et ça bute toujours sur ce truc.
En effet, quand je tape :
acTrans.
après le point, je devrait avoir en proposition addNewly... mais il n'y a rien qui commence par add dans les propositions.
J'essaye de piloter la version complète de AutoCAD 2005. Est-ce lié à cette version qui n'implémente pas cette fonction ?
Ou ai-je oublié de mettre une référence ? Je ne pense pas puisque après acTrans. j'ai des propositions qui s'affichent.
Merci,
JM
salut dans vs il faut ajouter 2 références :
acdbmgd.dll et acmgd.dll qui dans trouve dans le répertoire d'install d'autocad.
Sur ton projet click droit sur le nom de ton projet dans solution explorer puis choisit add reférence
Dim db As Database = HostApplicationServices.WorkingDatabase
Dim tr As Transaction
tr = db.TransactionManager.StartTransaction
tr.AddNewlyCreatedDBObject(Style, True)
tr.Commit()
tr.Dispose()
un exemple d'utilisation.
Merci pour ta réponse. Mais malheureusement, j'ai fait ce que tu as décris. J'ai suivi à la lettre la procédure indiquée dans l'aide AutoCAD.
JM
C'est celui qui est en 2nd lien de mon premier message.
Je me demande s'il ne faut pas que je télécharge le ObjectARX SDK ? En même temps, il n'y en a pasà télécharger pour la version 2005. 😕
Autre question : si je comprends bien, après avoir écrit la routine, il faut créer une dll dans visual studio express, la charge dans autocad avec netload.
Mais comment faire pour débogguer ? C'est possible, comme avec le vba ?
JM
oui on peut débogé
si tu as le VS studio 2010 express il faut ajouter manuellement dans le xxxx.vbproj qui se trouve dans ton projet les lignes suivante :
<StartAction>Program</StartAction>
<StartProgram>c:\Program Files\AutoCAD 2010\acad.exe</StartProgram>
juste après
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
ou
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
de plus selon ton framework il faudra peut-être modifier le acad.exe.config qui est dans le rep d'install d'autocaD.
il suffit d'ajouter <supportedRuntime version="v2.0.50727"/> dedans.
enfin moi je suis en autocad v2010 avec VS2010 express.
pour les version d'avant comme les 2004-2007 ce n'est pas la même version de framework je crois.
ci joint un prog qui marche je te joint le fichier bloc bp.dwg qu'il demandra.
Imports Autodesk.AutoCAD.Runtime Imports Autodesk.AutoCAD.ApplicationServices Imports Autodesk.AutoCAD.DatabaseServices Imports Autodesk.AutoCAD.Windows Imports Autodesk.AutoCAD.LayerManager.LayerFilter Imports Autodesk.AutoCAD.EditorInput Imports System.IO Imports Autodesk.AutoCAD.Geometry Public Class Class1 ' Define command 'Asdkcmd1' <CommandMethod("ImpBloc")> _ Public Sub ImpBloc() 'implanter un bloc Bp Dim DB As Database = HostApplicationServices.WorkingDatabase Dim ed As Editor ed = Application.DocumentManager.MdiActiveDocument.Editor Dim trans As Transaction trans = DB.TransactionManager.StartTransaction 'récupération de la table des block Dim bt As BlockTable = trans.GetObject(db.BlockTableId, OpenMode.ForRead) Dim btr As BlockTableRecord btr = trans.GetObject(bt.Item(BlockTableRecord.ModelSpace), OpenMode.ForWrite) Dim id As ObjectId If bt.Has("bp") Then 'non trouvé Dim btrSrc As BlockTableRecord btrsrc=trans.GetObject(bt.Item("BP"), OpenMode.ForRead) id = btrSrc.Id Else 'pas trouvé donc ajout ! Dim Dbdwg As New Database(False, True) Dbdwg.ReadDwgFile("d:\autocad\bloc.dwg\bp.dwg", FileOpenMode.OpenTryForReadShare, True, "") id = DB.Insert("bp", Dbdwg, False) Dbdwg.Dispose() End If 'Ici nous avons le ID du bloc (définition) 'insertion : Dim opPt As New PromptPointOptions("Sélectionnez un point") Dim resPt As PromptPointResult resPt = ed.GetPoint(opPt) Dim ptInsert As Point3d = Nothing Dim blkRef As BlockReference If resPt.Status = PromptStatus.OK Then ptInsert = resPt.Value blkRef = New BlockReference(ptInsert, id) btr.AppendEntity(blkRef) trans.AddNewlyCreatedDBObject(blkRef, True) ' modify the attribute of the block reference Dim btAttRec As BlockTableRecord btAttRec = trans.GetObject(id, OpenMode.ForRead) Dim idAtt As ObjectId For Each idAtt In btAttRec Dim ent As Entity ent = trans.GetObject(idAtt, OpenMode.ForRead) If TypeOf ent Is AttributeDefinition Then Dim attDef As AttributeDefinition attDef = CType(ent, AttributeDefinition) Dim attRef As New AttributeReference() attRef.SetAttributeFromBlock(attDef, blkRef.BlockTransform) 'Dim ptBase As New Point3d(blkRef.Position.X + attDef.Position.X, blkRef.Position.Y + attDef.Position.Y, blkRef.Position.Z + attDef.Position.Z) 'attRef.Position = ptBase 'attRef.Rotation = attDef.Rotation 'attRef.Tag = attDef.Tag attRef.TextString = "input your data here" 'attRef.Height = attDef.Height 'attRef.FieldLength = attDef.FieldLength Dim idTmp As ObjectId idTmp = blkRef.AttributeCollection.AppendAttribute(attRef) trans.AddNewlyCreatedDBObject(attRef, True) End If Next trans.Commit() Else MsgBox("Point introuable !") trans.Abort() End If '' 'If myBlock.XrefStatus = XrefStatus.NotAnXref And _ ' myBlock.IsLayout = False And _ ' myBlock.IsAnonymous = False Then ' Select Case pStrRes.StringResult ' Case "Oui" ' clAcpBlocks.EchelleUniforme(HostApplicationServices.WorkingDatabase, myBlock.Name, True) ' Case "Non" ' clAcpBlocks.EchelleUniforme(HostApplicationServices.WorkingDatabase, myBlock.Name, False) ' End Select 'End If End Sub
pour débugger il te suffira de lancer l'application en clikant sur RUN il chargera le dll je crois sinon tu le charges manuellement puis tu lances la commande ImpBloc
a+
Salut,
J'avais essayé de faire un tutoriel pour la création d'un "Modèle AutoCAD" pour Visual Studio 2010 ici :
http://www.acadlabs.com/viewtopic.php?f=18&t=2242&p=3539#p3539
Le modèle créé est proposé par Visual Studio à chaque création de nouveau projet et permet de lancer AutoCAD et charger la dll automatiquement au débogage.
Vous n'avez pas trouvé ce que vous recherchiez ? Posez une question à la communauté ou partagez vos connaissances.