[Gfoss] cad4qgis e poligoni

giuliano su Tiscali giulianc a tiscali.it
Sab 25 Ago 2012 22:45:03 CEST


On Sat, 25 Aug 2012 18:58:02 +0200
Luca Mandolesi <mandoluca a gmail.com> wrote:

> >   geom = feat.geometry()
> >   plgns = geom.asPolygon()
> >   start = 0
> >   for p in plgns:
> >     print "vertice iniziale", start
> >     start = = start + len(p)
> 
> Non capisco l'ultima riga...

butta via tutto, dovrebbe essere così (l'ho provato su poligono con 2
fori):
	geom = feat.geometry()
	plines = geom.asPolygon()
	# cerca il vertice
	start = 0
	for l in plines:
		end = start + len(l) - 1
		if vId == start or vId == end:
			return True
		start = start + len(l)
	return False

(probabilmente la spiegazione non serve, però) la numerazione dei
vertici è progressiva, quindi il primo vertice di una lista prende un
identificativo uguale alla somma di tutti gli elementi delle liste
precedenti, l'ultimo prende un identificativo pari al primo più tutti
gli elementi della lista meno 1 (siamo in base 0);

 
> Inoltre cosa significa "trovare i vertici iniziali". Vuoi il primo
> vertice sia del perimetro che del buco?

sì, ma non basta il vertice iniziale, serve anche il finale; ho scoperto
(scusa l'enfasi ma per me è una scoperta :-) che ad es. modificando
manualmente (non con la funzione analogica di qgis) il primo (ultimo)
vertice, l'ultimo (primo) rimane dov'è ed il sistema, per non
corrompere la topologia (sarebbe un poligono aperto), aggiunge un nuovo
vertice (provare per credere);

ovviamente anche questa topologia non è corretta (non saprei come
segnalare la cosa a chi sa), pertanto, per mantenere la topologia
corretta devo modificare entrambi i nodi; ecco l'importanza di sapere
se un vertice è inizio/fine;

questo peraltro vale anche per le mie funzioni di fillet, chamfer e
offset;

spero di essere stato chiaro, in caso contrario sono ben contento di
approfondire :-)

ciao, 
giuliano



Maggiori informazioni sulla lista Gfoss