def atualizar_poligono_descricao(self, id_linha, distancia, id_braco, id_linha_braco, ponto): "atualiza as informacoes conforme o progresso de leitura da borda" self.dict_poligono_descricao["metadados"]["linhas"][id_linha] = { "id_linha_braco":id_linha_braco, "id_frente":None, "id_atras":None, "linha_largura":self.dict_circ_desc["linha_largura"], "linha_app":None, "braco":None, "distancia":distancia, "tipo":self.dict_circ_desc["tipo_circulo"], } ###################################################################################################################### "identificar quantas extremidades em um mesmo ramo ja foram passadas" if self.dict_circ_desc["tipo_circulo"] == "extremidade": self.dict_poligono_descricao["metadados"]["bracos"][id_braco]["n_extremidades"] += 1 if self.dict_poligono_descricao["metadados"]["bracos"][id_braco]["n_extremidades"] == 2: self.finalizar_linhas = True ####################################################################################################################### "defini os dados iniciais do primeiro ponto a ser lido" if id_linha_braco == 0: self.dict_poligono_descricao["metadados"]["bracos"][id_braco] ={ "id_linha_ini":None, "pt_ini":None, "pt_ini_oposto":None, "n_extremidades":0, "ponta":None, "base":None, "distancia_oposta":None } ponto_oposto = func_linhas.ponto_oposto(ponto, self.dict_circ_desc) distancia_oposta = func_linhas.calc_distancia_oposta( self.dict_circ_desc, self.dict_lista_pontos[distancia+self.intervalo_entre_linhas]) self.dict_poligono_descricao["metadados"]["bracos"][id_braco]["id_linha_ini"] = id_linha self.dict_poligono_descricao["metadados"]["bracos"][id_braco]["pt_ini"] = ponto self.dict_poligono_descricao["metadados"]["bracos"][id_braco]["pt_ini_oposto"] = ponto_oposto self.dict_poligono_descricao["metadados"]["bracos"][id_braco]["distancia_oposta"] = distancia_oposta if id_linha > 0: if self.dict_poligono_descricao["metadados"]["linhas"][id_linha - 1]["tipo"] == "extremidade": if self.dict_poligono_descricao["metadados"]["linhas"][id_linha]["tipo"] == "meio": id_linha_ini = self.dict_poligono_descricao["metadados"]["bracos"][id_braco]["id_linha_ini"] self.dict_poligono_descricao["metadados"]["linhas"][id_linha_ini]["id_atras"] = id_linha else: self.dict_poligono_descricao["metadados"]["linhas"][id_linha]["id_atras"] = id_linha - 1 self.dict_poligono_descricao["metadados"]["linhas"][id_linha - 1]["id_frente"] = id_linha ########################################################################################################### "calcula a ponta do poligono se esse vier como extremidade" if self.dict_circ_desc["tipo_circulo"] == "extremidade": if self.dict_circ_desc["subtipo"] == "ponta": poligono_ponta = func_linhas.calc_poligono_ponta( self.dict_poligono_descricao["metadados"]["linhas"][id_linha - 1]["linha_largura"], self.dict_poligono_descricao["metadados"]["linhas"][id_linha - 2]["linha_largura"] ) self.dict_poligono_descricao["metadados"]["linhas"][id_linha]["poligono_ponta"] = poligono_ponta self.dict_poligono_descricao["metadados"]["linhas"][id_linha]["subtipo"] = "ponta"
def montar_linhas_retangular(self, li_ret_base, li_ret_largura): lin_base_plana_1 = li_ret_base[0].projectAs(self.projecao_plana) lin_base_plana_2 = li_ret_base[1].projectAs(self.projecao_plana) compri_total = lin_base_plana_1.length distancia = 0 self.dict_poligono_descricao["metadados"]["bracos"][0] ={ "id_linha_ini":None, "n_extremidades":2, "ponta":None, "base":None, } id_linha = 0 id_li_extrem_ini = None id_li_extrem_fim = None while distancia < compri_total: self.dict_poligono_descricao["metadados"]["linhas"][id_linha] = { "id_linha_braco":id_linha, "id_frente":1, "id_atras":None, "linha_largura":None, "linha_app":None, "braco":None, "distancia":distancia, "tipo":None, } if compri_total - distancia < self.intervalo_entre_linhas: "determina a extremidade final" id_li_extrem_fim = id_linha self.dict_poligono_descricao["metadados"]["linhas"][id_linha]["tipo"] = "extremidade" self.dict_poligono_descricao["metadados"]["linhas"][id_linha]["subtipo"] = 'ponta' elif id_linha > 0: linha_ret = func_retangulo.calc_linha_ret(lin_base_plana_1, lin_base_plana_2, distancia, self.projecao_geo, self.projecao_geo) print linha_ret.WKT if not linha_ret.disjoint(self.poligono_ma): linha_largura = linha_ret.intersect(self.poligono_ma, 2) self.dict_poligono_descricao["metadados"]["linhas"][id_linha]["linha_largura"] = linha_largura self.dict_poligono_descricao["metadados"]["linhas"][id_linha]["tipo"] = "meio" self.dict_poligono_descricao["metadados"]["linhas"][id_linha]["id_atras"] = id_linha - 1 self.dict_poligono_descricao["metadados"]["linhas"][id_linha]["id_frente"] = id_linha + 1 else: distancia += self.intervalo_entre_linhas continue if id_linha == 1: id_li_extrem_ini = id_linha - 1 "determina o poligono da ponta final" self.dict_poligono_descricao["metadados"]["linhas"][id_linha - 1]["tipo"] = "extremidade" self.dict_poligono_descricao["metadados"]["linhas"][id_linha - 1]["subtipo"] = 'ponta' id_linha += 1 distancia += self.intervalo_entre_linhas #poligono ponta inicial poligono_ponta = func_linhas.calc_poligono_ponta( self.dict_poligono_descricao["metadados"]["linhas"][id_li_extrem_ini + 1]["linha_largura"], self.dict_poligono_descricao["metadados"]["linhas"][id_li_extrem_ini + 2]["linha_largura"] ) self.dict_poligono_descricao["metadados"]["linhas"][id_li_extrem_ini]["poligono_ponta"] = poligono_ponta #poligono ponta final poligono_ponta = func_linhas.calc_poligono_ponta( self.dict_poligono_descricao["metadados"]["linhas"][id_li_extrem_fim - 1]["linha_largura"], self.dict_poligono_descricao["metadados"]["linhas"][id_li_extrem_fim - 2]["linha_largura"] ) self.dict_poligono_descricao["metadados"]["linhas"][id_li_extrem_fim]["poligono_ponta"] = poligono_ponta