Communauté
AutoCAD – tous produits - Français
Bienvenue sur les forums AutoCAD d’Autodesk. Partagez vos connaissances, posez des questions, et explorez les sujets AutoCAD populaires.
annuler
Affichage des résultats de 
Afficher  uniquement  | Rechercher plutôt 
Vouliez-vous dire : 

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

8 RÉPONSES 8
Répondre
Message 1 sur 9
otobox
898 Visites, 8 Réponses

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

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

8 RÉPONSES 8
Message 2 sur 9
AubelecBE
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.

 

 

Message 3 sur 9
otobox
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

Message 4 sur 9
AubelecBE
en réponse à: otobox

peux tu coller ton code ?

Message 5 sur 9
otobox
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

Message 6 sur 9
AubelecBE
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.

 

 

 

Message 7 sur 9
AubelecBE
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+

Message 8 sur 9
otobox
en réponse à: AubelecBE

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

 

JM

Message 9 sur 9
_gile
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
Programmation AutoCAD LISP/.NET
GileCAD
GitHub

Vous n'avez pas trouvé ce que vous recherchiez ? Posez une question à la communauté ou partagez vos connaissances.

Publier dans les forums