2014-10-13 3 views
0

Я работаю над программой C#, предназначенной для вставки блока уже на чертеж autocad в любое место, на которое пользователь нажимает и автоматически добавляет строковое значение к первому настраиваемому атрибуту. Я сделал часть этого, создав новую ссылку на блок с новым местоположением с щелчком и существующим именем блока.Вставка существующего блока с предопределенными атрибутами

Только по какой-то причине два специальных атрибута существующего блока в новом блоке отсутствуют, он просто показывает строки блока без текста. См. Небольшую часть программы ниже. Кто-нибудь знает, почему существующие атрибуты блоков не добавляются в новый блок, и если да, то как мне это сделать? Я прошел через несколько форумов по этому вопросу, и все они показывают, как создавать новые атрибуты, а не получать предопределенные атрибуты из существующего блока и добавлять их в новый.

Scale3d blkScale = new Scale3d(drgScalemm, drgScalemm, drgScalemm); 
ObjectId bdId = bt[blkName]; 
Point3d pt = ptInsert.Value; 

BlockReference insblkref = new BlockReference(pt, bdId); 
insblkref.ScaleFactors = blkScale; 
insblkref.Rotation = 0; 

btr.AppendEntity(insblkref); 
tr.AddNewlyCreatedDBObject(insblkref, true); 

ответ

1

Вы принимаете неверное предположение. Атрибуты автоматически не вставляются из определения блока при вставке блока из «кода». Поэтому вам нужно добавить атрибуты «вручную».

Кодекс пропущено в VB:

Sub AttributenToevoegen(ByVal BlokRefId As ObjectId) 
     Dim doc = Application.DocumentManager.MdiActiveDocument 
     Dim dwg = doc.Database 
     Using doc.LockDocument 
      Using transactie = doc.TransactionManager.StartTransaction() 
       Try 

        Dim Ref As BlockReference 
        Ref = transactie.GetObject(BlokRefId, OpenMode.ForWrite) 
        Dim a = Ref.Name 

        Dim BlokDefinities As BlockTable 
        BlokDefinities = transactie.GetObject(dwg.BlockTableId, OpenMode.ForRead) 
        Dim Blokdefid = BlokDefinities(Ref.Name) 
        Dim BlokDefinitie As BlockTableRecord 
        BlokDefinitie = transactie.GetObject(Blokdefid, OpenMode.ForRead) 

        Dim AttRefIdColl = Ref.AttributeCollection 

        For Each elementId In BlokDefinitie 
         Dim Element As Entity 
         Element = transactie.GetObject(elementId, OpenMode.ForRead) 

         If TypeOf Element Is AttributeDefinition Then 
          Dim attribuutdefinitie = CType(Element, AttributeDefinition) 
          Dim attribuutreferentie As New AttributeReference 
          attribuutreferentie.SetAttributeFromBlock(attribuutdefinitie, Ref.BlockTransform) 
          AttRefIdColl.AppendAttribute(attribuutreferentie) 
          transactie.AddNewlyCreatedDBObject(attribuutreferentie, True) 
         End If 
        Next 

        transactie.Commit() 
       Catch ex As Exception 
        MsgBox("Er ging iets fout: " & vbCrLf & ex.Message) 
       End Try 
      End Using 
     End Using 
Смежные вопросы