///<inheritdoc/> protected override void SetupHandler() { OptionGroup scopeGroup = Handler.AddGroup(SCOPE); scopeGroup.AddBool(PLACE_NODE_LABELS, true); scopeGroup.AddBool(PLACE_EDGE_LABELS, true); scopeGroup.AddBool(CONSIDER_SELECTED_FEATURES_ONLY, false); OptionGroup qualityGroup = Handler.AddGroup(QUALITY); qualityGroup.AddBool(USE_OPTIMIZATION, false); qualityGroup.AddOptionItem(new OptionItem(OPTIMIZATION_STRATEGY) { Value = OptimizationStrategy.Balanced, Type = typeof(OptimizationStrategy) }); qualityGroup.AddBool(ALLOW_NODE_OVERLAPS, false); qualityGroup.AddBool(ALLOW_EDGE_OVERLAPS, true); qualityGroup.AddBool(USE_POSTPROCESSING, false); var edgeLabelGroup = Handler.AddGroup(MODEL); var labelModelItem = edgeLabelGroup.AddList(EDGE_LABEL_MODEL, edgeLabelModel, BEST); var autoRotationItem = edgeLabelGroup.AddBool(AUTO_ROTATE, true); ConstraintManager cm = new ConstraintManager(Handler); cm.SetEnabledOnCondition(cm.CreateValueIsOneOfCondition(labelModelItem, CENTER_SLIDER, SIDE_SLIDER), autoRotationItem); }
///<inheritdoc/> protected override void SetupHandler() { CreateOrganic(); ConstraintManager cm = new ConstraintManager(Handler); OptionGroup visualGroup = Handler.AddGroup(VISUAL); visualGroup.AddList(SCOPE, scopes.Keys, SCOPE_ALL); visualGroup.AddInt(PREFERRED_EDGE_LENGTH, (int)organic.PreferredEdgeLength, 5, int.MaxValue); IOptionItem considerNodeLabelsItem = visualGroup.AddBool(CONSIDER_NODE_LABELS, organic.ConsiderNodeLabels); IOptionItem allowNodeOverlapsItem = visualGroup.AddBool(ALLOW_NODE_OVERLAPS, organic.NodeOverlapsAllowed); IOptionItem minDistItem = visualGroup.AddDouble(MINIMAL_NODE_DISTANCE, 10, 0, double.MaxValue); ICondition condition = ConstraintManager.LogicalCondition.Or(cm.CreateValueEqualsCondition(allowNodeOverlapsItem, false), cm.CreateValueEqualsCondition(considerNodeLabelsItem, true)); cm.SetEnabledOnCondition(condition, minDistItem); visualGroup.AddBool(AVOID_NODE_EDGE_OVERLAPS, organic.NodeEdgeOverlapAvoided); cm.SetEnabledOnValueEquals(considerNodeLabelsItem, false, allowNodeOverlapsItem); visualGroup.AddDouble(COMPACTNESS, organic.CompactnessFactor, 0, 1); visualGroup.AddBool(USE_AUTO_CLUSTERING, organic.ClusterNodes); visualGroup.AddDouble(AUTO_CLUSTERING_QUALITY, organic.ClusteringQuality, 0, 1); cm.SetEnabledOnValueEquals(visualGroup[USE_AUTO_CLUSTERING], true, visualGroup[AUTO_CLUSTERING_QUALITY]); OptionGroup outputRestrictionsGroup = Handler.AddGroup(RESTRICTIONS); OptionItem outputRestrictionsItem = outputRestrictionsGroup.AddList(RESTRICT_OUTPUT, outputRestrictions, NONE); OptionGroup outputCageGroup = outputRestrictionsGroup.AddGroup(BOUNDS); ICondition cond = cm.CreateValueIsOneOfCondition(outputRestrictionsItem, OUTPUT_CAGE, OUTPUT_ELLIPTICAL_CAGE); cm.SetEnabledOnCondition(cond, outputCageGroup); //IOptionItem rectCageUseViewItem = new BoolOptionItem(RECT_CAGE_USE_VIEW, true); IOptionItem rectCageUseViewItem = outputCageGroup.AddBool(RECT_CAGE_USE_VIEW, true); IOptionItem cageXItem = outputCageGroup.AddDouble(CAGE_X, 0.0d); IOptionItem cageYItem = outputCageGroup.AddDouble(CAGE_Y, 0.0d); IOptionItem cageWidthItem = outputCageGroup.AddDouble(CAGE_WIDTH, 1000.0d, 1, double.MaxValue); IOptionItem cageHeightItem = outputCageGroup.AddDouble(CAGE_HEIGHT, 1000.0d, 1, double.MaxValue); cm.SetEnabledOnValueEquals(rectCageUseViewItem, false, cageXItem); cm.SetEnabledOnValueEquals(rectCageUseViewItem, false, cageYItem); cm.SetEnabledOnValueEquals(rectCageUseViewItem, false, cageWidthItem); cm.SetEnabledOnValueEquals(rectCageUseViewItem, false, cageHeightItem); OptionGroup outputARGroup = outputRestrictionsGroup.AddGroup(OUTPUT_AR); cm.SetEnabledOnValueEquals(outputRestrictionsItem, OUTPUT_AR, outputARGroup); IOptionItem arCageUseViewItem = outputARGroup.AddBool(AR_CAGE_USE_VIEW, true); IOptionItem cageRatioItem = outputARGroup.AddDouble(CAGE_RATIO, 1.0d); cm.SetEnabledOnValueEquals(arCageUseViewItem, false, cageRatioItem); OptionGroup groupingGroup = Handler.AddGroup(GROUPING); groupingGroup.AddList(GROUP_LAYOUT_POLICY, groupModes, LAYOUT_GROUPS); OptionGroup algorithmGroup = Handler.AddGroup(ALGORITHM); algorithmGroup.AddDouble(QUALITY_TIME_RATIO, organic.QualityTimeRatio, 0, 1); algorithmGroup.AddInt(MAXIMAL_DURATION, (int)(organic.MaximumDuration / 1000), 0, int.MaxValue); algorithmGroup.AddBool(ACTIVATE_DETERMINISTIC_MODE, organic.Deterministic); algorithmGroup.AddBool(ALLOW_MULTI_THREADING, true); }
/// <inheritdoc/> public virtual void AddItems(IOptionBuilderContext context, Type subjectType, object subject) { // CollectionOptionItem<string> fillTypeItem = // new CollectionOptionItem<string>(DefaultBrushPropertyMapBuilder.FillType, // new string[] { // DefaultBrushPropertyMapBuilder.SolidBrushFillType, // DefaultBrushPropertyMapBuilder.HatchBrushFillType, // DefaultBrushPropertyMapBuilder.LinearGradientBrushFillType, // DefaultBrushPropertyMapBuilder.TextureBrushFillType // }); GenericOptionItem <BrushTypes> fillTypeItem = new GenericOptionItem <BrushTypes>(DefaultBrushPropertyMapBuilder.FillType); fillTypeItem.SetAttribute(OptionItem.SUPPORT_NULL_VALUE_ATTRIBUTE, AllowNullValue); // fillTypeItem.SetAttribute(OptionItem.NULL_VALUE_OBJECT, BrushTypes.Nothing); fillTypeItem.SetAttribute(OptionItem.NULL_VALUE_STRING_ATTRIBUTE, "Nothing"); bool fillTypeAdded = context.BindItem(fillTypeItem, DefaultBrushPropertyMapBuilder.FillType ); ColorOptionItem foreColorItem = new ColorOptionItem(DefaultBrushPropertyMapBuilder.ForegroundColor); bool foreColorAdded = context.BindItem(foreColorItem, DefaultBrushPropertyMapBuilder.ForegroundColor); ColorOptionItem backColorOptionItem = new ColorOptionItem(DefaultBrushPropertyMapBuilder.BackgroundColor); bool backColorAdded = context.BindItem(backColorOptionItem, DefaultBrushPropertyMapBuilder.BackgroundColor); GenericOptionItem <HatchStyle> hatchStyleItem = new GenericOptionItem <HatchStyle>(DefaultBrushPropertyMapBuilder.HatchStyle, OptionItem.VALUE_UNDEFINED); hatchStyleItem.SetAttribute(OptionItem.SUPPORT_UNDEFINED_VALUE_ATTRIBUTE, true); hatchStyleItem.SetAttribute(OptionItem.SUPPORT_NULL_VALUE_ATTRIBUTE, false); bool hatchItemAdded = context.BindItem(hatchStyleItem, DefaultBrushPropertyMapBuilder.HatchStyle); if (hatchItemAdded) { EnumUITypeEditor <HatchStyle> hatchEditor = new EnumUITypeEditor <HatchStyle>(); hatchEditor.Renderer = new HatchStyleItemRenderer(); hatchStyleItem.SetAttribute(OptionItem.CUSTOM_TABLEITEM_EDITOR, hatchEditor); } FloatOptionItem rotationItem = new FloatOptionItem(DefaultBrushPropertyMapBuilder.Rotation); bool floatItemAdded = context.BindItem(rotationItem, DefaultBrushPropertyMapBuilder.Rotation); GenericOptionItem <Image> imageItem = new GenericOptionItem <Image>(DefaultBrushPropertyMapBuilder.Image, OptionItem.VALUE_UNDEFINED); imageItem.SetAttribute(OptionItem.SUPPORT_UNDEFINED_VALUE_ATTRIBUTE, true); imageItem.SetAttribute(OptionItem.SUPPORT_NULL_VALUE_ATTRIBUTE, false); bool imageItemAdded = context.BindItem(imageItem, DefaultBrushPropertyMapBuilder.Image); if (fillTypeAdded) { ConstraintManager cm = context.Lookup <ConstraintManager>(); if (cm != null) { if (foreColorAdded) { ICondition cond = cm.CreateValueIsOneOfCondition(fillTypeItem, BrushTypes.SolidBrush, BrushTypes.HatchBrush, BrushTypes.LinearGradientBrush); cm.SetEnabledOnCondition(cond, foreColorItem); } if (backColorAdded) { ICondition cond = cm.CreateValueIsOneOfCondition(fillTypeItem, BrushTypes.HatchBrush, BrushTypes.LinearGradientBrush); cm.SetEnabledOnCondition(cond, backColorOptionItem); } if (hatchItemAdded) { cm.SetEnabledOnValueEquals(fillTypeItem, BrushTypes.HatchBrush, hatchStyleItem); } if (imageItemAdded) { cm.SetEnabledOnValueEquals(fillTypeItem, BrushTypes.TextureBrush, imageItem); } if (floatItemAdded) { cm.SetEnabledOnValueEquals(fillTypeItem, BrushTypes.LinearGradientBrush, rotationItem); } } } }