[Gfoss] cad4qgis e poligoni

ciao,

inizio con la prima di una serie di domande sui poligoni :slight_smile:

quando ho bisogno di sapere il vertice iniziale di un poligono, penso
di dover usare il comando geom.vertexAT(0) che mi fornisce le
coordinate;

però in caso di foro (1) i vertici di questo hanno id's che
partono dal n(umero)V(ertici)e(sterni) in avanti; per sapere quindi il
vertice iniziale del primo foro penso di dover usare:
  plgns = geom.asPolygon()
  nVe0 = len(plgns[0])
e quindi il vertice inziale del (primo) foro è geom.vertexAT(nVe0);

se volessi conoscere l'inizio del secondo foro dovrei eseguire:
  nVe1 = len(plgns[1])
  startPoint2Foro = geom.vertexAt(nVe0+nVe1);

esiste un metodo più semplice e diretto?

grazie, ciao,
giuliano

(1) domanda nella domanda: che differenza c'è fra ring e island?

2012/8/24 giuliano su Tiscali <giulianc@tiscali.it>:

ciao,

inizio con la prima di una serie di domande sui poligoni :slight_smile:

quando ho bisogno di sapere il vertice iniziale di un poligono, penso
di dover usare il comando geom.vertexAT(0) che mi fornisce le
coordinate;

però in caso di foro (1) i vertici di questo hanno id's che
partono dal n(umero)V(ertici)e(sterni) in avanti; per sapere quindi il
vertice iniziale del primo foro penso di dover usare:
        plgns = geom.asPolygon()

Che tipo di variabile ritorna questo metodo?
Tupla o Lista?

On Sat, 25 Aug 2012 18:58:02 +0200
Luca Mandolesi <mandoluca@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 :slight_smile: 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 :slight_smile:

ciao,
giuliano