FME Geometry, PythonCaller, GenerativeArt

#main_script import fmeobjects import numpy as np from fmeobjects import FMELine, FMEPoint, FMEPolygon import numpy as np import math """ radial lines across the center * | * \ | / \|/ /|\ / | \ * | * next time connect symmetric indices 0 1 2 3 4 ... n/2 | | n-1 n/2+1 """ def radial_ring_lines(n=36, w=800, h=800): r=min(w,h)*0.4 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+n//2]) 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 = radial_ring_lines(n=36, w=800, h=800) 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)