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

    .NET

    Reply
    Active Contributor
    tomg
    Posts: 32
    Registered: ‎09-09-2011

    Update Attribute prior to Insert

    108 Views, 3 Replies
    05-29-2012 12:06 PM

    I have a routine that will change attribute text when the block is in the dwg. My problem is that I would like to set the attribute text prior to insertion. Every example that I have found uses promptentityoptions which returns a result.ObjectId. as shown below.

                       

    BlockReference br = (BlockReference)tr.GetObject(result.ObjectId, OpenMode.ForRead);                  

    AttributeCollection attCol = br.AttributeCollection;

     

    What do I use in place of result.ObjectId?

     

    Tom

     

    Please use plain text.
    *Expert Elite*
    Hallex
    Posts: 1,335
    Registered: ‎10-08-2008

    Re: Update Attribute prior to Insert

    05-29-2012 12:51 PM in reply to: tomg

    Shortly do something like this:

                              string atag=ed.Getstring("\nEnter a tag: ").StringResult;
                              string value=ed.Getstring("\nEnter a new attribute value: ").StringResult;
    
                              // Then after the block was inserted
                               //Get visible attributes from BlockReference object
                                Autodesk.AutoCAD.DatabaseServices.AttributeCollection attcoll = bref.AttributeCollection;
    
                                foreach (ObjectId id in attcoll)
                                {
                                    AttributeReference atref = (AttributeReference)tr.GetObject(id, OpenMode.ForRead);
                                   if (atref.Tag== atag.ToUpper())
                                  atref.TextString=value;
                                }

     

    ~'J'~

    _____________________________________
    C6309D9E0751D165D0934D0621DFF27919
    Please use plain text.
    Active Contributor
    tomg
    Posts: 32
    Registered: ‎09-09-2011

    Re: Update Attribute prior to Insert

    05-29-2012 01:37 PM in reply to: Hallex

    I have something like this:

     

    try
      {
         BlockTable bt = (BlockTable)tr.GetObject(sourceDb.BlockTableId,
                                OpenMode.ForRead, false);
         foreach (ObjectId btrId in bt)
         {
            BlockTableRecord btr = (BlockTableRecord)tr.GetObject(btrId, OpenMode.ForRead, false);
            BlockReference br = (BlockReference)tr.GetObject(--What--, OpenMode.ForRead, false);
            AttributeCollection attCol = br.AttributeCollection;
    
    	etc.

     In the BlockReference statement, what is the --What-- object.

     

    Tom

    

    Please use plain text.
    New Member
    Posts: 1
    Registered: ‎05-29-2012

    Re: Update Attribute prior to Insert

    05-29-2012 09:30 PM in reply to: tomg

    For Each attID As ObjectId In RefBTR

                    attEnt = tr.GetObject(attID, OpenMode.ForRead)

                    If TypeOf attEnt Is AttributeDefinition Then

                        Dim attDef As AttributeDefinition = attEnt

                        Dim attRef As AttributeReference = New AttributeReference()

                        attRef.SetAttributeFromBlock(attDef, br.BlockTransform)

                        If attRef.Tag = sTagName Then

                            attRef.TextString = sValue

                            Exit Sub

                        End If

                    End If

                Next

            Catch ex As Autodesk.AutoCAD.Runtime.Exception

                tr.Abort()

            Finally

                tr.Commit()

            End Try

    Please use plain text.