有客户问道怎么修改视图的裁剪区域没有反应呢?
他是这么做的,首先创建一个视图,然后修改它的裁剪区域:
ViewFamilyType vTypeElev = Class1.getviewfamilytypes(
ViewFamily.FloorPlan, RevitDoc).First<ViewFamilyType>();
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<Curve> nl = new List<Curve>();
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. 以上代码都是测试代码,目的是展示某些问题的解决办法,不可作为代码的规范,例如没有考虑错误检查,扩展性等等。