MoI discussion forum
MoI discussion forum

Full Version: Remove tiny face on object

Show messages:  1-2  3-22  23-32

From: Michael Gibson
29 Sep 2017   [#23] In reply to [#21]
Hi Marco,

> In these situation, also with my fast desktop, performance are very poor.
>
> For example, let's say I have 100 surfaces (not so much), joined or not, and
> I'm running the script that should filter the surfaces based on their area.

Sorry now I'm really confused, how are you running that script currently when the surface area method hasn't been added yet?


> Well, every time I simply change the input range (min and max area) the script needs
> to recalculate the area for each object every time the code enter the loop.

How long is it taking?

Again, please post the script with the performance issues so I can take a look at what's going on and see if I can give some advice.


re: script API docs I think everything currently available is gathered on the scripting page of the wiki, go to http://moi3d.com , then the resources page and then the "Scripting" link is the 7th one down from the top.

- Michael
From: mkdm
29 Sep 2017   [#24] In reply to [#23]
Hi Michael.

@You : "..re: script API docs I think everything current..."

Thank you very much!

@You : "...sorry now I'm really confused, how are you running that script currently when the surface area method hasn't been added yet?.."

I apologize if I didn't make that clear.

I was referring to the "hypothetical" script that doesn't exist yet :)
Something that I was trying to extract from the CVolume script made by max, before you wrote me that this is not feasible at the moment.

Anyway, let's get rid for the moment of the area calculation and let's say that I simply want to filter a set of curves based by length (in range).

I mean, doing this is in a javascript loop, and let's say that the script must process 2000 curves (or edges).

@You : "...How long is it taking?
Again, please post the script with the performance issues so I can take a look at what's going on and see if I can give some advice..."

Ok. Now I put together a bunch of lines of javascript code to test the speed of filtering a given amount of curves by lenght inside a loop.

And I will do that in two ways :

1) using a "proxy" (a javascript array). I will fill this array the very first time I enter the loop and then I will use that array instead of
repeatedly querying Moi's data with the method getLength()

2) using the standard way, that is, calling getLength() continuously within the loop.

I will post to you the final results (the timing of first and second method).

Thanks for the willingness!
From: Michael Gibson
29 Sep 2017   [#25] In reply to [#24]
Hi Marco,

> I was referring to the "hypothetical" script that doesn't exist yet :)

Ok, but I'm sorry it's not practical for me to do a lot of work to optimize something that's just hypothetical.


> Anyway, let's get rid for the moment of the area calculation and let's say that I simply want to
> filter a set of curves based by length (in range).

Is this just another hypothetical situation again though? What modeling task are you trying to accomplish where you need to do this?

- Michael
From: mkdm
29 Sep 2017   [#26] In reply to [#25]
@You : "...Is this just another hypothetical situation again though? What modeling task are you trying to accomplish where you need to do this?..."

No Michael. It's not hypothetical :)

This is very frustrating...

Unfortunately you don't speak Italian and I'm forced to use English that is not my language.

If only I could speak with you in Italian I can say that in less than 5 minutes I could explain what I want to do.

It's very difficult to me to write always in English (or trying to do so).

Please remember that in one of my previous message I said that I was attempting to create
a script that should have filter a bunch of surfaces based on their area, within a loop and with fast execution.

This is because I want to create a useful script for cleaning up models with very tiny surfaces.

And also I want to create some utility script to find and select super tiny edges or curves,
very useful also for cleanup purposes.

And to do all that things I need to execute code in loop as fast as possible.

Is for this reason that I asked you to expand actual Moi's Api with some pre-compiled new filtering methods.

I hope this way I made myself clear :)

Thanks.
From: Michael Gibson
29 Sep 2017   [#27] In reply to [#26]
Hi Marco,

re:
> And to do all that things I need to execute code in loop as fast as possible.

But no, this isn't correct - if you are doing that just a couple of times a day it is not necessary for the code to execute as fast as it possibly can, it only needs to execute in a reasonable time for accomplishing the task at hand.

For example if it currently takes 1 second to execute the script, optimizing it down so it's instantaneous will only save you a tiny amount of time if it's only performed infrequently.

So the actual practical usage is an important factor, it's not worthwhile to put a lot of effort into optimizing things that are not causing an actual problem in real life use.

- Michael
From: mkdm
29 Sep 2017   [#28] In reply to [#27]
@You : "...So the actual practical usage is an important factor, it's not worthwhile to put a lot of effort into optimizing things that are not causing an actual problem in real life use.

...For example if it currently takes 1 second to execute the script..."

If I want to use the script I'm attempting to create in order to cleanup a model made by thousands of curves (or edges),
specifying the length (in a range) dragging a slider, I don't think that we are talking about 1 second...I think much longer.

Anyway, I want to thank you for your suggestion and I will write here the results of my speed test of this kind of codes (loop).

Please consider that execution time in loop is very important if I want later to translate this cleanup scripts into nodes
for P. Elephant.

There, usually we drag slider to easily input values, and when you drag a slider and the code is not optimized,
the slowness is very evident.

This is what I want to do.
First write this cleanup script and then translate them for P. Elephant.

Thanks a lot for your support.

Marco (mkdm)
From: Michael Gibson
29 Sep 2017   [#29] In reply to [#28]
Hi Marco, so for the slider case it should definitely work to get the lengths once when it first starts up, and then refer back to that when the sliders are manipulated rather than doing it every time.

And if a loop through the cached lengths is taking significant time for the loop itself it should also be possible to optimize the script in other ways that are specific to its own particular needs. For example after gathering the lengths it could sort them so it could do a binary search rather than a full loop. But I would recommend a simple approach first.

These methods are appropriate to implement within the script itself, I would not expect to implement them in MoI's API directly. The stuff at the API level is more for general purpose stuff that may be used by many different scripts.

- Michael
From: mkdm
29 Sep 2017   [#30] In reply to [#29]
@You : "...For example after gathering the lengths it could sort them so it could do a binary search rather than a full loop..."

Yes! I was thinking about this solution too.

Thanks a lot for suggestion.

@You : "...I would not expect to implement them in MoI's API directly..."

OK Michael. Understood :)

I hope that for V4 you could add at least "getArea()" method.....but I hope more...

Thank you very much for this very interesting conversation.

Have a nice day.
From: Michael Gibson
29 Sep 2017   [#31] In reply to [#30]
You're welcome Marco!
From: mkdm
30 Sep 2017   [#32] In reply to [#31]
Hi Michael.

So...after the long conversation I've produced some little thing.

I hope that this is only the first step :)

Please read it at http://moi3d.com/forum/index.php?webtag=MOI&msg=8608.1

Thanks a lot.

Show messages:  1-2  3-22  23-32