RevitAPI: 修改视图View裁剪区域Cropbox的大小

有客户问道怎么修改视图的裁剪区域没有反应呢?

他是这么做的,首先创建一个视图,然后修改它的裁剪区域:

ViewFamilyType vTypeElev = Class1.getviewfamilytypes(
    ViewFamily.FloorPlan, RevitDoc).First();
var view = ViewPlan.Create(RevitDoc, vTypeElev.Id, 
    RevitDoc.ActiveView.GenLevel.Id);
view.CropBoxActive = true;
BoundingBoxXYZ box = new BoundingBoxXYZ();
box.Min = new XYZ(100, 100, 0);
box.Max = new XYZ(200, 200, 100);
view.CropBox = box;

以上可以正常工作。(注意,以上代码需要在Transaction里面调用)

但是他单独修改裁剪区域的时候,却没有任何反应:

var view = RevitDoc.ActiveView;
BoundingBoxXYZ box = new BoundingBoxXYZ();
box.Min = new XYZ(0, 0, 0);
box.Max = new XYZ(100, 100, 100);
view.CropBox = box;

我试了一下,在我机器上的Revit是没有问题的。不清楚为什么他那边不行。

虽然无法重现,但是我还是建议他使用另外一种方式,那就是,调用ViewCropRegionShapeManager类的SetCropRegionShape函数:

double length = 100;
var view = RevitDoc.ActiveView;
List nl = new List();
XYZ p2 = new XYZ(0, 0, 0);
XYZ p3 = new XYZ(length, 0, 0);
XYZ p4 = new XYZ(length, length, 0);
XYZ p5 = new XYZ(0, length, 0);
nl.Add(Line.CreateBound(p2, p3));
nl.Add(Line.CreateBound(p3, p4));
nl.Add(Line.CreateBound(p4, p5));
nl.Add(Line.CreateBound(p5, p2));
CurveLoop cl = CurveLoop.Create(nl);
ViewCropRegionShapeManager vpcr = view.GetCropRegionShapeManager();
bool cropValid = vpcr.IsCropRegionShapeValid(cl);
if (cropValid)
{
    vpcr.SetCropRegionShape(cl);
}

这个函数相对灵活一点,可以设置除了矩形之外的其他形状。

P.S. 以上代码都是测试代码,目的是展示某些问题的解决办法,不可作为代码的规范,例如没有考虑错误检查,扩展性等等。

你可能感兴趣的:(View,RevitAPI)