# mk2 onion

onmk2

Expertise
Not Specified
Location
Not Specified
Website

## Recent Forum Posts

#### Procedural implementation of EditSop's "Align Handle: Component" ?Jan. 16, 2020, 8:41 p.m.

I found that I can use Edit Sop > Transform parameter > Local Frame > Component.

https://www.sidefx.com/docs/houdini/nodes/sop/edit.html#parameters [www.sidefx.com]

#### Procedural implementation of EditSop's "Align Handle: Component" ?June 2, 2019, 8:34 p.m.

I made a mistake in calc matrix, it must be not @P*AI, but AI*@P.

but the problem remains. How Houdini decide handle direction of EditSop?

```vector T = prim(0, "Tangent",   pointprims(0, @ptnum)[0]);
vector N = prim(0, "N",         pointprims(0, @ptnum)[0]);
vector B = prim(0, "BiTangent", pointprims(0, @ptnum)[0]);

vector R0 = set(T[0], N[0], B[0]);
vector R1 = set(T[1], N[1], B[1]);
vector R2 = set(T[2], N[2], B[2]);

matrix3 A =  set(R0, R1, R2);
matrix3 AI = invert(A);

// scale shape in the coordinate system whose basis is Tangent, Normal, BiTangent
v@Pdash = AI * @P;
@Pdash[0] = @Pdash[0] * ch("./parmx");
@Pdash[1] = @Pdash[1] * ch("./parmy");
@Pdash[2] = @Pdash[2] * ch("./parmz");

// find result in the coordinate system whose basis is X:{1,0,0} Y:{0,1,0} Z:{0,0,1}
@P = A * @Pdash;
```

#### Procedural implementation of EditSop's "Align Handle: Component" ?June 1, 2019, 12:42 a.m.

By EditSop's “Align Handle: Component”, we can scale one primitive along component direction like below image.

But I would like to scale many primitives along their component directions.
so procedural implementation is required.

I think I can do it if I scale it in Tangent Vector Space, and I wrote code.

```vector T = prim(0, "Tangent",   pointprims(0, @ptnum)[0]);
vector N = prim(0, "N",         pointprims(0, @ptnum)[0]);
vector B = prim(0, "BiTangent", pointprims(0, @ptnum)[0]);

vector R0 = set(T[0], N[0], B[0]);
vector R1 = set(T[1], N[1], B[1]);
vector R2 = set(T[2], N[2], B[2]);

matrix3 A =  set(R0, R1, R2);
matrix3 AI = invert(A);

// scale shape in the "Tangent Vector Space" whose basis is Tangent, Normal, BiTangent
v@Pdash = @P * AI;
@Pdash[0] = @Pdash[0] * ch("./parmx");
@Pdash[1] = @Pdash[1] * ch("./parmy");
@Pdash[2] = @Pdash[2] * ch("./parmz");

// find result in the coordinate system whose basis is X:{1,0,0} Y:{0,1,0} Z:{0,0,1}
@P = @Pdash * A;
```

But the result of this is not what I want because it is far from EditSop's result.
You can see it in my hipnc file. please see the link at the bottom of post.

Perhaps the problem is that I can't understand how EditSop's “Align Handle: Component” decide each handle direction.

Could you help me how to implement procedurally EditSop's “Align Handle: Component”?