FME Geometry, PythonCaller, GenerativeArt

#main_script import fmeobjects import numpy as np from fmeobjects import FMELine, FMEPoint, FMEPolygon import numpy as np import math """ connect symmetric indices 0 1 2 3 4 ... n/2 | | n-1 n/2+1 """ def circle_paired_lines(n=36, r=300, cx=400, cy=400): """Connect firstlast, secondsecond last, etc. on a circle.""" p = [(r*math.cos(2*math.pi*i/n), r*math.sin(2*math.pi*i/n)) for i in range(n)] return [(p[i], p[-(i + 1)]) for i in range(n // 2)] def ring_lines(n=36, w=800, h=800): r = min(w, h)*0.4 pts = [(r*math.cos(2*math.pi*i/n), r*math.sin(2*math.pi*i/n)) for i in range(n)] lines = [(pts[i], pts[(i+1)%n]) for i in range(n)] return pts,lines class FeatureProcessor(object): def __init__(self): pass def input(self, feature: fmeobjects.FMEFeature): pts, lines = ring_lines(n=36, w=800, h=800) # output the star boundary for line in lines: print(line) tri_ring = (list(map(tuple, line))) tri_line = FMELine([tuple(p) for p in tri_ring]) out_feat = fmeobjects.FMEFeature(feature) out_feat.setGeometry(tri_line) self.pyoutput(out_feat) parallel_lines = circle_paired_lines(n=36, r=300, cx=400, cy=400) for pline in parallel_lines: tri_ring = (list(map(tuple, pline))) tri_line = FMELine([tuple(p) for p in tri_ring]) out_feat = fmeobjects.FMEFeature(feature) out_feat.setGeometry(tri_line) self.pyoutput(out_feat)