C# 当多个块具有相同名称时搜索特定块

C# 当多个块具有相同名称时搜索特定块,c#,.net,autocad,C#,.net,Autocad,你好 我遇到了一个问题,c程序通过矩阵变换方法在图形上的不同点插入10个块,提示用户识别 这些块在名称和属性方面是相同的,唯一不同的是它们的X和Y值 我需要一种方法在用户提示下更改某些块的属性,例如块7和仅块7。不更改其他9个相同块的同名属性 是否有一种方法可以扫描所有的块并根据它们的X和Y值找到一个块?然后编辑该特定块的属性 编辑: 我使用下面的方法代码添加了块,路径图只包含一个块 我现在需要做的是更改该块的文本属性,这意味着我需要我的代码来找到它。我考虑过使用一种选择方法,但我更愿意让这部分

你好

我遇到了一个问题,c程序通过矩阵变换方法在图形上的不同点插入10个块,提示用户识别

这些块在名称和属性方面是相同的,唯一不同的是它们的X和Y值

我需要一种方法在用户提示下更改某些块的属性,例如块7和仅块7。不更改其他9个相同块的同名属性

是否有一种方法可以扫描所有的块并根据它们的X和Y值找到一个块?然后编辑该特定块的属性

编辑:

我使用下面的方法代码添加了块,路径图只包含一个块

我现在需要做的是更改该块的文本属性,这意味着我需要我的代码来找到它。我考虑过使用一种选择方法,但我更愿意让这部分代码自动化,而不希望用户必须选择所需的块

我可以让代码扫描所有的块,寻找具有特定名称的块,然后在需要的X和Y插入点位置再次扫描这些块,这是可能的吗?我的程序早些时候处理X和Y位置,因此我知道这些点,不需要用户再次给出它们。为了便于提问,请将其命名为BlkPt1-BlkPt10

但是扫描所有块的方法在有许多块的较大图形上可能有点紧张,有没有一种较短的方法?我知道一个解决方案是改变插入块的方式,但我真的很讨厌通常的blockreference/blocktablerecord插入方法。没有别的办法吗

    using (tr)
    {
        Vector3d blockDisplacement1 = new Vector3d(ptInsert.Value.X, ptInsert.Value.Y, ptInsert.Value.Z);

        double blockScale = 1.0;

        string blockPath = @"T:\test.dwg";

        Database tmpDb = new Database(false, true);
        tmpDb.ReadDwgFile(blockPath, System.IO.FileShare.Read, true, "");

        Matrix3d Transform = Matrix3d
                    .Scaling(blockScale, Point3d.Origin)
                    .PreMultiplyBy(Matrix3d.Displacement(blockDisplacement1))
                    .PreMultiplyBy(ed.CurrentUserCoordinateSystem);

        db.Insert(Transform, tmpDb, true);

        tr.Commit();
        tr.Dispose();
    }
}
在插入块后跟踪指定给块的.Handle-这是AutoCAD数据库中对象的唯一标识符。它仅对特定数据库是唯一的,而不是全局唯一的。不要试图使用.ObjectId来跟踪它,它会在会话之间更改,.Handle是一致的

确保要更改的AttributeReference不是.Constant,因为它对于该块定义的每个引用都是相同的

tr.处置;在using{}语句中不需要,只需tr.Commit;很好


有关AutoCAD代码内容的更多链接,请参见。

请查看此处,我认为您只需更改选择提示即可使其符合您的需要。您使用的是COM包装还是标准引用?我可以发布一堆代码,但这会泄露商店。如果你能发布你所拥有的,也许我可以为你指出正确的方向。