Você está aqui: AutoCAD VBA ::: Dicas & Truques ::: Layer, Layers |
Como retornar a quantidade de layers no documento atual do AutoCAD usando AutoCAD VBAQuantidade de visualizações: 137 vezes |
Em algumas situações nós precisamos saber a quantidade de layers no desenho atual do AutoCAD. Para isso nós podemos usar a propriedade Count da coleção Layers do documento atual, acessível por meio do objeto ThisDrawing. Veja o código AutoCAD VBA completo para o exemplo: Ao executar este código AutoCAD VBA nós teremos o seguinte resultado: Este documento possui 2 layers. |
![]() |
QGIS ::: PyQGIS API ::: Aplicações com código fonte completo |
Como listar os 5 municípios goianos com maior área em uma camada do QGIS usando PyQGIS - Código Python completoQuantidade de visualizações: 84 vezes |
Este código completo mostra uma aplicação QGIS na qual usei PyQGIS para resolver um desafio muito interessante, e complexo. Acredito que servirá de base para muitos códigos interessantes envolvendo QGIS, Python e PyQGIS. Comecei fazendo o download do shapefile do Estado de Goiás, contendo seus 246 municípios no site do IBGE. Em seguida carreguei o shapefile no QGIS usando um objeto QgsVectorLayer. Note que criei uma classe Municipio para guardar cada um dos municípios encontrados no shapefile. E, para agrupar os objetos da classe Municipio eu criei uma lista chamada municipios. Para acessar cada um dos municipios, ou seja, cada uma das 246 feições da camada, eu usei a função getFeatures() da classe QgsVectorLayer. Então, ao percorrer cada uma dessas feições, eu obtive seus atributos, por meio da função attributes(), e os usei para criar os objetos da classe Municipio. Uma vez obtida a lista de municípios, o passo seguinte foi classificar a lista por ordem crescente de área (a área dos municípios). Um laço for me permitiu listar apenas os 5 municípios com maiores áreas e, além de registrar o somatório de seus áreas, obter os seus códigos para selecioná-los na camada, usando a função selectByExpression(). O desafio final foi mostrar as labels, ou seja, os rótulos de cada um dos municípios no mapa do QGIS, porém, eu queria mostrar os rótulos apenas dos 5 municípios com as maiores áreas. Para resolver o desafio, lancei mão da função setFilterExpression(). Veja o código completo para o exemplo: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- # uma classe para guardar cada um dos municípios # do Estado de Goiás class Municipio: # método construtor def __init__(self, codigo, nome, estado, area): self.codigo = codigo self.nome = nome self.estado = estado self.area = area # para guardar os municípios municipios = [] # vamos criar um novo objeto QgsVectorLayer com o local # do nosso shapefile camada = QgsVectorLayer("C:\\GOIAS\\GO_Municipios_2022.shp", "Municípios do Estado de Goiás", "ogr") # vamos testar se a camada é válida if not camada.isValid(): print("Não foi possível carregar a camada %s" % camada.name()) else: # vamos percorrer todas as feições da camada # e obter os seus atributos feicoes = camada.getFeatures() for f in feicoes: # vamos obter os atributos desta feição atributos = f.attributes() # e criamos um novo objeto da classe Municipio municipio = Municipio(atributos[0], atributos[1], atributos[2], atributos[3]) # adicionamos este município na lista municipios.append(municipio) # agora vamos ordenar a lista por área da maior para # a menor municipios = sorted(municipios, key=lambda municipio:municipio.area, reverse=True) # vamos adicionar a camada à relação de camadas QgsProject.instance().addMapLayer(camada) # vamos calcular a área ocupada pelos 5 maiores municípios # do Estado de Goiás area_5_maiores = 0 for i in range(5): area_5_maiores = area_5_maiores + municipios[i].area # agora vamos selecionar os 5 maiores municípios na # camada do QGIS codigos = "" for i in range(5): codigos = codigos + municipios[i].codigo + ", " codigos = codigos[0:len(codigos) - 2] camada.selectByExpression('"CD_MUN" IN (' + codigos + ')') # e mostramos os resultados print("Os 5 maiores municípios do Estado de Goiás são:\n") for i in range(5): print("{0}) {1} - Área: {2} km2".format(i + 1, municipios[i].nome, municipios[i].area)) print("\nÁrea ocupada pelos 5 maiores municípios: {0} km2".format( area_5_maiores)) # finalmente vamos exibir os nomes dos municípios. Essa foi # a parte mais desafiadora do código, pois eu queria mostrar # somente os rótulos dos cinco maiores municípios settings = QgsPalLayerSettings() settings.isExpression = True settings.placement = QgsPalLayerSettings.Line settings.placement = QgsPalLayerSettings.Horizontal # mostra o nome do município settings.fieldName = "NM_MUN" format = QgsTextFormat() format.setColor(QColor('Black')) settings.setFormat(format) settings.enabled = True # cria e adiciona uma nova regra root = QgsRuleBasedLabeling.Rule(QgsPalLayerSettings()) rule = QgsRuleBasedLabeling.Rule(settings) rule.setDescription("5 Maiores Municípios do Estado de Goiás") # define o campo que será usado no filtro. Note que somente # serão listados os rótulos dos municípios com área maior ou # igual ao quinto elemento da lista municípios campo_area = "AREA_KM2" rule.setFilterExpression(f"\"{campo_area}\" >= {municipios[4].area}") root.appendChild(rule) # define as configurações do rótulo camada.setLabelsEnabled(True) rules = QgsRuleBasedLabeling(root) camada.setLabeling(rules) # redesenha a camada no canvas do QGIS camada.triggerRepaint() Ao executar este código QGIS, Python e PyQGIS nós teremos o seguinte resultado: Os 5 maiores municípios do Estado de Goiás são: 1) Niquelândia - Área: 9846.293 km2 2) Mineiros - Área: 9042.844 km2 3) Caiapônia - Área: 8627.961 km2 4) Rio Verde - Área: 8374.255 km2 5) Nova Crixás - Área: 7308.681 km2 Área ocupada pelos 5 maiores municípios: 43200.03399999999 km2 Para fins de compatibilidade este código foi escrito e testado no QGIS 3.34.5-Prizren. |
C# ::: Dicas & Truques ::: Strings e Caracteres |
Como contar as palavras de uma frase ou texto em C# usando as funções IndexOf(), Replace() e Split() da classe StringQuantidade de visualizações: 11892 vezes |
Este exemplo mostra como retornar a quantidade de palavras em uma frase ou texto usando métodos da classe String do C#. Veja como usar os métodos IndexOf() e Replace() para remover os espaços em excesso e, em seguida, o método Split() para quebrar as partes da frase ou texto usando um único espaço como separador. Veja o código completo: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- using System; namespace Estudos { class Program { static void Main(string[] args) { string frase = "Gosto muito de C# e Java"; int cont = 0; // remove os espaços em excesso while (frase.IndexOf(" ") >= 0) { frase = frase.Replace(" ", " "); } // remove espaços antes e depois da string frase = frase.Trim(); // conta as palavras cont = frase.Split(" ").Length; Console.WriteLine("A frase contém " + cont + " palavras"); Console.WriteLine("\n\nPressione uma tecla para sair..."); Console.ReadKey(); } } } Ao executar este código C# nós teremos o seguinte resultado: A frase contém 6 palavras |
JavaScript ::: Dicas & Truques ::: Arrays e Matrix (Vetores e Matrizes) |
Como adicionar um ou mais elementos ao início de um vetor JavaScript usando o método unshift() do objeto Array - [Revisado]Quantidade de visualizações: 6938 vezes |
O método unshift(), presente no JavaScript desde sua versão 1.2, é usado quando queremos adicionar um ou mais elementos no início de um vetor (array). Veja:---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- <script type="text/javascript"> var valores = new Array(1, 2, 3, 4, 5); document.write("Valores no vetor: " + valores + "<br>"); valores.unshift(6); document.write("Novos valores no vetor: " + valores); </script> Aqui nós adicionamos o valor 6 no início do vetor. Veja agora como adicionar três valores no início do vetor: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- <script type="text/javascript"> var valores = new Array(1, 2, 3, 4, 5); window.alert("Valores no vetor: " + valores); valores.unshift(6, 7, 8); window.alert("Novos valores no vetor: " + valores); </script> É importante observar que a função unshift() modifica o vetor original, e seu retorno é a nova quantidade de elementos no vetor. |
Python ::: Fundamentos da Linguagem ::: Estruturas de Controle |
Python para iniciantes - Como usar a instrução continue da linguagem PythonQuantidade de visualizações: 7618 vezes |
A instrução continue do Python é usada para forçar o interpretador a saltar o restante das instruções da iteração atual do laço e passar para a próxima. Dessa forma, todas as instruções que vierem depois da instrução continue são automaticamente descartadas na iteração atual do laço. Veja um exemplo de um laço for que imprime apenas os números ímpares de 0 a 10: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- def main(): # um laço for que conta de 0 até 10 for i in range(0, 11): # mas queremos apenas os números impares if i % 2 == 0: continue # descarta os pares. Vamos para a próxima iteração # se chegou até aqui é porque o número é impar print(i) if __name__== "__main__": main() Quando executarmos este código nós teremos o seguinte resultado: 1 3 5 7 9 |
Delphi ::: Dicas & Truques ::: Matemática e Estatística |
Como calcular juros simples e montante usando DelphiQuantidade de visualizações: 13262 vezes |
O regime de juros será simples quando o percentual de juros incidir apenas sobre o valor principal. Sobre os juros gerados a cada período não incidirão novos juros. Valor Principal ou simplesmente principal é o valor inicial emprestado ou aplicado, antes de somarmos os juros. Transformando em fórmula temos: J = P . i . n Onde: J = juros P = principal (capital) i = taxa de juros n = número de períodos Imaginemos uma dívida de R$ 2.000,00 que deverá ser paga com juros de 5% a.m. pelo regime de juros simples e o prazo para o pagamento é de 2 meses. O cálculo em Delphi pode ser feito assim: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- procedure TForm1.Button1Click(Sender: TObject); var principal, taxa, juros: double; meses: integer; begin principal := 2000.00; taxa := 0.08; meses := 2; juros := principal * taxa * meses; ShowMessage('O total de juros a ser pago é: ' + FloatToStr(juros)); end; O montante da dívida pode ser obtido das seguintes formas: a) Montante = Principal + Juros b) Montante = Principal + (Principal x Taxa de juros x Número de períodos) M = P . (1 + (i . n)) Veja o código: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- procedure TForm1.Button1Click(Sender: TObject); var principal, taxa, juros, montante: double; meses: integer; begin principal := 2000.00; taxa := 0.08; meses := 2; juros := principal * taxa * meses; montante := principal * (1 + (taxa * meses)); ShowMessage('O total de juros a ser pago é: ' + FloatToStr(juros)); ShowMessage('O montante a ser pago é: ' + FloatToStr(montante)); end; Para questões de compatibilidade, esta dica foi escrita usando Delphi 2009. |
Desafios, Exercícios e Algoritmos Resolvidos de Delphi |
Veja mais Dicas e truques de Delphi |
Dicas e truques de outras linguagens |
C - Como alocar memória para instâncias de uma estrutura (struct) e acessá-las usando ponteiros em C Java - Como remover itens repetidos de uma ArrayList usando um objeto da classe LinkedHashSet do Java |
Quem Somos |
![]() Entre em contato comigo para, juntos, vermos em que posso contribuir para resolver ou agilizar o desenvolvimento de seus códigos.
|
![]() Não basta ter um site. É necessário ter um site que é localizado e converte usuários em clientes. Se sua página não faz isso, Fale comigo e vamos fazer uma analise e conseguir resultados mais satisfatórios..
|
Linguagens Mais Populares |
1º lugar: Java |
Códigos Fonte |
![]() Diga adeus às planilhas do Excel e tenha 100% de controle sobre suas contas a pagar e a receber, gestão de receitas e despesas, cadastro de clientes e fornecedores com fotos e histórico de atendimentos. Código fonte completo e funcional, com instruções para instalação e configuração do banco de dados MySQL. Fácil de modificar e adicionar novas funcionalidades. Clique aqui e saiba mais |
![]() Tenha o seu próprio sistema de controle de estoque web. com cadastro de produtos, categorias, fornecedores, entradas e saídas de produtos, com relatórios por data, margem de lucro e muito mais. Código simples e fácil de modificar. Acompanha instruções para instalação e criação do banco de dados MySQL. Clique aqui e saiba mais |