【发布时间】:2015-04-24 21:12:07
【问题描述】:
美好的一天,
我遇到的问题是,c# 程序在提示用户识别的各个不同点处将 10 个块(通过矩阵变换方法)插入到绘图中。
块在名称和属性方面是相同的,唯一不同的是它们的 X 和 Y 值。
我需要一种方法来在用户提示时更改某些块的属性,例如块 7 并且仅块 7。而不更改其他 9 个相同块的同名属性。
有没有办法扫描所有块并专门根据它们的 X 和 Y 值找到一个块?然后编辑该特定块的属性。
编辑:
我使用下面的方法代码添加了块,路径绘制只包含一个块。
我现在需要做的是更改该块的文本属性,这意味着我需要我的代码来找到它。我考虑过使用选择方法,但我更愿意让这部分代码自动化,并且不希望用户必须选择所需的块。
我可以让代码扫描所有块以查找具有该特定名称的块,然后再次扫描这些块以查找所需 X 和 Y 插入点位置的块(这可能吗?)(我的程序处理 X和 Y 位置更早,因此我知道这些点,不需要用户再次给它们)。为方便起见,称它们为 BlkPt1 - BlkPt10。
但是扫描所有块的方法在有很多块的大型图纸上可能有点密集,有没有更短的方法?我知道一种解决方案是改变插入块的方式,但我真的很讨厌通常的块引用/块表记录插入方法。没有别的办法吗?
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();
}
}
【问题讨论】:
-
看看这里,我想你只需要改变选择提示符就可以满足你的需要。 through-the-interface.typepad.com/through_the_interface/2006/09/…
-
您使用的是 COM 包装器还是标准引用?我可以发布一堆代码,但它会放弃商店。如果您可以发布您所拥有的,也许我可以为您指明正确的方向。