乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 56|回复: 0

[编程交流] 无法复制的属性

[复制链接]

1

主题

1

帖子

0

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 21:57:44 | 显示全部楼层 |阅读模式
大家好,
 
我是AutoCad和AutoCad的完全新手。净额。我遇到了一个问题。我要求用户选择一个块参考,它有三个属性,即LINEUP、BAY和HL。然后我尝试创建一个副本。但不会复制属性“LINEUP”和“BAY”(这些属性的值)。你能帮我解决这个问题吗。
 
带属性的原始块:请参见图像原始块带属性。巴布亚新几内亚
没有属性值的新块:请参见图像NewBlockWithoutAttributes。巴布亚新几内亚
 
这是VB。网络代码:
 
  1. <CommandMethod("WithAttr2")> _
  2.        Public Sub WithAttr2()
  3.            Dim doc As Document = Application.DocumentManager.MdiActiveDocument
  4.            Dim ed As Editor = Application.DocumentManager.MdiActiveDocument.Editor
  5.            Dim database As Database = ed.Document.Database
  6.            Dim blockName As String
  7.            Dim blockRef1 As BlockReference
  8.            Dim options As PromptEntityOptions = New PromptEntityOptions("\nSelect block reference")
  9.            options.SetRejectMessage("\nSelect only block reference")
  10.            options.AddAllowedClass(GetType(BlockReference), False)
  11.            Dim acSSPrompt As PromptEntityResult = ed.GetEntity(options)
  12.            Using tx As Transaction = database.TransactionManager.StartTransaction()
  13.                Dim blockRef As BlockReference = TryCast(tx.GetObject(acSSPrompt.ObjectId, OpenMode.ForRead), BlockReference)
  14.                Dim block As BlockTableRecord = Nothing
  15.                If (blockRef.IsDynamicBlock) Then
  16.                    'get the real dynamic block name.
  17.                    block = TryCast(tx.GetObject(blockRef.DynamicBlockTableRecord, OpenMode.ForRead), BlockTableRecord)
  18.                Else
  19.                    block = TryCast(tx.GetObject(blockRef.BlockTableRecord, OpenMode.ForRead), BlockTableRecord)
  20.                End If
  21.                If (block <> Nothing) Then
  22.                    Dim sfilter As New SelectionFilter(New TypedValue() {New TypedValue(CInt(DxfCode.Start), "INSERT"), New TypedValue(2, block.Name)})
  23.                    Dim res As PromptSelectionResult = ed.SelectAll(sfilter)
  24.                    If res.Status = PromptStatus.OK Then
  25.                        'display result
  26.                        MsgBox("--->  Selected " & res.Value.Count & " objects", res.Value.Count)
  27.                        Dim Objectset As SelectionSet = res.Value
  28.                        For Each id As ObjectId In Objectset.GetObjectIds()
  29.                            blockRef1 = TryCast(tx.GetObject(id, OpenMode.ForRead), BlockReference)
  30.                            MsgBox(blockRef1.Name)
  31.                            blockName = blockRef1.Name
  32.                            'Dim pt As New Point3d(0, 0, 0)
  33.                            'ACADBlockMgr.InsertBlockWithAtt(blockRef1.Name, pt)
  34.                        Next
  35.                    End If
  36.                End If
  37.                tx.Commit()
  38.            End Using
  39.            Using trans As Transaction = database.TransactionManager.StartTransaction
  40.                Dim blkTable As BlockTable = TryCast(database.BlockTableId.GetObject(OpenMode.ForRead), BlockTable)
  41.                Dim blkRecId As ObjectId = blkTable(blockName)
  42.                MsgBox(blkRecId.ToString())
  43.                If blkRecId <> ObjectId.Null Then
  44.                    Dim blkTableRecord As BlockTableRecord = trans.GetObject(blkRecId, OpenMode.ForRead)
  45.                    Using acBlkRef As New BlockReference(New Point3d(2, 2, 0), blkTableRecord.Id)
  46.                        Dim currentSpaceBlkTableRec As BlockTableRecord = trans.GetObject(database.CurrentSpaceId, OpenMode.ForWrite)
  47.                        currentSpaceBlkTableRec.AppendEntity(acBlkRef)
  48.                        trans.AddNewlyCreatedDBObject(acBlkRef, True)
  49.                        'Check For Attributes
  50.                        If blkTableRecord.HasAttributeDefinitions Then
  51.                            'Add attributes from Block Table Records
  52.                            For Each objId As ObjectId In blkTableRecord
  53.                                Dim dbObj As DBObject = trans.GetObject(objId, OpenMode.ForRead)
  54.                                If TypeOf dbObj Is AttributeDefinition Then
  55.                                    Dim attrDef As AttributeDefinition = dbObj
  56.                                    MsgBox(attrDef.Tag & " " & attrDef.TextString)
  57.                                    If Not attrDef.Constant Then
  58.                                        Using attRef As New AttributeReference
  59.                                            attRef.SetAttributeFromBlock(attrDef, acBlkRef.BlockTransform)
  60.                                            attRef.Position = attRef.Position.TransformBy(acBlkRef.BlockTransform)
  61.                                            attRef.TextString = attrDef.TextString
  62.                                            acBlkRef.AttributeCollection.AppendAttribute(attRef)
  63.                                            trans.AddNewlyCreatedDBObject(attRef, True)
  64.                                        End Using
  65.                                    End If
  66.                                End If
  67.                            Next
  68.                        End If
  69.                    End Using
  70.                End If
  71.                trans.Commit()
  72.            End Using
  73.        End Sub

 
我做错了什么。请让我知道。
 
提前感谢,
Abhilash D K
225746mnjkvfoton0jannn.png
225748bxf23ymqtr1amqf2.png
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-4 13:01 , Processed in 0.530200 second(s), 68 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表