AutoCAD - Francais

AutoCAD - Francais

Répondre
Valued Mentor
otobox
Envois : 337
Inscrit : ‎05-23-2005
Message 1 sur 9 (406 visites)

vb.NET : AddNewlyCreatedDBObject n'est pas un membre de...

406 Visites, 8 Réponses
06-10-2012 01:59 AM

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

http://docs.autodesk.com/ACD/2010/ENU/AutoCAD%20.NET%20Developer%27s%20Guide/files/WS1a9193826455f5f...

 

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

Valued Mentor
AubelecBE
Envois : 381
Inscrit : ‎01-27-2010
Message 2 sur 9 (398 visites)

Re : vb.NET : AddNewlyCreatedDBObject n'est pas un membre de...

06-10-2012 09:14 AM en réponse à: otobox

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.

 

 

Valued Mentor
otobox
Envois : 337
Inscrit : ‎05-23-2005
Message 3 sur 9 (388 visites)

Re : vb.NET : AddNewlyCreatedDBObject n'est pas un membre de...

06-12-2012 10:34 PM en réponse à: AubelecBE

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

Valued Mentor
AubelecBE
Envois : 381
Inscrit : ‎01-27-2010
Message 4 sur 9 (382 visites)

Re : vb.NET : AddNewlyCreatedDBObject n'est pas un membre de...

06-13-2012 09:46 AM en réponse à: otobox

peux tu coller ton code ?

Valued Mentor
otobox
Envois : 337
Inscrit : ‎05-23-2005
Message 5 sur 9 (379 visites)

Re : vb.NET : AddNewlyCreatedDBObject n'est pas un membre de...

[ modifié ]
06-14-2012 09:52 AM en réponse à: AubelecBE

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

Valued Mentor
AubelecBE
Envois : 381
Inscrit : ‎01-27-2010
Message 6 sur 9 (374 visites)

Re : vb.NET : AddNewlyCreatedDBObject n'est pas un membre de...

06-14-2012 12:55 PM en réponse à: otobox

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.

 

 

 

Valued Mentor
AubelecBE
Envois : 381
Inscrit : ‎01-27-2010
Message 7 sur 9 (373 visites)

Re : vb.NET : AddNewlyCreatedDBObject n'est pas un membre de...

06-14-2012 01:07 PM en réponse à: AubelecBE

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+

Valued Mentor
otobox
Envois : 337
Inscrit : ‎05-23-2005
Message 8 sur 9 (370 visites)

Re : vb.NET : AddNewlyCreatedDBObject n'est pas un membre de...

06-16-2012 12:03 AM en réponse à: AubelecBE

OK, je vais regarder ça. Merci pour ton aide :smileyhappy:

 

JM

*Expert Elite*
_gile
Envois : 2 082
Inscrit : ‎04-29-2006
Message 9 sur 9 (367 visites)

Re : vb.NET : AddNewlyCreatedDBObject n'est pas un membre de...

[ modifié ]
06-16-2012 08:35 AM en réponse à: otobox

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.

Gilles Chanteau
Annonces
Are you familiar with the Autodesk Expert Elites? The Expert Elite program is made up of customers that help other customers by sharing knowledge and exemplifying an engaging style of collaboration. To learn more, please visit our Expert Elite website.