Eto panel is not rendered/refreshed correctly in ObjectPropertiesPage

Hi All,

I have created a customized ObjectPropertiesPage and its PageControl will be updated (via overriding UpdatePage()) when selected object changes.

Here is a problem it is kind of randomly occurring: it seems the panel is not rendered/refreshed correctly sometime. It will show up correctly until the cursor moves above or re-select the rhino object.

2020-04-15-20-27-07

Do you have solutions to fix this?

Thanks in advance,
Mingbo

cc @dale

Hi @mingo1214,

Yeah, were going to need more than a video to help. Are you using Eto, WPF or WinForms? Where can we see and run your code? @Trav, feel free to jump in here.

– Dale

Thanks @dale, this the Eto comes with RhinoCommon.

Here is the ObjectPropertiesPage file if helps.

Please let me know if you need anything more.

Best,
Mingbo

@mingo1214 just taking a guess here but does the panel that gets returned from those PanelHelper methods have any dimensions? If not, try setting your panels size to some value like 100x200 and see if they get more responsive. You might consider using a backing viewmodel and constructing the UI one time and using the view model bindings to enable/disable various elements or do the panel swapping.

1 Like

@Trav Thanks, setting panel size doesn’t fix the issue. I guess I have to use view model now. I will keep you posted.

@mingo1214 before you start ripping it apart have you tested this code on a different machine? We have seen cases where this flickering is attributed to WPF on certain machines.

@Trav yes, I was working on my laptop, and I thought it might because of its “poor” performance (i7-8850h + Quadro P2000). I switched to my desktop, it is happening the same.

Is there anything you can send me to test?

Hi @Trav,

Thanks for your helps.
Here is the compiled plugin bin.zip (537.4 KB) and a test sample file: Test.3dm (312.1 KB)

Each brep is a “honeybee room” and the property panel should show its own panel. You can select a subface of one brep, the property panel should show the “honeybee face” data. Here is a quick demo:

Please let me know if you can recreate this issue.

Thanks,
Mingbo

@Trav I also just did some additional quick tests with two simple view models. It definitely improves the situation, but only happens with less frequency. I’d say it happens 1 out of 10 clicks on different objects, where as the previous situation is 2-3 times out of 10.

So, the good news is that your code runs perfectly on my system. The bad news is I am thinking that your systems might be suffering the same issues that these were in the link below. Does your UserText panel refresh correctly or are there any problems with any other panels on your machines?

Hi @Trav, thanks so much for testing out. I have no issue with UserText panel or other panel doesn’t show correctly.

It is totally fine on my computer when selecting one brep to another one, which what you are doing in your video. Did you try to select between a sub-surface and the brep? (please see my above video) That’s when issues occurred on my machine.

I am testing the view model for a day now, kind of get rid of the issue with a view model added. But I will do more tests with view model to see if issues remain.

Thanks again,
Mingbo

Generally the other ETO panels will exhibit some oddities like this if that’s the issue so we can keep testing. Your code still performs well for me on my machine when doing sub object selections.

@Trav thanks for testing again. Is there anything that I can test to fix the issue that might related to my two computers?
Or is there a way to hard refresh the panel via Rhino Api?

@mingo1214 I’m going to tag @JohnM and @curtisw to see if they have any sage advice on the panels not refreshing on your systems.

@mingo1214, @JohnM and I chatted about your situation for a moment and we’re leaning towards my first hunch that it’s a code performance issue since you are not seeing any issues with other ETO panels. As I had mentioned earlier your panel code is doing a lot of repetitive work that it probably should not be tasked to do. To complicate things further its creating different UI for each object type. You could definitely improve the UI performance by creating a panel ui for each object type and reusing that ui when those objects are selected. That may be enough to stop the issue on a slower device. If anything its a good thing to do regardless to be more efficient.

@Trav Thanks for looping others.

I initially encountered this issue, and then created separate ObjectPropertiesPage for each object type.

This solution works well, but one issue with this solution is the user will have to constantly click honeybee panel icon to enable the page.

Because this tab won’t stay when selecting a object with different type than one previously selected, and it switched back to rhion’s object page.
image

This is why I changed back to one ObjectPropertiesPage for all object types.

I may have found a solution for this:
I added a TabControl, and a TabPage for each object type. So this seems working well so far in conjunction with the ViewModel.
image

So no recreating or replacing the ObjectPropertiesPage’s PageControl whatsoever. It just changes the TabControl.SelectedIndex

I will keep you posted after I implemented more details.

1 Like

That’s a good solution. You could also have both UI’s sitting in preloaded panels and just change the main pages Content to the required panel. Then just let the viewmodel know about the currently selected document and selected objects.