Home
Reply
Contributor
sronse
Posts: 5

Abusive limitation about small planes ?

Hi,

 

Documentation for both api_face_plane and api_make_plface mentions a limitation about normal's length (with normal beoing the ((right

- origin) * (left - origin)) .

This means that both these functions cannot create a 0.1 square millimeter plane for instance. This limitations seems abusive and conflicting with SPAresabs limitation which should only apply to linear dimension.

You can try the following scheme command to confirm this limitation:

(face:plane (position 0 0 0) 0.001 0.0001 (gvector 0 0 1)))

While I pass a normal vector whose lenght is 1.0 (way bigger than SPAresabs), the command fails because ((right - origin) * (left - origin))<SPAresabs.

 

So I have 2 questions:

1- how can we create a 1 mm by 0.1 mm square plane with API functions ?

2- is there any other similar limitation for other surfaces (i.e. surface whose linear dimension si greater than SPAresabs, but other dimentions like area, volume, normal...)

 

Nota: I didn't change values of SPAresabs, and my system unit is meter.

So the limitation for minimum linear dimension should be 0.000001 m = 0.001 mm = 1 micrometer

 

Thanks.

Stephane.

 

Spatial Moderator
ybiyani
Posts: 223

Re: Abusive limitation about small planes ?

Hello Stephane,

 

As a work around you can create two faces that are acceptable to the api and then do a boolean?

 

Yogesh

Contributor
sronse
Posts: 5

Re: Abusive limitation about small planes ?

It seems not to work. I tried the following:

1- create a plane 0.001 by 0.01

2- create a se cond plane 0.001 by 0.0999

3- subtract the small from the big one: I expect the result to be a 0.001 by 0.0001 plane

Test in scheme is weird: I cannot see the resulting plane on the screen + when I export the resulting SAT then export it back, I got a error "Model size is smaller than the valid box"

 

So, bool::subtract seems not to be a solution.

 

Stephane.

 

Spatial Employee
Mohit
Posts: 8

Re: Abusive limitation about small planes ?

[ Edited ]

Hi Stephane

 

What you can do here is:

call face:planar with values 1 and 0.1

and then apply transform to convert the values to m ( scale it by .001)

 

(define pl_face (face:plane (position 0 0 0) 1 0.1 (gvector 0 0 1)))
(define tr_to_m (transform:scaling .001 .001 .001))
(entity:transform pl_face tr_to_m)

 

Please note here that you here are trying to create a face with area of the order 1e-7.

btw. If your application wants to create models with dimensions as low as 0.1mm, then why don't you want to keep mm as your default unit?

Even if you keep mm as default unit, you have a high of 10m.

 

Useful links in this context:

The Four Reses

 

Regards,

Mohit