Изменение размера области подрезки
Наблюдается странное поведение при изменении размера области подрезки.
Что я делал. Сначала я создал вид, затем установил область подрезки:
- 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;
В этом случае все работает, как и ожидалось.
Однако, когда я только меняю область подрезки, без создания вида, то ничего не происходит.
- 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;
Я попробовал тот же самый код на своем компьютере и, как ни странно, он работает. Я не уверен, почему так происходит.
Тем не менее, я могу предложить альтернативный вариант – использовать метод SetCropRegionShape класса ViewCropRegionShapeManager:
- 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);
- }
Этот метод является более мощным и гибким, так как с помощью него можно задать не только прямоугольную область подрезки, но и область подрезки произвольного вида.
Источник: http://adndevblog.typepad.com/aec/2015/03/revitapi-how-to-resize-cropbox-of-view.html
Обсуждение: http://adn-cis.org/forum/index.php?topic=2603
Опубликовано 31.03.2015