# Processing Geometry Suite (PGS) library

**URL:** <https://discourse.processing.org/t/processing-geometry-suite-pgs-library/47073>\
**Category:** Libraries\
**Created:** [September 4, 2025, 12:28pm UTC](https://discourse.processing.org/t/processing-geometry-suite-pgs-library/47073 "2025-09-04T12:28:28Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![Morais](https://yyz2.discourse-cdn.com/flex036/user_avatar/discourse.processing.org/morais/32/12152_2.png) [@Morais](https://discourse.processing.org/u/Morais)\
**Post date:** [September 4, 2025, 12:28pm UTC](https://discourse.processing.org/t/processing-geometry-suite-pgs-library/47073/1 "2025-09-04T12:28:28Z")

</div>

Hello everyone!

I’ve recently started exploring the fantastic Processing Geometry Suite (PGS) library and I’m really impressed by its capabilities. Right now, I’m trying to get the Mesh Smoothing example up and running, but I could use a bit of guidance.

I was able to successfully run the examples included in the project folder, but I noticed that some examples mentioned on the GitHub page—like Mesh Smoothing—aren’t included there. If anyone could help me understand how to access these additional examples or point me in the right direction to get Mesh Smoothing working, I’d be very grateful.

Thanks in advance for any help or tips you can share!

GitHub (library): [GitHub - micycle1/PGS: Processing Geometry Suite](https://github.com/micycle1/PGS)

Mesh Smoothing Example:

 ![IMG_0084](https://canada1.discourse-cdn.com/flex036/uploads/processingfoundation1/original/3X/f/2/f2dc9370939239c34fe668037374f8e8a475b17a.jpeg)

---

<div class="post-metadata">

**Author:** ![micycle](https://yyz2.discourse-cdn.com/flex036/user_avatar/discourse.processing.org/micycle/32/201_2.png) [@micycle](https://discourse.processing.org/u/micycle)\
**Post date:** [September 4, 2025, 4:45pm UTC](https://discourse.processing.org/t/processing-geometry-suite-pgs-library/47073/2 "2025-09-04T16:45:12Z")

</div>

Library author here.

Library structure is quite simple – all the illustrations on the Github readme live under their respective`PGS_` code file (“Meshing” –\> `PGS_Meshing`).

You can see details about methods in the Javadocs ( [PGS\_Meshing (Processing Geometry Suite 2.0 API)](https://micycle1.github.io/PGS/micycle/pgs/PGS_Meshing.html) ) or in an IDE.

So the method you’re after is`PGS_Meshing.smoothMesh(...)`.

---

<div class="post-metadata">

**Author:** ![Morais](https://yyz2.discourse-cdn.com/flex036/user_avatar/discourse.processing.org/morais/32/12152_2.png) [@Morais](https://discourse.processing.org/u/Morais)\
**Post date:** [September 6, 2025, 9:34am UTC](https://discourse.processing.org/t/processing-geometry-suite-pgs-library/47073/3 "2025-09-06T09:34:23Z")

</div>

Hi Micycle

Thank you so much for your reply and for your work!

I gave it a try, it should be something like this?

Thank you!

```auto
import processing.javafx.*;
import micycle.pgs.*;
import micycle.pgs.PGS_Coloring.ColoringAlgorithm;
import java.util.List;
import org.tinfour.common.IIncrementalTin;

String leafPolyline = “ai`tvCagmtmAojbVgpiw@oijDucv[b__AoflYp`xn@{xq|B|hbNsheT|pcTqyfP\~es}@mxpmxp\\|rcHm_tK|lbGchfp@sriAuys\[u`oFutiYqdgKqypUe_rOieiPmn}Po{{IykyQywuCykrThd|@ulhYf_~GcchiAd~yg@q}yhA~hgq@iuovBf}oiBi~iSzniC{oqi@aosVs`cS{|nCklwUzhrC_qu|Bh@ogshAl}{@ogshAl`ai@}yhfB`sza@}hsY_yRao}YalcKyezHygiPv_lCsv}WjjlOkyk\\vqgbAgocoA|fmc@ymcy@f\~qVw\~vs@\~scFuatc@d_tGejtLjqgrBkusmA|dqaAslne@p{eJyrbQc_hAiazS}i|\]yn{k@}saCe}fRjwbFm\_\~Qbclc@i\~sg@zxmDcdaRozcFyg{Sgdpg@*qxt@`cbAa`sWdc{Kgq|TdrcS_viR\~amXit_K||daCkz{\\hjmXoazI`tcH{fbOnfnPe|~u@jvdNihzLtewzAso~PxiccA_yhXddrWqkeOxc|Ou`tP\~aeGc}lQg_q@capQ_lfRsisWukzsAiabg@||uMm}ei@xw_Me|eKn_jkDkpti@diauAqvxMvygX_h\~a@\~rkhAkczh@zk{dAwopSp_lo@{{hYtpdeBgounAxaccAoxrj@pudp@oogRj\~pkC{xf\[dkef*@aben*e\~gSro\~}*@aben\*@`x|Li~iPfcIekxP_x}Mqrwe@unr|Aoa|jDk|hpBq`o\~Dcrgq@gygbB{vmcAavggDstkn@adkaCyld\\hfbBc\~fNsbolAz|G{}jQ`hga@kcuM??rfz`@x_xc@fprjBtpdeBp`wigGbvpKp`s{@x_xc@fprjBtpdeBp{lvFpw\~cAbj\*`Cjlz_BjrbiEtsbr@zj}}An{adAzdfqB|zbj@auoM~_tRkmuMbv`tBopbtBvw`j@mwad@fgleDoyytBhxh]wsh]tsnv@kcwwAj`dXmc\~\[nqygAtfIhnpUgtaF`orPwa}NdsuLuovX~mbScoux@fk~NityVphpz@mrnq@`ojx@ct\~g@`d_|@m}sb@tfdWfxuKz{zDjdqSuuvInonTcrfAlw}_@d`mFdkdZvojQldnQ`wmTjswC|v_Y_daHto`@}c`Vnzek@qeuj@ngu\\seld@hnfRsdcO`uqr@mpdXnvdgAkmfVbzk\~@mw\~gAz_mx@mbho@njrr@aezVnolR_sKxz|KbwpGtkePxgo|@fwnIzv}J|xoQpqcAtuzfAmw|Vt{gZoi{AjybUjikKbnvM|*eg@ndoGfh`GpsxMssH~cxU{}`Hn\~miCgtusAf}pg@ye_SnxgxGq*}l@h}mr@zgyA\~}jMl\~xFzhkF\~pdKuesAnxw\[kzjIlzxJyh`uBhsfjAgvr`@tfi^gj\~r@jng|@uk\~\~Avvwv@ezhNfxsPu`_IhlsTc}zLpabgA_tkrA|bmm@ogkxAnwsnAksrq@`mzY{|dUj|}Q}gcQvpqWwk\~Kpji\[mivExge\]p}Rlje\]xnoGtbyYz}aX\~ekS\~||Vhw_Kh\~tx@bfnM\~uao@}snArf`Sc{_Krglf@yqzc@l_bRqo{JrrgkAjkwCfmqrB`uqVtrlQ`hdG|w}h@tddq@vtaOldsJ~rcT`irDhgjl@luq@zk}pA}}Jfen\\n_bBn|sv@r__Qdmxx@vahD`e}lB|myXlkbPbpfGtuw@bgzX{xtLj_vh@qixd@vkieAetjAdygVrw{Bfi|WhaiVrxnZvxwwC`xuaBn}b^nd}^\~urUbyrn@xzuO\`\`iTdazUld|Ptf|z@|voa@danVxhna@b`vRvlaSz~uu@dojf@t{o[tcsMjpdz@dkpSb_aVjgbQtrn@fqrN_yro@`inj@gtdGdhdT|oxAh|dUlruLbx_VxppWzwtVbr`oAvx{q@f_wLzfceApdqHrhnTvnwMtjjOb||m@vvq`@\~jtNxqgy@lirJp}gUhziNnc`Nzqll@fxmQr}`vC|\~xwAp_bqBlcuw@lcdNtzvS{psG||vSkpbUju\~Ggd_fAz}kIk`{k@}wwFwgeq@vrkAohln@fg}Oy~leAj}wg@{xiPh_mAeo~lAgcgDizs}@zp|To__}@mqaDud|nBtgsF_vbtAh{\\o_gR`xiFet}hAv_jj@ycrLogcAyrjjAev}a@oqpeDg\~l|@wvy`@gybFile]ka[szzS~kaEac~Jh{mQwpoF~wz]mhz@hoxa@hkjM`ob_Am\~s@h`sT}p`LdzsMkipR|gfCosux@mjcFo}u\]grqOayqu@e\~mNg|bRrzdAej\~c@vikSygdQrz}BsdmUoru@}mq_B_ss\[y`zUadn@}lml@j}dGc`qhBaxdJk}aWdqjAykqTlaeHkhgQbykQavjDzxrQfagBlbrShhsKnz_WjxepDp{bgE\~kre@rca\]fpqGzt|MnmlF`||o@bs_Y~hsk@rrrp@dfii@rbkx@~hta@xb{x@xz}k@vrjShbbZwq{Lte_r@tvdIniwYdt~JdfcIljmn@rvcTlt~aAre}OxgzM`ynJzgd\~Bz_toCtiim@ft_j@l|uUbvp\[xrqKzxoXfet@x|{Saj`I`buMiwjTn|eCkks\[knqDupsf@ypeScptp@*o}Jgnia@}wgB}lpVfzoCurzo@ngf\[kiqXxagHg}hoB`nbXsbr|@v~xBy{fUlqlEytwLbl}P{nhCzu{Vl`uvAxypzEzhs\\fo{|@nkdGl|ja@sniAxoqRafqIhhdTy}\~A\~yq*@`hpRxjp~@fymNxdngAbzsPr{nb@tugFx~sn@qh{Eponq@hmkCthuVz}dtAtsrjEjrqHdmfdBpizJ|lbw@zroDrwlw@wqtDjvoa@c`eK\~mvEgpkSyqpJc__t@exlq@wu_f@kzi\[ekj\~@as\~\]gnzkAglrn@icf_BgmejAukut@*y\~s@umqPsihJyot*@u|mIomqPychIwszj@gb\~d@uygrAwnvzA{ncRqecNyvhSoppDawyaAdhj@o_ux@mbk{AgvneAu`ib@qcsRkfmOkqpJqthUq{qLq|p{@urjL_ogQ_ysSertGco_\\f_Assqe@`\~hNqsmc@loua@kxl\_@nvur@spod@vdbwAsblo@lawQucoPlphL{ijH\~{{R}jbLb|h|BwtbNrcay@aocUjzwFwueS_j{DuffO}hjP{beIc`sYswnBwbwzAy_lMck_s@crh\\mwjq@q_tz@y~neAgamAeqjT`rmLiuyjAsm\\\_wxVkimG}jhQw`xUozxNoeiu@}naK{ppEc|_Jut}a@msplDkjtPurah@iafKe~oIoz_m@sd~Qq_dS{faLi~|Kw}dQ_gnGswdZ{_uYocfhDihdPy|pw@es}e@wuuw@i`fQcvqMwkfWy\~fGqxyXks_BugdUbwsC{hsQdflK}|fN\~ugS}jnTvprr@{mxf@nth_Ak}fHnbjZypjIh_vbAe}`Ptcbn@ch~]hzio@ovzQtd_k@i}uPzrxtAwkmH|{iUalqJjhlJs__NnlqAsypg@m`aM{giw@eugf@ejpZskrFcz\~TtupJgasKdpcMal{Bp}pQftrC\~|kq@{qjD\~tfnAccuZ|wvxCehjKpghQwe`m@fvok@ibjOlzrUqhgc@|`alAi`mg@bundAc~oKvlpd@ke~c@pect@_qq[~qekAuzzIpmcPwhcvAv~zlA_wcWpwpf@_aja@|ko}AqkhSjmxTc|yWvxyKu~{Yfe~@kelUe_cEeoyImhlQe{mZiywpCrqwDg_vgA_jsCwx~g@f|_@_va|AcmsHajhR}hsj@up}k@m_mI_uzT}f_H_f}v@mtjJscyQ{hyd@oiuTqonKki_Nc}wf@eru~Aa{mPky}RcqhWulqIyc_~@geyDelsR}xtFklaK_v~MsedE}ajWsciBetz~@sq|F_lze@eyjh@qlglAil_Bap~Ul}yEs~weAeb~Eec_Sgp`i@mqvYslyK_vbLu|jFqjpPwprAmi|W|ocHqpmzB}c\~AgpdY}hsHux\~RobsP{xmRyifTabiLscaVigkEguqoBfbdFof\~f@miyFakdMul|PwewBylzUt\`o\\k|y_Bndob@wqqqCz{nS{euv@|mnh@om|yAbzxAaimSwobCgtoR”;
PShape leaf;
PShape meshShape;

void setup() {
size(1000, 1000, FX2D);
smooth();

leaf = PGS_Conversion.fromEncodedPolyline(leafPolyline);
leaf = PGS_Transformation.translateCentroidTo(leaf, width / 2f, height / 2f);

meshShape = meshColorShape(leaf);
}

void draw() {
background(0, 0, 40);

// Apply mesh smoothing with animated iterations
int smoothIterations = (int)map(sin(frameCount \* 0.02), -1, 1, 1, 8);
PShape smoothedMesh = PGS_Meshing.smoothMesh(meshShape, smoothIterations, true);

// Display the smoothed mesh
shape(smoothedMesh);
}

public void mouseMoved() {
meshShape = meshColorShape(leaf);
}

PShape meshColorShape(PShape shape) {
List points = PGS_PointSet.poisson(0, 0, width, height, 45 + mouseX/33f, 10);
IIncrementalTin mesh = PGS_Triangulation.delaunayTriangulationMesh(shape, points, true, 1, true);

String[] palette;
if (mouseX > width/2) {
meshShape = PGS_Meshing.urquhartFaces(mesh, true);
palette = new String[] { “#563d7c”, “#0096d8”, “#f4e361”, “#f24679” };
} else {
meshShape = PGS_Meshing.edgeCollapseQuadrangulation(mesh, true);
palette = new String[] { “#07224f”, “#ed361a”, “#fc8405”, “#f7c72a” };
}

// Simple coloring without PGS_Coloring
if (mouseX > width/2) {
PGS_Conversion.setAllFillColor(meshShape, color(86, 61, 124, 150));
} else {
PGS_Conversion.setAllFillColor(meshShape, color(237, 54, 26, 150));
}
PGS_Conversion.setAllStrokeColor(meshShape, color(255), 1);
return meshShape;
}

```

---

<div class="post-metadata">

**Author:** ![micycle](https://yyz2.discourse-cdn.com/flex036/user_avatar/discourse.processing.org/micycle/32/201_2.png) [@micycle](https://discourse.processing.org/u/micycle)\
**Post date:** [September 6, 2025, 12:36pm UTC](https://discourse.processing.org/t/processing-geometry-suite-pgs-library/47073/4 "2025-09-06T12:36:45Z")

</div>

Yeah looks alright.

Another simple example:

```java
  var v = PGS_Voronoi.innerVoronoi(PGS_Morphology.simplify(leaf, 4), PGS_PointSet.poisson(0, 0, width, height, 50, 0));
  v = PGS_Meshing.smoothMesh(v, mouseX/2, true);
  shape(v);

```

---

<div class="post-metadata">

**Author:** ![Morais](https://yyz2.discourse-cdn.com/flex036/user_avatar/discourse.processing.org/morais/32/12152_2.png) [@Morais](https://discourse.processing.org/u/Morais)\
**Post date:** [September 6, 2025, 1:59pm UTC](https://discourse.processing.org/t/processing-geometry-suite-pgs-library/47073/5 "2025-09-06T13:59:00Z")

</div>

Awesome, thank you Micycle!
