CE Display Rules C#

Hello, I'm trying to develop an add-in for creating Display Rules in c #. I have a problem creating the condition to pass as a parameter to the constructor of the DisplayRule class.
At this link "">www.bimsdks.com/.../structBentley_1_1DgnPlatform_1_1DisplayRule.html" I found some examples (see Condition format and types) but they are very few.

I implemented the following code that works:

string MyRuleCondition = @"element.IsOfClass (""ShapeElement"",""DgnElementSchema"")";

DisplayRuleSet displayRuleSet = new DisplayRuleSet(RuleStenName, dgnFile);
DisplayRulesManager.WriteDisplayRuleSetToFile(displayRuleSet, dgnFile, true);
DisplayRule displayRuleElement = new DisplayRule(MyRuleCondition, true, dgnFile);

IDisplayRuleAction ruleAction = new ColorOverrideAction(5, dgnFile);
displayRuleElement.AddAction(ruleAction);
displayRuleSet.AddDisplayRule(displayRuleElement);
DisplayRulesManager.WriteDisplayRuleSetToFile(displayRuleSet, dgnFile, true);

keyInCommand.SendKeyin("MDL KEYIN CUSTOMDISPMODE DIALOG DISPLAYSTYLES");
keyInCommand.SendKeyin(@"DISPLAYSTYLE CREATE ""DISPLAY_STYLE_BY_KEYIN""");

keyInCommand.SendKeyin(@"MDL KEYIN VIEWCTRL CHANGE VIEW CUSTOM ""DISPLAY_STYLE_BY_KEYIN"" 1");
keyInCommand.SendKeyin(@"DISPLAYSTYLE SETPARAM DISPLAYRULESET ""DISPLAY_STYLE_BY_KEYIN"" ""Rule""");
ustnApp.CommandState.StartDefaultCommand();


I should implement a RuleCondition that evaluates the value of a property of an ItemType,
does anyone know a way, a tool, or examples (in c #) to create RuleConditions?

Thanks for the help, greetings

  • the link

    https://docs.bentley.com/LiveContent/web/MicroStation%20Help-v15/en/BetaExpressions.html

    doesn't exist?  Just goes to Bentley docs.
    Can you give the proper link or is this another link only available to Bentley employees?
    Which Bentley Doc lists the Beta Expressions?

    Display rules use ECExpressions?
    Does that mean you can use string.empty  as an empty string value in Item display rules?
    Or IsNullOrEmpty?


    tried to use the above, but didn't work for me, only the workaround did.
    CE update 14.

    Wouldn't ECExpression SymbolSet System.String need to be loaded to use string ECExpressions?

    communities.bentley.com/.../ecexpressions-explained-calculated-ecproperty

     think there should be a simpler list of what expressions if any that you can use in Display Rules.

  • CE update 14

    Expressions have advanced in recent versions of MicroStation CONNECT.  You'll find plenty by searching for Expressions in Update 16 help.

    If you're looking to create a display rule programmatically, then start with the C++ MicroStationAPI documentation.  For example...

    DisplayRuleSetPtr ruleSet = DisplayRuleSet::Create(L"RuleSetName", *dgnFile_);
    DisplayRulePtr MakeRule (WCharCP itemTypeName, WCharCP propName, WCharCP condition)
    {
      WString prop (propName);
      WString rule;
      rule.Sprintf (L"element.%s::%s::%s%s",
        ItemTypes::SchemaInternalName ().c_str (),
        ItemTypes::GetInternalName (itemTypeName).c_str (),
        propName,
        condition);
      return MakeRule(rule.c_str ());
    }
    DisplayRulePtr    MakeRule (WCharCP rule)
    {
      const bool    StopIfTrue    {true};
      DisplayRulePtr  displayRule   {DisplayRule::Create(rule, StopIfTrue , *dgnFile_)};
      const bool    valid      {displayRule.IsValid ()};
      if (valid)
      {
        // Created Display Rule:  rule
      }
      else
      {
        // Display rule instruction rule is invalid
      }
      return displayRule;
    }

     
    Regards, Jon Summers
    LA Solutions

  • Hi Karsten,

    doesn't exist? 

    Well, when you re-open nearly a year old discussion, links can be invalid. I think it is not surprise.

    From the link it is visible it points to online documentation of some previous MicroStation version, which is not available now (I guess it was Update 14 or similar).

    Can you give the proper link

    I guess Jon answered this part already. To try to use Search in MicroStation documentation is where you should always start. It is really not difficult (15 seconds?) to find the same link in the current version: https://docs.bentley.com/LiveContent/web/MicroStation%20Help-v19/en/BetaExpressions.html

    or is this another link only available to Bentley employees?

    How can I know what links are available to Bentley employees?

    Display rules use ECExpressions?

    As documentation (DisplayRule Struct Reference) clearly tells: DisplayRule condition is based on ECExpressions.

    So, every rule is string, evaluated as ECExpression. The result is always true / false.

    Does that mean you can use string.empty  as an empty string value in Item display rules?

    In my opinion, not. And even when it would be possible, it is bad idea because of performance (do you know anything slower than string operations? ;-)

    As mentioned in documentation: Conditions should specify only stored values

    There is also written: Condition supports simple property value comparison as well as complicated conditions with AND and OR operators. No information about using Symbol Providers (libraries) to be able to extend standard comparisons.

    Following this rule, I think proper solution (somebody can say it is workaround) is to add extra bool property, containing ECExpression, defining whether source string property is null/empty. The result can be easily evaluated in Display Rule condition.

    think there should be a simpler list of what expressions if any that you can use in Display Rules.

    I think it is well enough (even when not ideally) described in API documentation: When you are not sure about syntax, use GUI to define condition and check how it is persisted.

    With regards,

      Jan