MoI discussion forum
MoI discussion forum

Full Version: Line order and direction

Show messages:  1-10  11-22

From: Michael Gibson
28 Apr 2020   [#11] In reply to [#7]
@Franz - you're welcome, I'm glad it will be useful!

@Wayne - currently there isn't a good way set up for a script to modify the starting "seam point" of a closed curve but I will add in something for that so it will be possible in the next v4 beta.

- Michael
From: Michael Gibson
28 Apr 2020   [#12] In reply to [#10]
Hi Brian,

re:
> For the edges of a Box, I am getting 3 extra direction arrows, for each curve, exterior to
> the cube, In MoI4Beta.

The arrows have small one unit long lines on them, so they will stick out a little ways past the end of the curve. Right now there isn't any way set up to have just an arrowhead all by itself without a tail on it.


> Arrow colors different from the curves might be nice?

You could do this by setting up a style for the arrows. To do that create a style like this before the first call to UpdateDecorations() :

code:
	var style = moi.geometryDatabase.addStyle();
	var r = 0, g = 255, b = 0;
	style.color = (r << 16) | (g << 8) | b;

	UpdateDecorations( curves, points, dirs, style );


Modify the calls to UpdateDecoration() to pass the style in, and inside UpdateDecorations() when the arrow is created set its styleIndex property like this:

code:
					if ( arrow )
					{
				>>>>		arrow.styleIndex = style.index;
						arrow.setHitTest( false );
						dirs.addObject( arrow );
					}


Then at the bottom below the last call to UpdateDecorations do style.remove();

- Michael
From: bemfarmer
28 Apr 2020   [#13] In reply to [#12]
Thank you Michael.

I made your arrow color modifications to your script. The modification works well in MoI4beta.

- Brian

I'll delete version 2 in a day or so...since it is your work :-)

Attachments:
OrderCurves2.zip


From: Michael Gibson
28 Apr 2020   [#14] In reply to [#13]
Thanks Brian, I'm glad that worked!

> I'll delete version 2 in a day or so...since it is your work :-)

It's fine to leave it, maybe it will help someone else who wants to do that as well.

-Michael
From: bemfarmer
3 May 2020   [#15] In reply to [#5]
OrderCurves script uses the color style for the arrows which has been selected before the script is run,

which may be different from the color styles of the curves.

So IMHO, is a better script to use than OrderCurves2 modification.

The color style change code may still be useful in other scripts.

- Brian
From: wayne hill (WAYNEHILL5202)
16 Sep 2020   [#16]
Question:

How to programmatically determine an arc object direction (cw/ccw) given the vector dir?

Thank you,
Wayne



code:
	if (moi.majorVersionNumber >= 4) {
			var segs = crv.getSubObjects();
			for (var j = 0; j < segs.length; ++j) {
				var seg = segs.item(j);
				var min = seg.domainMin;
				var max = seg.domainMax;
				var len = max - min;

				for (var k = 0; k < 2; ++k) {
					var t = min + (k / 2 * len);
					var pt = seg.evaluatePoint(t);
					var dir = seg.evaluateTangent(t);

                                         //  ccw boolean > true/false  ?                                        

					var arrow = CreateArrow(pt, dir);
					if (arrow) {
						arrow.setHitTest(false);
						dirs.addObject(arrow);
					}
				}
			}
		}

From: bemfarmer
16 Sep 2020   [#17] In reply to [#16]
Using a right handed helix as an example of the initial curve, say a threaded rod:
Consider an arbitrary point on the helix.
Rotate of the rod, or have the point travel along the helix.
Whether the point is traveling cw or ccw, or..., depends upon the view.
But the curve remains right handed.

- Brian

Maybe use tangent as view direction?

normal and binormal?

I do not understand the cw, ccw question. Maybe some other criterion is needed?
From: wayne hill (WAYNEHILL5202)
16 Sep 2020   [#18] In reply to [#17]
Hi Brian,

I am working on a project to draw MoI objects to a html canvas.

The html arcs/circles use clockwise and counterclockwise to determine the start and end direction of the arc.

https://www.w3schools.com/tags/canvas_arc.asp

The direction of the arc would also be used within a path for a motion controller. or simple G Code output for CNC machines.

I tried using a cross product from the points. My program logic did not work for some reason. Looking for a rotational cross product for better results.

Thank you,
Wayne
From: Michael Gibson
16 Sep 2020   [#19] In reply to [#16]
Hi Wayne, are these arcs all in the world x/y plane (the Top view's plane)?

So the concept of being CW or CCW is with respect to a plane normal, so I think you'll need to incorporate that.

See if this makes sense:


So you have a point on the arc, and the tangent vector. Make a second vector from the point on the arc to the arc's center point.

If you now take the CrossProduct( tangent, towards_center_vector ), that will generate a normal, either the same as your plane normal for the CCW arc, or opposite it for the CW arc. When comparing normals it's not a good idea to test for total equality, due to tiny roundoffs in floating point mathematics you can easily end up with values like 0.00000000000001 instead of 0, so you want to allow some epsilon/tolerance slack in your test.

Something like:

var eps = 1.0e-10;

function IsEqual( x, y )
{
    return Math.abs( x - y ) < eps;
}

function IsEqual( vec1, vec2 )
{
    return IsEqual( vec1.x, vec2.x ) && IsEqual( vec1.y, vec2.y ) && IsEqual( vec1.z, vec2.z );
}

Or another way you can compare normalized vectors is by dotproduct between them which gives the cosine of the angle between them. So something like

function VectorsAreSameDir( vec1, vec2 )
{
return DotProduct( vec1 /*normalized*/, vec2 /*normalized*/ ) > 0.99984769515639123915 (this number is the cosine of 1 degree).
}

Let me know if that doesn't do what you need.

- Michael

Image Attachments:
wayne_arc_direction.jpg 


From: Michael Gibson
16 Sep 2020   [#20] In reply to [#16]
Hi Wayne, another way you can determine the direction just using 2D points is to make a 2D triangle and then compute the signed area of the triangle:
https://www.quora.com/What-is-the-signed-Area-of-the-triangle?share=1

It will be a positive number for CCW, and a negative number for CW.

- Michael
From: wayne hill (WAYNEHILL5202)
17 Sep 2020   [#21] In reply to [#19]
Hi Michael,

Yes, I am only using the top view plane. The methods you suggested will be looked at in closer detail.

Thank you.
Wayne
From: pressure (PEER)
12 Sep   [#22]
Here's a small update to the orderCurves plugin that works on curves smaller than 1 unit long.

Attachments:
orderCurves.zip


Show messages:  1-10  11-22