On Indie Zone(Asia( channel on YouTube) for Houdini you can find some nice Functions vex and other Stuff..I found there some vex for point direction and copy stamp functions ..
Pdf that interesting and you referencing for some Examples. (JacksonStern_SyntheticDigitalEcologies.pdf)
//for orient att and finding same DIR and angles
int differ_angle = chi("differ_angle");
int q[] = {};
int angle[] = {};
int indegree[] = {};
int flag[] = {};
int cell[] = {};
for (int i = 0; i < npoints(0); i++){
int _angle = point(0, "angleY", i);
append(angle, _angle);
int _indegree = point(0, "indegree", i);
append(indegree, _indegree);
append(flag, 0);
append(cell, -1);
if (_indegree == 0){
append(q, i);
flag[i] = 1;
cell[i] = 0;
}
}
while (len(q)){
int next_pts[] = point(0, "next_pts", q[0]);
foreach (int next_pt; next_pts){
if (flag[next_pt]) continue;
indegree[next_pt]--;
if (indegree[next_pt] == 0){
int pre_pts[] = point(0, "pre_pts", next_pt);
int fault_angle[] = {};
foreach (int pre_pt; pre_pts){
int start_angle = angle[pre_pt] - differ_angle;
int end_angle = angle[pre_pt] + differ_angle;
for (int cur_angle = start_angle; cur_angle <= end_angle; cur_angle++)
append(fault_angle, cur_angle < 0 ? 360 + cur_angle : cur_angle > 360 ? cur_angle - 360 : cur_angle);
}
int perhaps_angle[] = {};
for (int i = 0; i < 360; i++)
if (find(fault_angle, i) < 0)
append(perhaps_angle, i);
if (find(fault_angle, angle[next_pt]) >= 0)
if (len(perhaps_angle) > 0){
int index = floor(fit01(rand(next_pt),0, len(perhaps_angle)));
angle[next_pt] = perhaps_angle[index];
}
flag[next_pt] = 1;
cell[next_pt] = cell[q[0]] + 1;
append(q, next_pt);
}
}
removeindex(q, 0);
}
for (int i = 0; i < npoints(0); i++){
setpointattrib(0, "angleY", i, angle[i], "set");
setpointattrib(0, "cell", i, cell[i], "set");
}
to orient
f@angleY += fit01(rand(@ptnum), 5, -5);
v@angle.y = f@angleY;
matrix3 m = maketransform(2, v@angle);
p@orient = quaternion(m);
You can Post some easy setup what you doing don't be Shy

...Share knowledge