vex:point関数 - miyagiA/MyLearningNote GitHub Wiki

ポイントのアトリビュート値

アトリビュート 取得

v@nP= point(0,"P", @ptnum+1);
//この例では、次のポイントIDの座標を アトリビュートnPを作りそこに代入(あまり深い意味なし)
@P で自身の頂点座標を取得するのと比較すると、隣の頂点の情報をとるには、やや面倒な書き方をする必要があるのかもしれない。

// 配列で取得する場合の必要性がイメージできていない。アトリビュートを文字列で指定する必要がある
<type> point(<geometry>geometry, string attribute_name, int pointnumber)
<type>[] point(<geometry>geometry, string attribute_name, int pointnumber)

アトリビュート セット

setpointattrib(0,"connect",pt,i);
// selfジオメトリーの、 既存のアトリビュートconnectにアクセスする。書き換えるポイント対象ナンバーはptで、入力値はi

for (int i=0; i<8;i++){
   int pt=addpoint(0,set(0,0,0));
   setpointattrib(0,"connect",pt,i);
}
//8個のポイントを原点に生成し、アトリビュートconnectに対して 0~7を割り振っている

//valueは配列も受け付ける。また上の例ではモードを書いていないが、上書きや、加算乗算、MinMaxなどができるイメージ
int  setpointattrib(int geohandle, string name, int point_num, <type>value, string mode="set")
int  setpointattrib(int geohandle, string name, int point_num, <type>value[], string mode="set")

近くのポイント

隣接ポイントの番号 

i[]@nbp=neighbours(0, @ptnum);
//ptnumとエッジを共有しているすべてのポイントの番号
//このポイント番号の順番は特に意味はない

隣接ポイントの数 

i@nbcount=neighbourcount(0,@ptnum);
//ptnumとエッジを共有しているすべてのポイントの数

距離的に最も近いポイント 

i@nrpt=nearpoint(1, v@P);
//Wrangleの入力1番目のオブジェクトの各ポイントに最も近い、(同様にWranngleの)入力0番目オブジェクトのポイントの番号。

//以下バリエーション。グループ指定も可能なようだ
int  nearpoint(<geometry>geometry, vector pt)
int  nearpoint(<geometry>geometry, vector pt, float maxdist)
int  nearpoint(<geometry>geometry, string ptgroup, vector pt)
int  nearpoint(<geometry>geometry, string ptgroup, vector pt, float maxdist)

距離的に近くのポイント (オブジェクトがselfの場合、値は自分のポイントも含む)

i[]@nrp=nearpoints(0, v@P,1000);
i[]@nrp2=nearpoints(0, set(-2400,0,300),1000);
// int型配列のアトリビュート"nrp"を作り、距離が近いポイントを登録する。
//引数は、geometry(selfなら 0 でよい。)
//v@P としたので各ポイントの座標、別の座標なら多分、set(0,1,0)のように書く
//最後に距離をfloatで。

i[]@nrp=nearpoints(0, v@P,10000,2);
//ポイント最大数も指定できる ここでは2個 
//ちなみにオブジェクトがselfの場合、値は自分のポイントも含めて返してくるので、maxptが1だと@ptnum の値しか返ってこない

//以下バリエーション。グループ指定も可能なようだ
int [] nearpoints(<geometry>geometry, vector pt, float maxdist)
int [] nearpoints(<geometry>geometry, vector pt, float maxdist, int maxpts)
int [] nearpoints(<geometry>geometry, string ptgroup, vector pt, float maxdist)
int [] nearpoints(<geometry>geometry, string ptgroup, vector pt, float maxdist, int maxpts)

加工

ポイントの追加 (RunOver=Number or DetailWrangle)

//何もないところに生成する場合は、RunOver設定をNumberに変える必要がある。
//geoself()は0でも良い。
int pt= addpoint(geoself(),{0,0,0});

//もしくはDetailに変えてforで処理する必要がある。
int num=chi("num");
for(int i=0;i<num;i++)
{
    int pt= addpoint(geoself(),{0,0,0});
}

// ↓↓↓ リファレンスの情報
int pt=addpoint(0,set(0,0,0));
//与えられた座標にポイントを追加する。
//第一引数はジオメトリ番号。 第二引数の座標は Vectorで set(x,y,z) の書式が必要。
int  addpoint(int geohandle, int point_number) //ポイント番号の場合は同じ座標に点が作られる
int  addpoint(int geohandle, vector pos)

ポリライン接続

int pts[]={0,10,20,30,40,60};
addprim(0,"polyline",pts);
//ラインを引きたいポイントの配列を準備。
//ジオメトリ番号、 追加したいもののタイプ、今回は"polyline"を文字列で、次にポイントの配列を入力
addprim(0,"polyline",0,30,45,55);
//上のように4っつまでのポイントなら配列を作らずに指定することが可能
//※その他、addprim 自身には"poly"をはじめ、複数のタイプを指定できる

rgba カラーアトリビュートをセット

addpointattrib(0,"rgba",{1,1,1,1},"color");
//{1,1,1,1} 中カッコに注意!
//"color" すべて小文字にしないと rgbaではなく、0123 のタプルだか配列になるっぽい!

vector4 pcolor=set(v@Cd.r,v@Cd.g,v@Cd.b,@Alpha);
setpointattrib(0,"rgba",@ptnum,pcolor);
//この2行で、CdとAlphaを一つのrgbaにまとめらるが、カラーとしてセットするには上の一文が必要。
//そうじゃないと諸々ツール連携で思ったように値が渡らないのかは不明。
⚠️ **GitHub.com Fallback** ⚠️