just_joke 发表于 2012-11-23 21:37:15

修改属性块的比例问题

         对于属性块,在autocad中块的属性面板中修改其XYZ的比例时,其属性标注的大小、位置会随着比例变化。但是在程序中修改BlockReference的ScaleFactors后,其属性标注的大小及位置并不改变。
         之后,遍历BlockReference的AttributeCollection,获取到每个AttributeReference。这里可以设置AttributeReference的高度,但是其Position或者AligmentPoint却无法通过程序改变。请教各位大神,要怎么通过程序改变AttributeReference的位置?

sieben 发表于 2012-11-23 22:54:44

public bool LockPositionInBlock { get; }
    Autodesk.AutoCAD.DatabaseServices.AttributeReference 的成员
public bool LockPositionInBlock { set; get; }
    Autodesk.AutoCAD.DatabaseServices.AttributeDefinition 的成员

just_joke 发表于 2012-11-25 15:48:47

sieben 发表于 2012-11-23 22:54 static/image/common/back.gif
public bool LockPositionInBlock { get; }
    Autodesk.AutoCAD.DatabaseServices.AttributeReference 的 ...

多谢,问题解决了。不过不知道你看的是哪个版本的帮助,我用的autocad map 3d 2012,和你的还有点差别。

我定义的属性块中有些属性的位置是锁定的,有些没锁定,有些设置了对齐方式,另外的没有。具体实现代码如下:
AttributeReference.LockPositionInBlock = false;
try
{
    AttributeReference.Alignment = AttributeReference.Alignment.ScaleBy(TansScale,BlockReference.Position);
}
catch
{
    AttributeReference.Position= AttributeReference.Position.ScaleBy(TansScale,BlockReference.Position);
}
AttributeReference.LockPositionInBlock = true;

shmily1023 发表于 2013-5-27 23:16:10

高手 能不能来段完整的?小弟正被这问题困扰着呢!

shmily1023 发表于 2013-5-28 22:43:47

备忘:

double scale =2; //需要放大 or缩小的倍数
BlockReference br = ent as BlockReference;
Matrix3d sMtx = Matrix3d.Scaling(scale, br.Position);
br.TransformBy(sMtx);
页: [1]
查看完整版本: 修改属性块的比例问题