package Ġcom . github . w um o . v kg . graphics . model Ċ Ċ import Ġcom . github . w um o . v kg . graphics . V kg Native .* Ċ import Ġcom . github . w um o . v kg . graphics . V kg Native . CP ri mitive Builder Ċ import Ġcom . github . w um o . v kg . graphics . util . notNull Ċ import Ġcom . github . w um o . v kg . math . vector . Vec 3 Ċ Ċ class ĠPrimitive Builder ( internal Ġval Ġnative : ĠC Primitive Builder ) Ġ{ ĊĠ Ġval Ġnum Primitives : ĠInt ĊĠĠĠ Ġget () Ġ= ĠBuilder Num Primitives ( native . notNull ()) ĊĠĠĊĠ Ġfun Ġfrom ( positions : ĠFloat Array , Ġnormals : ĠFloat Array , Ġu vs : ĠFloat Array , Ġindices : ĠInt Array ) Ġ{ ĊĠĠĠ Ġassert ( positions . size Ġ% Ġ 3 Ġ== Ġ 0 ) Ġ{ Ġ" positions . size Ġ% 3 Ġshould Ġequal Ġ 0 " Ġ} ĊĠĠĠ Ġassert ( normals . size Ġ% Ġ 3 Ġ== Ġ 0 ) Ġ{ Ġ" normals . size Ġ% 3 Ġshould Ġequal Ġ 0 " Ġ} ĊĠĠĠ Ġassert ( u vs . size Ġ% Ġ 2 Ġ== Ġ 0 ) Ġ{ Ġ" u vs . size Ġ% 3 Ġshould Ġequal Ġ 0 " Ġ} ĊĠĠĠ Ġassert ( positions . size Ġ/ Ġ 3 Ġ== Ġnormals . size Ġ/ Ġ 3 Ġ&& Ġnormals . size Ġ/ Ġ 3 Ġ== Ġu vs . size Ġ/ Ġ 2 ) Ġ{ ĊĠĠĠĠĠ Ġ" positions . size Ġand Ġnormals . size Ġand Ġu vs Ġshould Ġbe Ġthe Ġsame " ĊĠĠĠ Ġ} ĊĠĠĠ ĠPrimitive Builder From ( ĊĠĠĠĠĠ Ġnative . notNull (), ĊĠĠĠĠĠ Ġpositions , Ġ 0 , Ġpositions . size Ġ/ Ġ 3 , ĊĠĠĠĠĠ Ġnormals , Ġ 0 , Ġnormals . size Ġ/ Ġ 3 , ĊĠĠĠĠĠ Ġu vs , Ġ 0 , Ġu vs . size Ġ/ Ġ 2 , ĊĠĠĠĠĠ Ġindices , Ġindices . size ĊĠĠĠ Ġ) ĊĠ Ġ} ĊĠĠĊĠ Ġfun Ġnew Primitive ( topology : ĠPrimitive Topology Ġ= ĠPrimitive Topology . Tri ange ls ) Ġ{ ĊĠĠĠ ĠBuild New Primitive ( native . notNull (), Ġtopology . value ) ĊĠ Ġ} ĊĠĠĊĠ Ġfun Ġtriangle ( p 1 : ĠVec 3 , Ġp 2 : ĠVec 3 , Ġp 3 : ĠVec 3 ) Ġ{ ĊĠĠĠ ĠBuild Triangle ( native . notNull (), Ġp 1 . raw , Ġp 1 . offset , Ġp 2 . raw , Ġp 2 . offset , Ġp 3 . raw , Ġp 3 . offset ) ĊĠ Ġ} ĊĠĠĊĠ Ġfun Ġrectangle ( center : ĠVec 3 , Ġx : ĠVec 3 , Ġy : ĠVec 3 ) Ġ{ ĊĠĠĠ ĠBuild Rectangle ( native . notNull (), Ġcenter . raw , Ġcenter . offset , Ġx . raw , Ġx . offset , Ġy . raw , Ġy . offset ) ĊĠ Ġ} ĊĠĠĊĠ Ġfun Ġbox ( center : ĠVec 3 , Ġx : ĠVec 3 , Ġy : ĠVec 3 , Ġz : ĠFloat ) Ġ{ ĊĠĠĠ ĠBuild Box ( native . notNull (), Ġcenter . raw , Ġcenter . offset , Ġx . raw , Ġx . offset , Ġy . raw , Ġy . offset , Ġz ) ĊĠ Ġ} ĊĠĠĊĠ Ġfun Ġbox ( p 1 : ĠVec 3 , Ġp 2 : ĠVec 3 , Ġup : ĠVec 3 , Ġwidth : ĠFloat , Ġheight : ĠFloat ) Ġ{ ĊĠĠĠ ĠBuild Box Line ( native . notNull (), Ġp 1 . raw , Ġp 1 . offset , Ġp 2 . raw , Ġp 2 . offset , Ġup . raw , Ġup . offset , Ġwidth , Ġheight ) ĊĠ Ġ} ĊĠĠĊĠ Ġfun Ġchecker board ( ĊĠĠĠ Ġnx : ĠInt , Ġny : ĠInt , ĊĠĠĠ Ġcenter : ĠVec 3 Ġ= ĠVec 3 (), ĊĠĠĠ Ġx : ĠVec 3 Ġ= ĠVec 3 ( 0 f , Ġ 0 f , Ġ 1 f ), ĊĠĠĠ Ġy : ĠVec 3 Ġ= ĠVec 3 ( 1 f , Ġ 0 f , Ġ 0 f ), ĊĠĠĠ Ġwx : ĠFloat Ġ= Ġ 1 f , Ġwy : ĠFloat Ġ= Ġ 1 f ĊĠ Ġ) Ġ{ ĊĠĠĠ ĠBuild Checker board ( native . notNull (), Ġnx , Ġny , Ġcenter . raw , Ġcenter . offset , Ġx . raw , Ġx . offset , Ġy . raw , Ġy . offset , Ġwx , Ġwy ) ĊĠ Ġ} ĊĠĠĊĠ Ġfun Ġsphere ( center : ĠVec 3 , ĠR : ĠFloat , Ġn sub d : ĠInt Ġ= Ġ 3 ) Ġ{ ĊĠĠĠ ĠBuild Sphere ( native . notNull (), Ġcenter . raw , Ġcenter . offset , ĠR , Ġn sub d ) ĊĠ Ġ} ĊĠĠĊĠ Ġfun Ġcon e ( center : ĠVec 3 , Ġz : ĠVec 3 , ĠR : ĠFloat , Ġsegments : ĠInt Ġ= Ġ 5 0 ) Ġ{ ĊĠĠĠ ĠBuild Con e ( native . notNull (), Ġcenter . raw , Ġcenter . offset , Ġz . raw , Ġz . offset , ĠR , Ġsegments ) ĊĠ Ġ} ĊĠĠĊĠ Ġfun Ġcy linder ( center : ĠVec 3 , Ġz : ĠVec 3 , ĠR : ĠFloat , Ġcap : ĠBoolean Ġ= Ġtrue , Ġsegments : ĠInt Ġ= Ġ 5 0 ) Ġ{ ĊĠĠĠ ĠBuild Cy linder ( native . notNull (), Ġcenter . raw , Ġcenter . offset , Ġz . raw , Ġz . offset , ĠR , Ġcap , Ġsegments ) ĊĠ Ġ} ĊĠĠĊĠ Ġfun Ġaxis ( center : ĠVec 3 , Ġlength : ĠFloat , ĠR : ĠFloat , Ġcap Length : ĠFloat , Ġsegments : ĠInt Ġ= Ġ 5 0 ) Ġ{ ĊĠĠĠ ĠBuild Axis ( native . notNull (), Ġcenter . raw , Ġcenter . offset , Ġlength , ĠR , Ġcap Length , Ġsegments ) ĊĠ Ġ} ĊĠĠĊĠ Ġfun Ġline ( p 1 : ĠVec 3 , Ġp 2 : ĠVec 3 ) Ġ{ ĊĠĠĠ ĠBuild Line ( native . notNull (), Ġp 1 . raw , Ġp 1 . offset , Ġp 2 . raw , Ġp 2 . offset ) ĊĠ Ġ} Ċ }