• Industries
  • Products
  • Buy
  • Services & Support
  • Communities
  • Discussion Groups

    AutoCAD - Francais

    Répondre
    Mentor
    Envois : 214
    Inscrit : ‎05-23-2005

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

    203 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

    Veuillez utiliser du texte brut.
    Mentor
    Envois : 260
    Inscrit : ‎01-27-2010

    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.

     

     

    Veuillez utiliser du texte brut.
    Mentor
    Envois : 214
    Inscrit : ‎05-23-2005

    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

    Veuillez utiliser du texte brut.
    Mentor
    Envois : 260
    Inscrit : ‎01-27-2010

    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 ?

    Veuillez utiliser du texte brut.
    Mentor
    Envois : 214
    Inscrit : ‎05-23-2005

    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

    Veuillez utiliser du texte brut.
    Mentor
    Envois : 260
    Inscrit : ‎01-27-2010

    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.

     

     

     

    Veuillez utiliser du texte brut.
    Mentor
    Envois : 260
    Inscrit : ‎01-27-2010

    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+

    Veuillez utiliser du texte brut.
    Mentor
    Envois : 214
    Inscrit : ‎05-23-2005

    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

    Veuillez utiliser du texte brut.
    *Expert Elite*
    Envois : 1 646
    Inscrit : ‎04-29-2006

    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
    Veuillez utiliser du texte brut.