MoI discussion forum
MoI discussion forum

Full Version: V5 Wish List

Show messages:  1-8  …  369-388  389-408  409-428  429-448  449-468  469-488  489-508  …  529

From: Michael Gibson
4 Oct 2022   [#429] In reply to [#428]
Hi Peer,

re:
> 1) A way to get the point at the center of an object. That is, the point that's shown when Object Snap > Center
> is on. In other words, something along the lines of propertiesPanel.radius. This is for changing the UV directions
> of a spherical face for hatching.

There isn't an object snap for the center of a face that is a sphere surface. The one that you get on a regular sphere comes from the center point of its arc edge curve.

I'll see about adding in some script access for conic sections on faces similar to what there is for curves though, and about adding in a coordinate frame optional parameter for bounding boxes.

- Michael
From: pressure (PEER)
5 Oct 2022   [#430] In reply to [#429]
Michael,

I noticed center snapping on a full sphere, 1/4, and 1/8, and that propertiesPanel.hasRadius seems to be true for any fragment of a sphere, but I guess those are special cases. Thanks for explaining that the center snap point is coming from trim curves.

re:
> adding in some script access for conic sections on faces

I don't understand what this means. To me a conic section means a curve.

The problem I'm trying to solve is getting the UV directions on a spherical face to go in the directions that I want. My plan was select the face, get the radius and center, cache the trim curves of the original face, generate a sphere with the same radius and center but with seam orientation picked with something like an orientation picker, remove the original face, trim this new sphere with the cached trim curves, and then join.

I guess I could draw 2 pointObjects snapped to the surface of the face, dropPoint to get uv coordinate points, evaluate normal at each of the uv points, extend a line along each normal, and find the intersection = center. Is that the best way?
From: bemfarmer
5 Oct 2022   [#431] In reply to [#430]
Hi Peer,

Do you have an example .3dm of the surface?

There is a shortcut to mark the center point of a curve.

Conics include circle, ellipse, parabola, hyperbola, and line?

- Brian
From: pressure (PEER)
5 Oct 2022   [#432] In reply to [#431]
Brian,

See attached. The surface is spherical. I want to get the point that's marked with a pointObject. In other words, the center of curvature.

Attachments:
sphere_center.3dm


From: bemfarmer
5 Oct 2022   [#433] In reply to [#432]
For a Spherical cap:
https://en.wikipedia.org/wiki/Spherical_cap

Let d = (r-h)
d = sqrt(r*r - a*a)
r = (a*a + h*h) / 2*h
theta = arcsin(a/r)

- Brian
Hasty trig math, check for errors:-)
From: Michael Gibson
5 Oct 2022   [#434] In reply to [#430]
Hi Peer,

> I don't understand what this means. To me a conic section means a curve.

Yes you're correct, sorry I used the wrong term there.


> I guess I could draw 2 pointObjects snapped to the surface of the face, dropPoint to
> get uv coordinate points, evaluate normal at each of the uv points, extend a line
> along each normal, and find the intersection = center. Is that the best way?

Yes, intersecting 2 surface normals would be a way to get the center currently.

You can get 2 UV coordinates using the domain boundaries instead of dropping points.

var minpt = face.domainMin; // 2d point for UV domain min corner.
var maxpt = face.domainMax; // 2d point for UV domain max corner.

Just don't use the min and the max both directly because those will be at each pole and those normals will be colinear.

So maybe something like 1/3 between them for one point and 2/3 between for the other one.

- Michael
From: pressure (PEER)
5 Oct 2022   [#435] In reply to [#434]
Thanks Michael. domainMin/Max sound very promising. I'll give that approach a try.
From: bemfarmer
5 Oct 2022   [#436]
A way to get two points on the surface:
Select the edge of the cap.
Run MarkCurveEnd for point 1
Run MarkCurveMidpoint for point 2
Run some script to get the two normals, and intersect.

The two normals can be manually found.

So is a utility script to be created for the 2 UV coordinates method?

- Brian
From: bemfarmer
5 Oct 2022   [#437]
Array endpoint of edge to edge curve, with 4 points.
This establishes two perpendicular lines, and a plane.
The normal to the two lines, through the Center point of line through endpoint and midpoint, passes through the apex of the cap, and the centerpoint of the sphere, and allows calculation of "h", "a", and "r".

https://web.ma.utexas.edu/users/m408m/Display12-5-4.shtml#:~:text=The%20normal%20to%20the%20plane,%C3%97(s%E2%88%92b).

Enough math for tonight.

- Brian
From: Michael Gibson
5 Oct 2022   [#438] In reply to [#436]
Hi Brian,

re:
> So is a utility script to be created for the 2 UV coordinates method?

Something like this:
code:
var face;

<... get face object ...>

var uv_min = face.domainMin;
var uv_max = face.domainMax;

function Lerp( t, low, high )
{
    return low + ((high - low) * t);
}

function LerpUVPoint( t, ptA, ptB )
{
    return { x : Lerp( t, ptA.x, ptB.x), y : Lerp( t, ptA.y, ptB.y ) }
}

var uv_a = LerpUVPoint( 0.3, uv_min, uv_max );
var uv_b = LerpUVPoint( 0.6, uv_min, uv_max );

var factory = moi.command.createFactory( 'point' );
factory.setInput( 0, face.evaluatePoint( uv_a ) );
factory.commit();


From: bemfarmer
6 Oct 2022   [#439] In reply to [#438]
Thank you Michael

The _ChangeHole script has Face selection code...

I might play with it after work...

- Brian
From: Elang
18 Nov 2022   [#440]
Hello, Michael.

Would you kindly include SPIRO PATH to Moi v5's Draw Curve > Spiro Path? It is similar to the one in InkScape. Since it guarantees the formation of lovely curves, I think it would greatly strengthen Moi.

I ask because I frequently utilize Moi to "trace" bitmap images, notably logos, into vectors, which are then transformed into 3D logos.

Thank you very much.
From: Michael Gibson
18 Nov 2022   [#441] In reply to [#440]
Hi Elang, previously due to licensing and patents it was only possible to include Spiro in open source programs, not in commercial programs like MoI.

I think the licensing has changed though and it may be possible to use it outside of open source now.

I'll put it on my list to investigate, it might not make it in for the v5 release though.

- Michael
From: bemfarmer
18 Nov 2022   [#442] In reply to [#440]
There is a Clothoid script.

For "tracing", the Clothoid script can be used.
But using a pair of tangents, and the Blend command works very well, perhaps better than the Clothoid method, IMHO.
(repeat Blend with multiple tangent pairs.) The History effect on Blend is also handy.

https://raphlinus.github.io/curves/2019/05/10/spline-licensing-update.html
The Raph Levien spiro patent was placed in public domain ~ 2019, per above link. Legalities?
There was talk on the forum many years ago...

- Brian

https://graphicdesign.stackexchange.com/questions/76007/what-is-the-math-governing-the-shape-of-inkscapes-spiro-paths

As I recall, the Clothoid script was based upon a Paper, and used advanced math and programming, even calculus programming...
From: making5tuff
25 Nov 2022   [#443]
If we're talking wish list items, I would love expanded formatting distance display. I use Moi for woodworking, and it's easiest when working with tape measures and other woodworking rulers to stay in inches, with fractions.

It'd be great to have the formatting distance displace to have Decimal, Feet & Inches and Inches. Or "Decimal with Fractions".
From: blackboard
25 Nov 2022   [#444]
Hi, maybe u can add to moi opportunity to drag points of solids like in rhinoceros?
From: Michael Gibson
25 Nov 2022   [#445] In reply to [#444]
Hi blackboard,

re:
> maybe u can add to moi opportunity to drag points of solids like in rhinoceros?

It usually doesn't work very well to try and do this with solids made up of trimmed NURBS surfaces. There are lots of problems with this feature area in Rhino where it generates messy results in many cases.

If you want to model by dragging around surface points it's better to do sub-d modeling for that rather than CAD modeling.

- Michael
From: Larry Fahnoe (FAHNOE)
6 Dec 2022   [#446]
Forgive me Master for I know not what I ask… ;-}

An MoI object dumper usable in a script. Maybe akin to perl’s Data::Dumper, something that returns a string describing the MoI object passed? Perhaps a simplified description along the lines of the Type information provided by clicking on the UI’s Details...? Recursive object dumping would be nice but probably too much to hope for. Thinking specifically about descriptions of MoI's objects, not a generalized javascript object dump.

moi.ui.alert( moi.dump( obj));

When I’m writing and debugging a script, a common challenge is figuring out what I’ve just done to abuse MoI’s object model & why my attempts to get an object's property or method to work are blowing up--typically because I've used an object incorrectly. When things go awry I start by looking at what I've just added, and then assuming it isn't a syntax error, I begin adding moi.ui.alert() messages and wrapping suspect blocks in try {} catch( e) { moi.ui.alert( 'error: ' + e) }. Having the ability to dump object information would be another very useful assist I think.

--Larry
From: Michael Gibson
6 Dec 2022   [#447] In reply to [#446]
Hi Larry, re: object dump method - if you could give a more complete spec of exactly what output you would want that would help.

- Michael
From: Larry Fahnoe (FAHNOE)
7 Dec 2022   [#448] In reply to [#447]
> Hi Larry, re: object dump method - if you could give a more complete spec of exactly what output you would want that would help.

Hi Michael,

Not knowing what’s inside "the box" makes it challenging to provide a more complete spec, hence my explanation of how I’d make use of whatever info could reasonably be provided. So, guessing at the box’s contents, perhaps something along the lines of:

code:
object type: MoI object class/subclass name, e.g. ObjectList or curve
    object properties:
        name: value (perhaps RO, or RW)
        […]
    object methods: (this is maybe too much to suggest)
        name: brief parameter description
        […]


I’m thinking that this sort of information would be used in the context of moi.ui.alert() or moi.log() and would be intended to help someone writing a script diagnose issues while debugging. I think this helps to address a class of mistakes that arise from a misunderstanding of the object model. Perhaps there are other attributes that might make sense in this context.

As an example of where a dump tool might help: I kept getting “calculation failed” from my attempts to use the offset factory and after a bunch of flailing about the lightbulb finally came on: I was passing in a drawing object as input 0 when offset expects an ObjectList. I had been convinced (and thus focused on) that I was not passing input 2 (the offset point) properly instead of realizing that I’d provided the wrong object type. Having (and using!) a dump tool would have exposed my mistake.

Perhaps such an effort is a step toward some future enhanced scripting environment; my intention is to suggest work that ideally benefits your future aims while providing value for users who are trying to write and debug their scripts. Maybe V5 provides some beneficial low hanging fruit, but V6 expands upon it as you see fit; the output of the dump would grow and change as MoI evolves.

--Larry

Show messages:  1-8  …  369-388  389-408  409-428  429-448  449-468  469-488  489-508  …  529