TESTER

bool_xor

bool_xor(bg, fg) -> List of points

Substract bg to fg polygons (must have common part). The order of fg/bg is irrelevant.

Syntaxe

var result = bool_xor(bg=poly1, fg=poly2);

Arguments

NameRequiredDefaultDescription
bgyes-Polygon in background
fgyes-Polygon in foreground

Full example

var scale = 0.4;
canvas(2650*scale, 1300*scale);
coord_open();
coord_scale(scale);
var rec = [150, 150, 600, 150, 600, 400, 150, 400];
var tri = [375, 250, 263, 533, 488, 533];
var result ;

load_text_default(60);

def polyview(texte) {
	text(texte, 150, 100, stroke="#000");
	polygon(rec, stroke="#0177E1", fill="transparent", weight=6);
	polygon(tri, stroke="#F5D216", fill="transparent", weight=6);
}

polygon(rec, fill="#0177E1");
polygon(tri, fill="#F5D216");
text("2 polygons", 150, 100, stroke="#000");


result = bool_combine(rec, tri);
coord_open();
coord_translate(600, 0);
polyview("combine") ;
polygon(result, fill="#FD3502");
coord_close();


result = bool_substract(tri, rec);
coord_open();
coord_translate(0, 600);
polyview("substract tri, rec") ;
polygon(result, fill="#FD3502");
coord_close();


result = bool_substract(rec,tri);
coord_open();
coord_translate(600, 600);
polyview("substract rec,tri") ;
polygon(result, fill="#FD3502");
coord_close();


result = bool_intersect(rec, tri);
coord_open();
coord_translate(1200, 600);
polyview("intersect") ;
polygon(result, fill="#FD3502");
coord_close();


result = bool_xor(rec, tri);
console(result);
coord_open();
coord_translate(1200, 0);
polyview("xor (?)") ;
polygon(result, fill="#FD3502");
coord_close();


coord_open();
coord_scale(0.8);
coord_translate(400, 80);

var arr1 = polygon_regular(x=2200, y=200, side=360, radius=150, rotation=17, draw=false);
var arr2 = polygon_regular(x=2400, y=200, side=360, radius=150, rotation=17, draw=false);
var arr3 = polygon_regular(x=2600, y=200, side=360, radius=150, rotation=17, draw=false);
polygon(arr1, fill="#FD3502");
polygon(arr2, fill="#0177E1");
polygon(arr3, fill="#F5D216");

coord_open();
coord_translate(0, 350);
result = bool_combine(arr1, arr2);
polygon(result, fill="#b268cdff");
polygon(arr3, fill="#F5D216");
coord_close();

coord_open();
coord_translate(0, 700);
result = bool_substract(result, arr3);
polygon(result, fill="#b268cdff");
coord_close();



coord_open();
coord_translate(0, 1100);
arr1 = polygon_regular(x=2200, y=200, side=6, radius=150, rotation=0, draw=false);
arr3 = polygon_regular(x=2600, y=200, side=4, radius=180, rotation=0, draw=false);

result = bool_substract(arr2, arr1);
result = bool_substract(result, arr3);
polygon(result, fill="#F5D216");

coord_open();
coord_translate(20, 0);
polygon(arr3, fill="#0177E1");
coord_close();

coord_translate(-20, 0);
polygon(arr1, fill="#FD3502");

coord_close();


coord_close();

save("bool.png");