REDEMAT REDE TEMÁTICA EM ENGENHARIA DE MATERIAIS UFOP – CETEC – UEMG UFOP - CETEC - UEMG Dissertação de Mestrado "Desenvolvimento de um software para levantamento de características de reação ao fogo dos materiais de uso comum: carga de incêndio" Autora: Sandra Arlinda Santiago Maciel Orientador: Prof. Antônio Maria Claret de Gouveia, DSc Co-Orientador: Prof. Ronaldo Silva Trindade, MSc Setembro de 2008 Sumário 1 INTRODUÇÃO 13 2 OBJETIVOS 14 2.1 OBJETIVO GERAL . . . . . . . . . . . . . . . . . . . . . . . 14 2.2 OBJETIVOS ESPECÍFICOS . . . . . . . . . . . . . . . . . . 15 3 JUSTIFICATIVA 15 4 REVISÃO DA LITERATURA 17 4.1 4.2 FOGO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 4.1.1 Definição de fogo . . . . . . . . . . . . . . . . . . . . . 18 4.1.2 Representação gráfica do fogo . . . . . . . . . . . . . . 19 INCÊNDIO . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 4.2.1 Causas de Incêndio . . . . . . . . . . . . . . . . . . . . 20 4.2.2 Fatores que influenciam o incêndio . . . . . . . . . . . 21 4.2.3 Classificação dos Incêndios . . . . . . . . . . . . . . . . 22 4.2.4 Fases de um incêndio . . . . . . . . . . . . . . . . . . . 23 5 REAÇÃO AO FOGO 5.1 25 ASPECTOS LEGAIS E NORMALIZADORES . . . . . . . . 26 5.1.1 Legislação Federal Brasileira sobre Incêndio . . . . . . 29 5.1.2 Legislação do Estado de Minas Gerais sobre Carga de Incêndio . . . . . . . . . . . . . . . . . . . . . . . . . . 30 5.1.3 Instruções Técnicas do Corpo de Bombeiros Militar de minas Gerais – CBMMG sobre Carga de Incêndio . . . 31 5.2 CARGA DE INCÊNDIO . . . . . . . . . . . . . . . . . . . . . 32 5.2.1 Carga de incêndio especı́fica . . . . . . . . . . . . . . . 32 5.2.2 Procedimentos para determinação da carga de Incêndio 33 5.2.3 Potencial Calorı́fico dos materiais . . . . . . . . . . . . 34 5.2.4 Medição Direta da Carga de Incêndio . . . . . . . . . . 35 5.2.5 Incêndio controlado pela Carga de Incêndio . . . . . . 41 5.2.6 Classificação dos Incêndios pela Carga de Incêndio . . . 42 5.2.7 Classificação do Risco quanto a Carga de Incêndio . . . 43 6 CARACTERÍSTICAS DA CIDADE COLONIAL DE OURO PRETO 44 7 INCÊNDIOS EM OURO PRETO 48 8 ANÁLISE DE RISCO DE INCÊNDIO EM SÍTIOS HISTÓRICOS 55 9 O LEVANTAMENTO NO BAIRRO ANTÔNIO DIAS 63 10 PROGRAMAÇÃO 65 2 10.1 TIPOS DE PROGRAMAÇÃO . . . . . . . . . . . . . . . . . . 66 10.1.1 Programação estruturada (PE) . . . . . . . . . . . . . 66 10.1.2 Programação modular ou procedural . . . . . . . . . . 67 10.1.3 Programação Orientada a Objetos (POO) . . . . . . . 67 11 PROGRAMAÇÃO ORIENTADA A OBJETOS(OO) 67 11.1 ANÁLISE OO . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 11.2 CONCEITOS . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 11.2.1 Tipos Básicos de Objetos . . . . . . . . . . . . . . . . . 71 12 LINGUAGEM DE PROGRAMAÇÃO 73 12.1 DELPHI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 13 METODOLOGIA 74 13.1 ETAPA 1 – LEVANTAMENTO DE DADOS . . . . . . . . . . 75 13.2 ETAPA 2 – ANÁLISE OO . . . . . . . . . . . . . . . . . . . . 75 13.3 ETAPA 3 – MODELAGEM OO . . . . . . . . . . . . . . . . . 76 13.4 ETAPA 4 – PROGRAMAÇÃO OO . . . . . . . . . . . . . . . 76 13.5 ETAPA 5 – APLICAÇÃO . . . . . . . . . . . . . . . . . . . . 84 14 RESULTADOS E DISCUSSÕES 84 14.1 MODELAGEM . . . . . . . . . . . . . . . . . . . . . . . . . . 84 3 14.1.1 Geral . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 14.1.2 Edificação . . . . . . . . . . . . . . . . . . . . . . . . . 86 14.1.3 Pavimento . . . . . . . . . . . . . . . . . . . . . . . . . 87 14.1.4 Cômodo . . . . . . . . . . . . . . . . . . . . . . . . . . 88 14.1.5 Objeto (real) . . . . . . . . . . . . . . . . . . . . . . . 89 14.1.6 Regras de negócio . . . . . . . . . . . . . . . . . . . . . 89 14.1.7 Relatórios . . . . . . . . . . . . . . . . . . . . . . . . . 89 14.2 PROGRAMAÇÃO . . . . . . . . . . . . . . . . . . . . . . . . 90 14.3 APLICAÇÃO . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 15 CONCLUSÃO 100 16 CONSIDERAÇÕES FINAIS 101 17 ANEXOS 106 17.1 ANEXO A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 17.2 Anexo B . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 17.3 ANEXO C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 17.4 ANEXO D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 17.5 ANEXO E . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 17.6 ANEXO F . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 4 17.7 ANEXO G . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 17.8 ANEXO H . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 17.9 ANEXO I . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 17.10ANEXO J . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 17.11ANEXO K . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 17.12ANEXO L . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 17.13ANEXO M . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 17.14ANEXO N . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 17.15ANEXO O . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141 17.16ANEXO P . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153 17.17ANEXO Q . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160 17.18ANEXO R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178 17.19ANEXO S . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192 5 LISTA DE FIGURAS LISTA DE FIGURAS Lista de Figuras 1 Triângulo do Fogo . . . . . . . . . . . . . . . . . . . . . . . . . 20 2 Fases de um incêndio . . . . . . . . . . . . . . . . . . . . . . . 24 3 Incêndio no edifı́cio Andraus . . . . . . . . . . . . . . . . . . . 28 4 Incêndio no edifı́cio Joelma . . . . . . . . . . . . . . . . . . . . 28 5 Ouro Preto/MG . . . . . . . . . . . . . . . . . . . . . . . . . . 46 6 Flagrante do incêndio do Fórum em 1950 . . . . . . . . . . . . 51 7 Prédio restaurado após o incêndio de 1967 . . . . . . . . . . . 51 8 Prédio restaurado após o incêndio de 1977 . . . . . . . . . . . 52 9 Incêndio no prédio do Pilão . . . . . . . . . . . . . . . . . . . 53 10 Incêndio no República Estudantil Baviera . . . . . . . . . . . 54 11 Levantamento de dados . . . . . . . . . . . . . . . . . . . . . . 59 12 Densidades de carga de incêndio e fatores de risco . . . . . . . 61 13 Mapa do bairro Antônio Dias, com indicação das edificações que compuseram o levantamento da carga de incêndio . . . . . 64 14 Diagrama de classe Pavimento . . . . . . . . . . . . . . . . . . 76 15 Diagrama de classe Geral . . . . . . . . . . . . . . . . . . . . . 85 16 Diagrama de classe Edificação . . . . . . . . . . . . . . . . . . 86 17 Diagrama de classe Pavimento . . . . . . . . . . . . . . . . . . 87 6 LISTA DE FIGURAS LISTA DE FIGURAS 18 Diagrama de classe Cômodo . . . . . . . . . . . . . . . . . . . 88 19 Diagrama de classe Objeto . . . . . . . . . . . . . . . . . . . . 89 20 Tela de abertura - apresentação do software CCI . . . . . . . . 91 21 Tela que permite escolher uma edificação já cadastrada . . . . 92 22 Tela para entrada de dados gerais da edificação, nova ou anteriormente cadastrada - suas dimensões, distâncias com relação às edificações vizinhas e cadastro de pavimentos . . . . . . . . 93 23 Tela para entrada das dimensões por pavimento(s) o que permite cadastro de pisos com diferentes dimensões de pé-direito . 94 24 Tela para entrada de(s) cômodo(s) - cadastro de nome e sua especialidade de acordo com tabela de carga de incêncio especı́fica por ocupação (anexo A) . . . . . . . . . . . . . . . . . . 94 25 Tela para entrada de dados do(s) comodo(s) - dimenões e posição em relação a um ponto da edificação escolhido para ser o inicial para que possa ser elaborada um croqui da edificação 95 26 Tela para cadastro de objeto(s) real(is) . . . . . . . . . . . . . 95 27 Tela para entrada de dados do(s) objeto(s) real(is) - dimensões, material, massa especı́fica para determinação de seu volume e de sua carga de incêndio . . . . . . . . . . . . . . . . . . . . . 96 28 Tela para cadastro de dados no banco de dados de materiais nome e potencial calorı́fico . . . . . . . . . . . . . . . . . . . . 96 29 Tela para entrada de dados no banco de tipos de ocupação . . 97 7 LISTA DE FIGURAS 30 LISTA DE FIGURAS Tela para solicitar que seja gerado relatório da aplicação no formato HTML . . . . . . . . . . . . . . . . . . . . . . . . . . 97 31 Tela de ajuda ao usuário contendo tópicos: de descrição do software;a respeito da entrada de dados; orientando como gerar relatórios e com os principais conceitos sobre carga de incêndio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 32 Relatório HTML . . . . . . . . . . . . . . . . . . . . . . . . . 99 33 Exemplo de cargas de incêndio especı́fica por ocupação . . . . 106 34 Metodologia para medição direta de carga de incêndio . . . . . 107 35 Exemplo de cálculo de carga de incêndio - edificação único compartimento . . . . . . . . . . . . . . . . . . . . . . . . . . 108 36 Exemplo de cálculo de carga de incêndio - edificação vários compartimentos parte 1 . . . . . . . . . . . . . . . . . . . . . 109 37 Exemplo de cálculo de carga de incêndio - edificação vários compartimentos parte 2 . . . . . . . . . . . . . . . . . . . . . 110 38 Exemplo de cálculo de carga de incêndio - edificação vários compartimentos parte 3 . . . . . . . . . . . . . . . . . . . . . 111 39 Exemplo de cálculo de carga de incêndio - edificação vários compartimentos parte 4 . . . . . . . . . . . . . . . . . . . . . 112 40 Exemplo de cálculo de carga de incêndio - edificação vários compartimentos parte 5 . . . . . . . . . . . . . . . . . . . . . 113 8 LISTA DE FIGURAS 41 LISTA DE FIGURAS Exemplo de cálculo de carga de incêndio - edificação vários compartimentos parte 6 . . . . . . . . . . . . . . . . . . . . . 114 42 Exemplo de cálculo de carga de incêndio - edificação vários compartimentos partes 7 e 8 . . . . . . . . . . . . . . . . . . . 115 43 Exemplo de cálculo de carga de incêndio - edificação vários compartimentos parte 9 . . . . . . . . . . . . . . . . . . . . . 116 44 Exemplo de cálculo de carga de incêndio - edificação vários compartimentos parte 10 . . . . . . . . . . . . . . . . . . . . . 117 45 Exemplo de cálculo de carga de incêndio - edificação vários compartimentos parte 11 . . . . . . . . . . . . . . . . . . . . . 118 9 LISTA DE TABELAS LISTA DE TABELAS Lista de Tabelas 1 Componentes do fogo . . . . . . . . . . . . . . . . . . . . . . . 19 2 Classificação das edificações e áreas de risco quanto à carga incêndio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 3 Comparativo entre vários levantamentos para carga de incêndio especı́fica . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 4 Valores de densidade de carga de incêndio para escritórios . . 38 5 Cargas de incêndio especı́ficas publicadas - ocupações residenciais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 6 Comparação com valores apresentados pela Norma Brasileira . 41 7 Classificação do Risco quanto a Carga de Incêndio . . . . . . . 43 8 Comparativo com valores apresentados por Araújo(2004) . . . 100 10 LISTA DE TABELAS LISTA DE TABELAS Resumo A densidade de carga de incêndio é um dos parâmetros essenciais ao modelamento de incêndio em uma edificação. No Brasil, as cargas de incêndio por ocupação são definidas nos regulamentos públicos tendo como base medições realizadas em paı́ses estrangeiros de costumes e climas diferentes. Medições locais de carga de incêndio foram feitas pioneiramente em Belo Horizonte e em Ouro Preto a partir de iniciativas do Laboratório de Análise de Riscos em Incêndio (LARin), UFOP. O processo de medição direta da carga de incêndio é muito trabalhoso, uma vez que compreende a pesagem de todos os materiais combustı́veis existentes em um ambiente e a sua caracterização quanto ao poder calorı́fico. Nesse trabalho, a construção de um software para otimizar o processo de determinação da carga de incêndio em edificações brasileiras é descrito. O software C.C.I. (Cálculo da Carga de Incêndio), baseado em programação orientada a objetos, é desenvolvido com o emprego do editor de modelos Delphi 7.0 que é o ambiente visual para a linguagem Object Pascal e utiliza a metodologia de criação de classes. O banco de dados é alimentado com resultados dos levantamentos diretos já realizados em Ouro Preto. Exemplos de aplicação do software são fornecidos. 11 LISTA DE TABELAS LISTA DE TABELAS ABSTRACT The density of fire load is one of the essential parameters for modeling of fire in a building. In Brazil, the loads of fire by occupation are defined in the regulations public based on measurements made in foreign countries, customs and different climates. Measurements of local load of fire were made pioneer in Belo Horizonte and in Ouro Preto from initiatives of the laboratory analysis of risks in Fire (LARin), UFOP. The process of direct measurement of the load of fire is too much work, once you understand the weighing of all combustible materials in an existing environment and its characterization as the calorific value. In this work, the construction of a software to optimize the process of determining load of fire in Brazilian buildings is described. The software C.C.I. (Calculation of load Fire), based on the object-oriented programming, is developed with the job of editor of models that Delphi 7.0 is the visual environment for the language Object Pascal and uses the methodology of creating classes. The database is fed with direct results of surveys made in Ouro Preto. Examples of application software are provided. 12 1 INTRODUÇÃO 1 INTRODUÇÃO O incêndio pode ser descrito por meio de sua severidade, que é a medida dos efeitos do incêndio sobre as edificações, os usuários e o meio ambiente. A severidade pode ser associada à máxima temperatura desenvolvida em um incêndio. A temperatura máxima de um incêndio se eleva com o aumento da carga de incêndio especı́fica, também chamada de densidade de carga de incêndio, e com o aumento do grau de ventilação. A duração do incêndio cresce com o aumento da carga de incêndio especı́fica e diminui com o aumento do grau de ventilação (ASSIS,2001 apud ARAÚJO, 2004). A duração do incêndio e sua severidade dependem da densidade da carga de incêndio, portanto, a pesquisa de tal densidade para os diversos usos e ocupações das edificações é uma atividade importante na Engenharia de Incêndio. De acordo com Claret(2004) a medição da carga de incêndio (Q) em MJ é feita mediante pesagem dos diferentes materiais combustı́veis, cujo poder calorı́fico (Hc) deve ser conhecido. A densidade da carga de incêndio, dada em MJ/m2 , é o resultado da divisão da carga de incêndio total pela área de piso do compartimento. A carga de incêndio pode ser fixa, isto é, incorporada à própria edificação ou do tipo móvel que é uma função direta e imediata de sua ocupação. O somatório das cargas de incêndio fixa e móvel, denominado carga de incêndio total, depende da arquitetura e da ocupação especı́fica das edificações. 13 2 OBJETIVOS Normalmente a carga de incêndio móvel é responsável pela maior parcela da carga de incêndio total das edificações (ASSIS,2001 apud ARAÚJO, 2004). A técnica de Programação Orientada a Objetos permite criar programas componentizados, separando as partes do sistema por responsabilidade e fazendo com que essas partes se comuniquem entre si por meio de mensagens. Nas técnicas de programação tradicionais, geralmente não há separação entre propriedades e ações, causando dependências enormes no sistema e dificultando futuras manutenções no código do programa (CARMO, acesso em 17/09/2006 às 22h). O software baseado em programação orientada a objeto desenvolvido com o emprego do editor de modelos Delphi 7.0 que, é o ambiente visual para a linguagem Object Pascal e utiliza a Teoria da Classificação. O banco de dados é alimentado com os resultados dos levantamentos diretos já realizados em Ouro Preto. 2 OBJETIVOS 2.1 OBJETIVO GERAL Desenvolver e aplicar um software (C.C.I. - Cálculo da Carga de Incêndio), para determinar a carga de incêndio, embasado na programação orientada a objetos e avaliar sua eficiência. 14 2.2 OBJETIVOS ESPECÍFICOS 2.2 3 JUSTIFICATIVA OBJETIVOS ESPECÍFICOS • Consolidar e avaliar os dados disponı́veis de levantamentos manuais de carga de incêndio, realizados no Bairro Antônio Dias, na cidade histórica de Ouro Preto, Minas Gerais. • Classificar e definir os objetos a serem aplicados na programação orientada a objetos. • Definir a modelagem orientada a objetos das classes envolvidas no problema em questão. • Desenvolver o software C.C.I. (Cálculo da Carga de Incêndio) com a programação orientada a objetos para as classes modeladas. • Aplicar o software C.C.I. 3 JUSTIFICATIVA Conhecer as caracterı́sticas de reação ao fogo dos materiais de uso comum é de suma importância para atuar na prevenção e combate ao incêndio, de modo especial das edificações situadas em sı́tios históricos brasileiros devido às suas condições desfavoráveis no combate ao incêndio. Nessas cidades, as edificações de maior interesse de preservação geralmente são geminadas, construı́das com materiais vulneráveis ao fogo e aglomeradas em ruas estreitas. Igrejas e edifı́cios públicos de maior porte possuem elementos decorativos insubstituı́veis tais como altares, forros e esculturas, os 15 3 JUSTIFICATIVA quais não se pode admitir que o fogo sequer comece, pois um combate eficaz do incêndio contribuiria na destruição das obras de arte (ALVES, 2003). Embasado no Método Gretener de Avaliação de Risco de Incêndio, adaptado pela Universidade Federal de Ouro Preto (UFOP/MG), sob a coordenação do Prof. Antônio Maria Claret de Gouveia, aplicado à cidade de Ouro Preto, foi criada a Instrução Técnica –35 sobre Segurança contra Incêndio em Edificações Históricas, que contemplou a necessidade da determinação por medição direta da densidade da carga de incêndio em uma edificação, uma vez que os valores estabelecidos na Instrução Técnica no. 09, em seu Anexo A, não condizem com a realidade das caracterı́sticas construtivas e de ocupação de tais edificações. Por meio de uma metodologia aplicada à cidade de Ouro Preto para avaliação do risco global de incêndio em cidades tombadas e suas formas de prevenção, proteção e combate, durante o desenvolvimento dos cálculos, de modo especial os de cargas de incêndio, verificou-se a necessidade de desenvolvimento de uma ferramenta computacional capaz de conter um extenso banco de dados que auxiliasse nos cálculo dos volumes do mobiliário (ARAÚJO, 2004). Mediante a necessidade de se determinar o fator de risco quanto à densidade de carga de incêndio por medição direta foi desenvolvido um software para levantamento de caracterı́sticas de reação ao fogo dos materiais de uso comum: carga de incêndio. Devido à extensão do banco de dados do software foi viabilizada a determinação da carga de incêndio para uma maior diversidade de materiais, 16 4 REVISÃO DA LITERATURA comparação com valores normatizados pela norma prescritiva e emissão de relatório para complementação de laudos técnicos. Além disso, poderá contribuir com a otimização do trabalho de profissionais ligados à área de atuação da Engenharia de Incêndio e estudos futuros sobre caracterı́sticas de reação ao fogo dos materiais de uso comum. 4 REVISÃO DA LITERATURA 4.1 FOGO O fogo sempre se constituiu num elemento de grande significado para o homem. Antes do modo de produzi-lo e controlá-lo ter sido descoberto, por seu surgimento ocorrer apenas naturalmente, por exemplo, em conseqüência da erupção de vulcões, o fogo provocava verdadeiro terror no homem. Durante muitos séculos, sua ocorrência era atribuı́da aos deuses. Mais adiante, o homem encontrou a utilidade para o fogo através da luz que era produzida ao seu redor e calor que transmitia ao corpo, na cocção dos alimentos e para afugentar animais ferozes. Então, o controle do fogo passou a ser tarefa muito importante, sendo motivo de disputa entre grupos de selvagens. A disputa pela posse do fogo só terminou quando o homem aprendeu a produzi-lo. Segundo Gomes(1998), como isso aconteceu não se sabe ao certo. A verdade é que chegaram ao mesmo fim por dois caminhos diferentes: pelo centelhamento, causado pelo choque, ou forte atrito entre pedras ou pela fricção entre um pedaço de madeira, no formato de um bastão cilı́ndrico, 17 4.1 FOGO 4 REVISÃO DA LITERATURA introduzido num buraco de igual diâmetro estando este rodeado de folhas secas e gravetos secos. Enquanto o homem viveu nas cavernas, o risco de incêndio não existiu. No entanto, com a vivência em comunidade, nas cabanas construı́das com galhos, troncos e folhas de árvores secas, a falha no controle do fogo fez surgir o incêndio. O primeiro agente extintor empregado foi a água. Foram utilizadas também a areia, a terra e mantas de animais e, com a evolução no combate ao fogo, tubos feitos com couro de animais. A partir da comprovação de Antoine Lavoisier de que uma substância, um corpo submetido à ação do fogo, sofre uma reação quı́mica que dá origem à formação de novos corpos, sem que tenha sido criado ou perdido outro material, os pesquisadores voltaram suas atenções para os aspectos fı́sicoquı́micos do fenômeno da queima ou combustão. (GOMES, 1998). De acordo com Seito et al (2008), o estudo do fogo como ciência tem pouco mais de vinte anos, com a criação de uma associação internacional que reuniu cientistas dos maiores institutos e universidades do mundo. 4.1.1 Definição de fogo De acordo com a Instrução Técnica no. 02 do CBMSP o fogo é um fenômeno fı́sico-quı́mico onde se tem lugar uma reação de oxidação com emissão de calor e luz. No entanto, para realização desse fenômeno devem coexistir quatro componentes, apresentados na tabela 1. 18 4.1 FOGO 4 REVISÃO DA LITERATURA Tabela 1: Componentes do fogo Componente do fogo Conceito Combustı́vel Qualquer substância capaz de produzir calor por meio da reação quı́mica Comburente (oxigê- Substância que alimenta a reação quı́mica nio) Calor Forma de energia que se transfere de um sistema para o outro em virtude de uma diferença de temperatura Esses componentes do fogo constituem o que se denomina representação gráfica do fogo. 4.1.2 Representação gráfica do fogo A representação gráfica do fogo, figura 1, explica os meios de extinção do fogo pela retirada do combustı́vel, do comburente ou do calor por meio do Triângulo do Fogo como apresentado na figura geométrica plana. De acordo com a interpretação desta figura geométrica plana, os três elementos que compõem cada lado do triângulo - combustı́vel, comburente e calor - devem coexistir ligados para que o fogo se mantenha. 19 4.2 INCÊNDIO 4 REVISÃO DA LITERATURA Figura 1: Triângulo do Fogo Fonte CLARET, 2006, p.11 4.2 INCÊNDIO O incêndio pode ser definido como o fogo indesejado ou ainda como o fogo sem controle. (CBMMG, 1990a) (IT no. 02 do CBMMG). Além disso, define-se incêndio segundo a NBR 13.860(1997) como o fogo fora de control. 4.2.1 Causas de Incêndio De acordo com Gomes(1998), o incêndio pode surgir por diversas razões, dentre as quais as mais comuns são: 20 4.2 INCÊNDIO 4 REVISÃO DA LITERATURA • causas fortuitas – ponta de cigarro ou fósforo incandescente, largada no cesto ou lata de lixo; tomada elétrica sobrecarregada; pano impregnado com álcool, éter, gasolina, cera, querosene e outros inflamáveis, guardados sem o menor cuidado; fio elétrico energizado, sem isolamento ou desprotegido, em contato com papel, tecido ou qualquer material combustı́vel; equipamento elétrico funcionando irregularmente, apresentando alta temperatura e/ou centelhamento. • causas acidentais – vazamento de lı́quido inflamável em área de risco; concentração de gás inflamável em área confinada; curto circuito em aparelho elétrico energizado ou em fiação não isolada adequadamente; combustão espontânea; eletricidade estática. Ainda, de acordo com Araújo(2004), as Instruções Técnicas apresentadas pela Defesa Civil do Estado do Rio de Janeiro, o incêndio pode ter causas naturais ou artificiais. As causas naturais são decorrentes de fenômenos da natureza e se dividem em natureza fı́sico-quı́mica, por exemplo vulcões, terremotos, raios, etc e de natureza biológica tais como os incêndios decorrentes do aumento da temperatura devido à fermentação e à ação degradativa das bactérias. 4.2.2 Fatores que influenciam o incêndio Segundo Seito et al (2008), dentre os vários fatores que concorrem para inı́cio e desenvolvimento de um incêndio, pode-se citar: • forma geométrica e dimensões da sala ou local, 21 4.2 INCÊNDIO 4 REVISÃO DA LITERATURA • superfı́cie especı́fica dos materiais combustı́veis envolvidos, • distribuição dos materiais combustı́veis no local, • quantidade de material combustı́vel incorporado ou temporário, • caracterı́sticas de queima dos materiais envolvidos, • local do inı́cio do incêndio no ambiente. • condições climáticas (temperatura e umidade relativa), • aberturas de ventilação do ambiente, • aberturas entre ambientes para a propagação do incêndio, • projeto arquitetônico do ambiente e/ou edifı́cio, • medidas de prevenção de incêndio existentes, • medidas de proteção contra incêndio instaladas. Dentre esses fatores, determinarão o crescimento do incêndio: o primeiro item ignizado, as caracterı́sticas do comportamento ao fogo dos materiais na proximidade do item ignizado e sua distribuição no ambiente. 4.2.3 Classificação dos Incêndios Para a Prevenção Contra Incêndio, basicamente, pode-se classificar os incêndios pela natureza e pela quantidade dos materiais combustı́veis 1 existentes nas áreas a serem protegidas. (GOMES, 1998). 1 Produtos ou substâncias (não resistentes ao fogo) que sofrem ignição ou combustão quando sujeitos a calor (IT 02/01, CBMMG) 22 4.2 INCÊNDIO 4 REVISÃO DA LITERATURA Para Gomes (2001) apud Araújo(2004) , quanto à natureza dos materiais combustı́veis, os incêndios se classificam em: • incêndios da Classe A – fogo em sólidos combustı́veis mais comuns e de fácil combustão, tais como papel, algodão, madeira, tecidos e similares. São aqueles cujo combustı́vel queima em superfı́cie e profundidade, deixando resı́duos sólidos (cinza) após a queima. • incêndios da Classe B – queimam apenas em superfı́cie, como, por exemplo, os lı́quidos e gases inflamáveis. Pode-se citar a gasolina, o álcool, querosene, acetileno, gás liquefeito de petróleo – GLP. • incêndios da Classe C – ocorrem em aparelhos elétricos energizados como motores, circuladores de ar, televisores, rádios e outros similares. Estes incêndios, após ser retirado o agente energizador, podem ser combatidos como outra classe de incêndio, geralmente a classe “A”. • incêndios da Classe D – ocorrem em metais pirofólicos Quanto à quantidade de materiais combustı́veis , pode-se classificar o incêndio calculando-se a quantidade de calor encontrada por unidade de área ocupada. A quantidade de calor que poderá ser gerado por unidade de área é a carga de incêndio da edificação e será apresentada de forma mais detalhada adiante.(CBMMG, 1990a) 4.2.4 Fases de um incêndio A evolução do incêndio é caracterizada por quatro fases, como pode ser observado na figura 2, que ilustra a evolução do incêndio celulósico na edifi23 4.2 INCÊNDIO 4 REVISÃO DA LITERATURA cação. Figura 2: Fases de um incêndio Fonte - ISO/TR3814:1989(E) Tests to measuring reaction to fire of buildings materials – Their development and application apud Seito(2008) A primeira fase da curva de evolução do incêndio celulósico é caracterizada pelo incêndio incipiente que tem um crescimento lento, em geral de duração entre cinco a vinte minutos até a ignição. O sistema de detecção deverá operar nessa fase e o combate a incêndio e conseqüente extinção terá grande probabilidade de sucesso. Na segunda fase tem-se o crescimento das chamas e conseqüente aqueci24 5 REAÇÃO AO FOGO mento do ambiente. Todo o ambiente é tomado por gases e vapores combustı́veis desenvolvidos na pirólise dos combustı́veis sólidos quando a temperatura do ambiente atinge em torno de 600o C. Havendo lı́quidos combustı́veis, eles irão contribuir com seus vapores, ocorrerá a inflamação generalizada (flashover ) e o ambiente será tomado por grandes labaredas. Caso o incêndio seja combatido antes dessa fase (por exemplo, por chuveiros automáticos) haverá grande probabilidade de sucesso na sua extinção. Na terceira fase ocorre a diminuição gradual da temperatura do ambiente e das chamas, por exaurir o material combustı́vel. E, na quarta fase, ocorre a extinção do fogo. Nessa fase, o incêndio irá diminuir de intensidade e de severidade na proporção que vai se exaurindo os materiais combustı́veis. 5 REAÇÃO AO FOGO Os sistemas construtivos sofreram profundas modificações trazidas pelo desenvolvimento tecnológico, como a incorporação acentuada de materiais combustı́veis aos elementos construtivos, introduzindo riscos que anteriormente não existiam nas edificações. Segundo Seito(2008), a reação 2 ao fogo dos materiais utilizados no re- vestimento/acabamento de paredes e tetos e dos incorporados aos sistemas construtivos deve ser considerada por meio da verificação do maior ou menor potencial que eles possuem para contribuir para o desenvolvimento do fogo, quando submetidos a uma situação de combustão. 2 Todas as transformações fı́sicas e/ou quı́micas sofridas por um material exposto a um fogo incontrolado. (SEITO et al., 2008). 25 5.1 ASPECTOS LEGAIS E NORMALIZADORES 5 REAÇÃO AO FOGO Ainda, de acordo com o mesmo autor, a reação ao fogo dos materiais contidos na edificação, quer seja como mobiliários (estofamentos, cortinas, objetos de decoração, etc.), ou então como agregados aos elementos construtivos (revestimentos de paredes, tetos, pisos e fachadas), destaca-se como um dos principais fatores responsáveis pelo crescimento do fogo, pela propagação das chamas e pelo desenvolvimento de fumaça e gases tóxicos, contribuindo para que o incêndio atinja fases crı́ticas e gere pânico e mortes. Portanto, o desenvolvimento e a duração de um incêndio são diretamente influenciados pela quantidade de combustı́vel a queimar. A vulnerabilidade de um ambiente perante o fogo é diretamente influenciada pela carga de incêndio, a soma das energias calorı́ficas possı́veis de serem liberadas pela combustão completa de todos os materiais combustı́veis em um espaço, inclusive os revestimentos das paredes, divisórias, pisos e tetos (CBMMG, 1990a). 5.1 ASPECTOS LEGAIS E NORMALIZADORES As conseqüências que os incêndios causam à sociedade são notórias. Ocorrem perdas sociais, econômicas e humanas. (SEITO et al., 2008) Até o inı́cio dos anos 70, pela ausência de grandes incêndios e com grande número de vı́timas, as questões relativas a incêndios eram vistas como algo que dizia mais respeito ao corpo de bombeiros. Os Códigos de Obras dos municı́pios continham, de forma esparsa, alguma regulamentação sobre o tema. A pouca regulamentação que o corpo de bombeiros possuı́a era advinda da área seguradora, indicando geralmente a obrigatoriedade de medidas de 26 5.1 ASPECTOS LEGAIS E NORMALIZADORES 5 REAÇÃO AO FOGO combate a incêndio, como provisão de extintores e hidrantes, bem como a sinalização desses equipamentos. (SEITO et al., 2008). A Associação Brasileira de Normas Técnicas (ABNT) tratava do tema regulamentando mais os assuntos referentes à produção de extintores de incêndio. Até que, de acordo com Seito et al (2008), se deu inicio uma seqüência de tragédias: • Gran Circo Norte-Americano, Niterói, Rio de Janeiro - o maior incêndio em perda de vidas, em nosso Paı́s, e de maior perda de vidas ocorridas em um circo até nossos dias. Aconteceu em 17 de dezembro de 1961, tendo como resultado 250 mortos e 400 feridos; • Incêndio na Indústria Volkswagen do Brasil - na Ala 13 da montadora de automóveis Volkswagen, em São Bernardo do Campo, ocorrido em 18 de dezembro de 1970, consumindo um dos prédios da produção (Ala 13), com uma vı́tima fatal e com perda total dessa edificação; • Incêndio no edifı́cio Andraus, (figura3)- O primeiro grande incêndio em prédios elevados ocorreu em 24 de fevereiro de 1972, no edifı́cio Andraus, na cidade de São Paulo. Tratava-se de um edifı́cio comercial e de serviços, com 31 andares, estrutura em concreto armado e acabamento em pele de vidro. Do incêndio resultaram 352 vı́timas, sendo 16 mortos e 336 feridos; • Incêndio no edifı́cio Joelma (figura 4) - Esse edifı́cio situa-se na Avenida Nove de Julho, 22 (Praça da Bandeira - São Paulo), possuindo 23 27 5.1 ASPECTOS LEGAIS E NORMALIZADORES 5 REAÇÃO AO FOGO Figura 3: Incêndio no edifı́cio Andraus Fonte: SEITO et al,2008, pag.23 andares de estacionamentos e escritórios. Ocorrido em 1o de fevereiro de 1974, gerou cento e setenta e nove mortos e trezentos e vinte feridos. Figura 4: Incêndio no edifı́cio Joelma Fonte: SEITO et al,2008, pag.24 28 5.1 ASPECTOS LEGAIS E NORMALIZADORES 5 REAÇÃO AO FOGO O que ocorreu a seguir parece um despertar, uma percepção de que os grandes incêndios com vı́timas, até então distantes, passam a ser entendidos como fatos reais e que exigem mudanças. (SEITO et al., 2008). Logo após o incêndio do edifı́cio Andraus, o então Ministério do Exército produziu as Normas de Orientação para a Organização das Polı́cias Militares e dos Corpos de Bombeiros Militares, determinando que o corpo de bombeiros, inseridos nas Polı́cias Militares (PPMM), fossem organizados em comandos e quadros de pessoal próprios. Os comandos próprios foram criados em todo o Brasil e, a partir da Constituição Federal de 1988, essas organizações iniciaram o movimento de desvinculação das PPMM, afastando-se de uma estrutura ligada ao Sistema de Persecução Penal, do qual não fazem parte. (SEITO et al., 2008). As movimentações imediatas como manifestações, mudanças nas regulamentações, capacitação técnica contribuı́ram com o inı́cio das regulamentações que hoje norteiam os princı́pios da segurança contra incêndio. No entanto, apesar dos trabalhos já realizados na área, muito ainda deve ser estudado, pesquisado, planejado e introduzido em nossas regulamentações para que possamos alcançar um nı́vel aceitável de segurança contra incêndio para toda a população brasileira. (SEITO et al., 2008). 5.1.1 Legislação Federal Brasileira sobre Incêndio A Norma Brasileira NBR 14.432 (2001) ”Exigências de resistência ao fogo de elementos construtivos de edificações”, válida para edificações de qualquer material, tem por objetivo estabelecer as condições a serem atendidas pe29 5.1 ASPECTOS LEGAIS E NORMALIZADORES 5 REAÇÃO AO FOGO los elementos construtivos, sejam eles estruturais ou de compartimentação 3 , para que, em situação de incêndio, seja evitado o colapso estrutural e sejam atendidos requisitos de estanqueidade e isolamento por um tempo suficiente para possibilitar: a fuga dos ocupantes da edificação em condições de segurança; a segurança das operações de combate ao incêndio e a minimização de danos a edificações adjacentes e à infra-estrutura pública. A Norma Regulamentadora 23 – NR 23, editada em 1978, obrigatória nos locais em que haja relação trabalhista regida pela Consolidação das Leis do Trabalho, obriga que esses locais possuam: proteção contra incêndio, saı́das, equipamentos para resposta a incêndios e pessoas treinadas para uso desses equipamentos.Em seu detalhamento, determina largura de saı́das, portas, escadas, etc., bem como sistemas de hidrantes, extintores e alarme, mais a realização de exercı́cios de alerta (SEITO et al., 2008). 5.1.2 Legislação do Estado de Minas Gerais sobre Carga de Incêndio A legislação do estado de Minas Gerais que contém o regulamento de segurança contra incêndio e pânico nas edificações e áreas de risco vigente é o Decreto no. 44270 de 31 de março de 2006. Este decreto regulamenta a Lei no. . 14.230, de 19 de dezembro de 2001, que dispõe sobre a prevenção contra incêndio e pânico no Estado e dá outras providências. De acordo com Capı́tulo X, artigo 23, as edificações e áreas de risco são classificadas quanto 3 Capacidade de um elemento construtivo de impedir a ocorrência de rachaduras ou de aberturas através das quais podem passar as chamas e gases quentes capazes de ignizar um chumaço de algodão (ABNT, 2001). 30 5.1 ASPECTOS LEGAIS E NORMALIZADORES 5 REAÇÃO AO FOGO ao risco: • quanto ao nı́vel de segurança, • quanto à segurança contra incêndio, • quanto ao pânico. Para determinação de tais riscos, deve-se classificar as edificações quanto à carga de incêndio,de acordo com a tabela 2, a seguir. Tabela 2: Classificação das edificações e áreas de risco quanto à carga incêndio Risco Carga Incêndio MJ/m2 Baixo Até 300 MJ/m2 Médio Acima de 300 até 1.200 MJ/m2 Alto Acima de 1.200 MJ/m2 Fonte: (MINASGERAIS, 2006), pag.30 5.1.3 Instruções Técnicas do Corpo de Bombeiros Militar de minas Gerais – CBMMG sobre Carga de Incêndio O procedimento para a determinação da carga de incêndio das edificações e áreas de risco está estabelecido na IT no. 09 do CBMMG. Para a determinação da carga de incêndio especı́fica das edificações deve-se utilizar uma tabela que lista tais cargas por ocupação , com exceção das edificações destinadas a depósitos, explosivos e ocupações especiais que para as quais deve-se aplicar a metodologia descrita para levantamento da carga de incêndio especı́fica. 31 5.2 CARGA DE INCÊNDIO 5 REAÇÃO AO FOGO No caso de edificações históricas, a IT no. 35 do CBMMG, Segurança contra incêndio em Edificações Históricas, CBMMG (2005) determina no subitem 6.3.1.1 que a densidade de carga de incêndio deve ser determinada por medição direta de acordo com metodologia descrita na IT no. 09 do CBMMG. 5.2 CARGA DE INCÊNDIO A carga de incêndio em uma edificação pode ser fixa ou móvel. (CBMMG, 1990a) Carga de incêndio fixa - é a proveniente da quantidade de energia existente e que pode ser liberada durante um incêndio pelos materiais inerentes à construção. Carga de Incêndio móvel - é a proveniente da quantidade de energia existente e que pode ser liberada durante um incêndio pelos materiais constituintes dos bens alojados em uma edificação. Carga de incêndio total - é a obtida pelo somatório das cargas de incêndio fixa e móvel. 5.2.1 Carga de incêndio especı́fica - é o valor da carga de incêndio dividido pela área de piso do espaço considerado, expresso em megajoule (MJ) por metro quadrado (m2 ). 32 5.2 CARGA DE INCÊNDIO 5.2.2 5 REAÇÃO AO FOGO Procedimentos para determinação da carga de Incêndio O procedimento para a determinação da carga de incêndio das edificações e áreas de risco está estabelecido na IT no. 09 do CBMMG . Para a determinação da carga de incêndio especı́fica das edificações devese aplicar a tabela que correlaciona cargas de incêndio especı́ficas por ocupação da referidas Instrução Técnica. (FIG. 33) Em edificações destinadas a depósitos, explosivos e ocupações especiais aplica-se a metodologia para levantamento da carga de incêndio especı́fica de acordo com a metodologia apresentada na Instrução Técnica no. 09, do CBMMG. (FIG. 34) O valor da carga de incêndio especı́fica deve ser determinado pela expressão 1: qf i = P Mi Hi Ai (1) Onde: qf i - valor da carga de incêndio especı́fica, em MJ/m2 , Mi - massa total de cada componente i do material combustı́vel, em kg. Quando houver alteração de ocupação, Mi deverá ser reavaliado, Hi - potencial calorı́fico especı́fico de cada componente i do material combustı́vel, em MJ/kg, Ai - área do piso do compartimento, em m2 . O levantamento da carga de incêndio especı́fica deve ser realizado em módulos de no máximo 500m2 de área de piso. Módulos maiores podem 33 5.2 CARGA DE INCÊNDIO 5 REAÇÃO AO FOGO ser utilizados quando o espaço analisado possuir materiais combustı́veis com potenciais calorı́ficos semelhantes e uniformemente distribuı́dos. A carga de incêndio especı́fica do piso analisado deve ser tomada como sendo o maior entre a média das cargas de incêndio dos dois módulos de maior valor ou 85% da carga de incêndio do módulo de maior valor. De acordo com a IT no. 35 do CBMMG em edificações históricas a densidade de carga de incêndio deve ser determinada por medição direta de acordo com metodologia descrita na IT no. 09 do CBMMG. 5.2.3 Potencial Calorı́fico dos materiais O potencial calorı́fico é também chamado de poder calorı́fico. Segundo Martin e Peris(1982)apud Seito et al (2008) o poder calorı́fico é a quantidade de calor que o material libera por unidade de peso quando submetido a uma combustão completa. Rosso(1975) apud Seito et al (2008) também assume esta definição de poder calorı́fico, porém alertando para a existência do poder calorı́fico superior e inferior. O poder calorı́fico superior é aquele que é considerada a quantidade de calor gerado pela água que compõe o material, por meio da condensação do vapor d’água desprendido durante o processo de combustão. Quando esse calor de condensação não for admitido, temos o poder calorı́fico inferior. Seito et al (2008) ressaltam ainda, que parte do calor liberado na combustão de um material é absorvida novamente pelo fogo e pelos materiais adjacentes inflamados, sendo portanto o desenvolvimento do fogo dado em 34 5.2 CARGA DE INCÊNDIO 5 REAÇÃO AO FOGO função do poder calorı́fico dos materiais combustı́veis existentes no local. 5.2.4 Medição Direta da Carga de Incêndio Os primeiros estudos de que se tem conhecimento para a determinação estatı́stica da carga de incêndio em edifı́cios de escritórios foram realizados por Baldwin(1970), no Reino Unido, e Culver(1976), nos Estados Unidos. Mediante coleta de dados realizadas em campo e medições de massa e volume esses trabalhos servem de exemplo aos pesquisadores que buscam averiguar valores de carga de incêndio a serem adotadas em projetos, segundo as ocupações de edifı́cios. (ASSIS, 2001). No perı́odo de julho de 1992 a julho de 1993, Kumar e RAO(1995) realizaram na cidade de Kanpur, Índia, outro levantamento das cargas de incêndio em oito edifı́cios de escritórios públicos com até quatro pavimentos. A análise teve como suporte um levantamento da massa dos objetos, servindose de relações geométricas e de densidades dos materiais. Dos resultados, conclusões e comparações houve redução dos valores de carga de incêndio obtidos por Culver(1976) nos Estados Unidos, porém houve proximidade dos resultados obtidos por Baldwin(1970), no Reino Unido, o que denota influência de evoluções industriais, de fatores culturais, do uso de informática na armazenagem de dados entre outros. Em 1995, os mesmos autores, levantaram as cargas de incêndio de trinta e cinco residências na cidade de Kanpur, Índia. Foi realizado um levantamento das massas e densidades dos objetos para obtenção das cargas de incêndios, análise e comparações das cargas de incêndio com relação ao número de 35 5.2 CARGA DE INCÊNDIO 5 REAÇÃO AO FOGO cômodos das residências, ao uso e ocupação dos cômodos e à altura das residências. A primeira pesquisa cientı́fica realizada no Brasil para determinação da densidade da carga de incêndio ou, simplesmente carga de incêndio, para os edifı́cios de escritórios foi realizada por Assis(2001). Foi realizado o levantamento sistemático dos 47.382m2 de área de escritórios na cidade de Belo Horizonte/MG, totalizando oito edifı́cios, sendo dois de domı́nio público e os demais privados. As quantidades dos materiais combustı́veis fixos e móveis foram levantadas considerando-se a geometria e distribuição no espaço. Com base no poder calorı́fico dos materiais pesquisados na literatura técnica, foram calculadas as cargas de incêndio correspondente. Para o cálculo da carga de incêndio foram utilizadas planilhas feitas no Excel, cujos resultados obtidos estão relacionados na Tabela 3. Tabela 3: Comparativo entre vários levantamentos para carga de incêndio especı́fica Autor(es) BALDWIN CULVER KUMAR (1970) Média 372 (1979) 960 e NBR RAO 14.432 ASSIS e CLARET (1993) (2000) (2001) 348 700 901 (MJ/m2 ) Fonte: adaptado de ASSIS,2003 Assis(2001) comentou ainda, que o valor normativo parece ser resultado de uma estimativa que vem sendo adotada em normas estrangeiras há vários 36 5.2 CARGA DE INCÊNDIO 5 REAÇÃO AO FOGO anos. No ano de 2003, Alves apresentou uma Análise de Riscos de Incêndios em Edificações em Sı́tios Históricos e realizou dois estudos de caso. O primeiro estudo foi realizado na Casa da Câmara e o segundo, na Casa da Baronesa, ambas localizadas em Ouro Preto/MG. Para tanto, o fator de risco devido à carga de incêndio, fator q, foi calculado. O fator q relativo à carga móvel foi determinado a partir da pesagem dos diferentes materiais de caracterı́stica móvel multiplicados ao poder calorı́fico (Hc) correspondente. A carga de incêndio especı́fica foi obtida pela razão entre a carga de incêndio pela área do piso. A carga de incêndio fixa foi considerada com base no valor estimado tabelado para cada tipo de edificação (FIG. 33). O valor do fator de risco devido à carga móvel e fixa foi determinado utilizandose tabelas de fator de risco, propostas pelo Método de Análise Global de Risco. O Método aplicado foi resultado das modificações do método original de Gretener, feitas pela equipe técnica do Laboratório de Análise de Risco em Incêndio (LarIn) da Escola de Minas da UFOP, em projeto para a UNESCO (Organização das Nações Unidas para a Educação e a Cultura). Alves(2003) concluiu que os estudos de caso mostraram a viabilidade prática de aplicação do método já que, os resultados indicaram um risco de incêndio fisicamente coerente com as visı́veis deficiências de proteção existentes nos imóveis examinados. Bwalya et al , fez uma revisão literária com o objetivo de identificar o estado da arte na área de projetos de incêndio e identificar as que necessitassem de futuras pesquisas. As cargas de incêndio relatadas na literatura variavam de 100 a 10.000MJ/m2 . Alguns estudos foram citados e suas respectivas den37 5.2 CARGA DE INCÊNDIO 5 REAÇÃO AO FOGO sidades de cargas determinadas de incêndio foram tabeladas, deixando clara a diferença entre os valores de densidades encontradas para edifı́cios contendo o mesmo tipo de ocupação, o que remete à necessidade de se fazer a medição direta para determinação da carga de incêndio. Tal incongruência pode ser observada na tabela 4, que apresenta valores de densidade de carga de incêndio determinados por alguns autores em escritórios. Tabela 4: Valores de densidade de carga de incêndio para escritórios Autor(es) KARISSON YII e YII QUIN- (2000) TIERE Nova (2000) Zelân- USA apud dia IT No. 09 IT No. 14 CBMMG CBMSP 700 700 apud (BWALYA; (BWALYA; Média SULTAN; SULTAN; BÉNI- BÉNI- CHOU, CHOU, 2003) 2003) 709 950 (MJ/m2 ) Embasados nos dados provenientes da citada revisão literária, Bwalya et al (2003) concluı́ram que era visı́vel a grande variação entre os valores de cargas de incêndio e que essa variação acontecia principalmente devido às 38 5.2 CARGA DE INCÊNDIO 5 REAÇÃO AO FOGO diferenças nas localizações geográficas e na maneira subjetiva de quantificação da carga de incêndio. Bwalya et al (2004) realizaram um levantamento piloto de cargas de incêndio em casas no Canadá. Questionários contendo informações pertinentes ao levantamento foram enviados, via internet, e 74 deles foram preenchidos. De acordo com resultados desses levantamentos constatou-se que as cargas de incêndio especı́ficas apresentam grandes variações em residências, mesmo em se tratando de mesma localização geográfica, como pode ser observado na Tabela 5. 39 5.2 CARGA DE INCÊNDIO 5 REAÇÃO AO FOGO Tabela 5: Cargas de incêndio especı́ficas publicadas - ocupações residenciais Carga de Paı́s Referências Observações incêndio especı́fica (MJ/m2 ) 450 Estados Unidos 8 Levantamentos em 200 residências 500 Estados Unidos 8 Levantamentos em 70 residências 400, 800, Nova Zelândia 9 Recomendações do Código de Constru- 1200 ções da Nova Zelândia 600 Suı́ça 11 - 724 Nova Zelândia 12 - 670 Japão 13 Levantamentos em 214 residências 600,500 Canadá - 74 residência ora levantadas Fonte: BWALYA et al (2004) Em 2004, Araújo realizou um levantamento de carga de incêndio na cidade histórica de Ouro Preto/MG, em 43 edificações, localizadas na Rua São José. Um importante resultado desse levantamento foi a comparação dos valores das cargas de incêndio medidas nas diversas ocupações com os apresentados pela Norma Brasileira (tabela 6) Essa comparação evidencia 40 5.2 CARGA DE INCÊNDIO 5 REAÇÃO AO FOGO a necessidade da determinação da carga de incêndio pelo procedimento da medição direta. Tabela 6: Comparação com valores apresentados pela Norma Brasileira Carga de Incêndio (MJ/m2 ) Ocupação NBR (1) ARAÚJO(2004) (2) Razão (2)/(1) Museu 300 2599 9 Lojas de Vestuário 400 3930 10 Repúblicas Estudantis 300 1347 4 Lavanderia 300 1515 5 Livraria 2000 2129 1 Farmácia 1000 6734 7 Fonte: ARAÚJO, 2004 5.2.5 Incêndio controlado pela Carga de Incêndio De acordo com Seito et al (2008) , na terceira fase do incêndio (FIG.2) chamada incêndio desenvolvido, as temperaturas do ambiente atingirão valores acima de 1.100o C. Todos os materiais combustı́veis do ambiente entrarão em combustão e o incêndio irá se propagar por meio das aberturas internas, fachadas e coberturas da edificação. A duração desse estágio está ligada à carga de incêndio que passa dos 80% para 30% do valor inicial. As aberturas de ventilação são suficientes para a queima livre dos materiais combustı́veis, portanto o crescimento e a duração do incêndio dependem somente das caracterı́sticas do combustı́vel e seu arranjo no ambiente. 41 5.2 CARGA DE INCÊNDIO 5.2.6 5 REAÇÃO AO FOGO Classificação dos Incêndios pela Carga de Incêndio A dinâmica das cidades brasileiras que se modernizam para serem competitivas, dentro dos mercados globais, aumenta a complexidade da produção e dos serviços que, paralelamente às exigências da população urbana, tem provocado o aumento dos riscos de incêndios nas edificações. Para atender a população são implantados grandes depósitos de materiais combustı́veis e materiais perigosos, criando locais com enorme potencial de incêndio. O risco de incêndio pode ser definido como a probabilidade de ocorrência de incêndio em um determinado local. A segurança contra incêndio pode ser definida como a probabilidade da não ocorrência (ARAÚJO, 2004). Segundo Seito et al (2008) , o risco de ocorrência de um incêndio é determinado por fatores inerentes a cada edifı́cio e a segurança desejável para um edifı́cio está diretamente relacionada às categorias de risco e aos objetivos da segurança contra incêndio, bem como aos requisitos funcionais atendidos pelo edifı́cio em estudo. Os fatores que contribuem para a definição do risco de incêndio são basicamente quatro: caracterı́sticas da população do edifı́cio, tipo de ocupação, caracterı́sticas construtivas do edifı́cio e localização do edifı́cio. Para Gomes (2001) apud (ARAÚJO, 2004), a classificação dos incêndios pela carga de incêndio é: • Risco leve ou Risco 1 – fogo em pequena carga de incêndio, cujo desenvolvimento se faz com fraca liberação de calor. A carga de incêndio é de até 270.000 Kcal/m2 ou aproximadamente 1.130MJ/m2 ; 42 5.2 CARGA DE INCÊNDIO 5 REAÇÃO AO FOGO • Risco médio ou Risco 2 – fogo em média carga de incêndio, cujo desenvolvimento se faz com moderada liberação de calor. A carga de incêndio é de até 270.000 a 540.000 Kcal/m2 ou aproximadamente 1.130 a 2.260 MJ/m2 ; • Risco Pesado ou Risco 3 - fogo em elevada carga de incêndio, cujo desenvolvimento se faz com elevada liberação de calor. A carga de incêndio é de até 540.000 a 1.080.000 Kcal/m2 ou aproximadamente 2.260 a 4.500 MJ/m2 . 5.2.7 Classificação do Risco quanto a Carga de Incêndio De acordo com o Decreto no.44.270 de 31 de março de 2006 , que regulamenta a segurança contra incêndio e pânico nas edificações e áreas de risco no Estado de Minas Gerais, o Risco se classifica quanto à carga de incêndio, como apresentado na Tabela 7. Tabela 7: Classificação do Risco quanto a Carga de Incêndio Ocupação Carga de Incêndio (MJ/m2 ) Baixo Até 300 Médio Acima de 300 até 1200 Alto cima de 1200 Fonte: MINAS GERAIS, 2006 A avaliação dos materiais com relação ao seu comportamento diante do fogo, ou seja, a reação ao fogo dos mesmos, mostra-se necessária e de grande 43 6 CARACTERÍSTICAS DA CIDADE COLONIAL DE OURO PRETO valia, pois envolve variáveis que estão diretamente associadas aos fatores que definem o risco de incêndio. Por meio dessa avaliação, torna-se possı́vel atuar de maneira preventiva durante o processo produtivo do edifı́cio, reduzindo-se os riscos causados pelo incêndio (SEITO et al., 2008). Ainda de acordo com os mesmos autores, estamos assumindo riscos acima do aceitável em nossas edificações, sendo importante que utilizemos métodos de avaliação de desempenho e análise de risco de maneira a maximizar os resultados de Segurança contra Incêndio (SCI) com os recursos investidos. A análise de risco envolve: • Modelagem matemática pelo uso de possibilidade de ocorrência de fatores em série ou paralelo para a ocorrência de incêndio. • Análise de locais de riscos especı́ficos. • Cálculos de carga de incêndio, velocidade de propagação. • Cálculo de perdas:humanas, materiais, operacionais, institucionais, etc. • Probabilidade de deflagração generalizada, ou seja, o incêndio passar de um edifı́cio para outro alcançando uma escala urbana. 6 CARACTERÍSTICAS DA CIDADE COLONIAL DE OURO PRETO As cidades mineiras, em sua maioria encravadas nas montanhas, cresce- ram da junção de arraiais localizados ao longo das encostas, adaptando-se a 44 6 CARACTERÍSTICAS DA CIDADE COLONIAL DE OURO PRETO uma topografia desfavorável à criação de um sı́tio urbano, apresentando uma configuração linear, paralela às curvas de nı́vel. “Estas cidades, de acordo com a hierarquia da organização administrativa colonial, se transformavam de pequenos arraiais em vilas, com o aglomerado usual da Igreja Matriz, com o Pelourinho nas proximidades. Desse modo apresentavam um conjunto urbano especı́fico, com edifı́cios oficiais – que constituı́am o centro dominante da dinâmica cultural – balizando a imagem urbana.” (BARBOSA; TRAMONTANO, acesso em 24/03/08 às 18h). Os arraiais e vilas que deram origem às cidades do ciclo do ouro mineiro, foram criados em curto espaço de tempo, refletindo uma lógica própria na apropriação do espaço urbano. Eles resultaram de uma cultura regional própria, diferentemente das povoações litorâneas, que obedeceram inicialmente a um traçado militar defensivo, evidenciando não só o desenho mas um estilo de vida que se aproximava dos da metrópole. Na colônia, em que durante os primeiros dois séculos de colonização predominavam os interesses senhoriais do mundo rural, a constituição dos núcleos urbanos, apoiados pela coroa, fez-se num passo decisivo na criação de uma rede urbana dinâmica com um papel apreciável no processo de modernização (BARBOSA; TRAMONTANO, acesso em 24/03/08 às 18h). Ouro Preto foi fundada em 1698 como resultado da aglomeração dos arraiais de mineração nas encostas dos montes Ouro Preto e Itacurumim. O traçado urbano é irregular, as casas foram sendo construı́das seguindo a sinuosidade do terreno (Figura 5). A cidade está localizada na Serra do Espinhaço, na Zona Metalúrgica de Minas Gerais (Quadrilátero Ferrı́fero). Encontra-se na região central da 45 6 CARACTERÍSTICAS DA CIDADE COLONIAL DE OURO PRETO Figura 5: Ouro Preto/MG Fonte: BARBOSA; TRAMONTANO, acesso em 24/03/08 às 18h macroregião metalúrgica e Campo das Vertendes de Minas Gerais. O municı́pio faz limites ao sul com Catas Altas da Noruega, Itaverava, Ouro Branco e Congonhas; a oeste com Belo Vale e Moeda; a leste com Mariana; e ao norte com Itabirito e Santa Bárbara. Seu território corresponde a uma área de 1245 Km2 , tendo 11 distritos, além da sede. A distribuição topográfica do municı́pio pode ser assim resumida: • terreno plano: 5% • ondulado: 40% • montanhoso: 55% De acordo com (ARAÚJO, 2004) a temperatura varia entre 6 e 28o C, 46 6 CARACTERÍSTICAS DA CIDADE COLONIAL DE OURO PRETO sendo que em junho e julho pode chegar a 2o C. Possui altitude média de 1.116m, tendo como ponto mais alto, com 1.722,o Pico do Itacolomi. O clima é tropical de altitude, com pluviosidade média de 2.018 mm/ano, com chuvas concentradas no verão. Dentre os rios, tem-se as nascentes do rio das Velhas, rio Piracibaca, rio Gualaxo do Norte, rio Gualaxo do Sul, rio Mainart e ribeirão Funil. Os minerais encontrados em Ouro Preto são o ouro, a hematita, a dolomita, a turmalina, a pirita, a granada, a moscovita, o topázio e o topázio imperial. O topázio imperial é uma pedra só encontrada em Ouro Preto, especialmente no distrito Rodrigo Silva. Segundo resultado da contagem populacional , em 2007, a população total do municı́pio de Ouro Preto corresponde a 67.048 habitantes (IBGE, 2007). Por manter com tamanha integridade e coerência a sua inteira imagem setecentista, Ouro Preto, tendo se beneficiado em sua formação e desenvolvimento no perı́odo colonial do fato de ter sido um dos primeiros e mais intensos núcleos de mineração do ouro e de ter sido o centro das decisões administrativas do território mineiro, e, além disso, por fatores de ordem econômica, com a decadência da mineração, constitui hoje, na opinião dos técnicos da UNESCO, no exemplo de maior autenticidade ainda existente, pelo conjunto e unidade e da civilização urbana aqui implantada pelos colonizadores portugueses. A UNESCO então em 1980, elevou a cidade de Ouro Preto à condição de Patrimônio Cultural da Humanidade, para que se estabelecesse uma maior importância às questões da preservação. O conjunto arquitetônico, de predominância barroca, é constituı́do de 45 monumentos tombados isoladamente e cerca de mil edificações tombadas em conjunto. Os 47 7 INCÊNDIOS EM OURO PRETO principais problemas desse núcleo são de adensamento, alterações dos espaços internos, substituição de materiais e dos sistemas de construção originais, além de um grande número de obras irregulares (OLIVEIRA, 2003.). Ouro Preto, que é uma das cidades mais emblemáticas para a história e a cultura brasileiras, foi o principal centro de mineração no século 18, palco da Conjuração Mineira de 1789 e fonte de inspiração dos artistas modernistas da Semana de 22, que a identificaram como um dos berços da identidade nacional (OLIVEIRA, 2003.). Na cidade encontram-se grandes criações artı́sticas dos mestres Aleijadinho e Ataı́de, além de uma rica e antiga cultura imaterial, cujas manifestações artı́stico-religiosas e musicais vêm sendo transmitidas geração a geração ao longo dos últimos séculos. 7 INCÊNDIOS EM OURO PRETO Em que pese sempre parecer uma fatalidade, o incêndio é um fenômeno fı́sico cujo risco muitas vezes salta ao mais superficial olhar informado. No caso de Ouro Preto, que pode ser considerado tı́pico no Barroco Mineiro, dois entre muitos parâmetros de risco são visı́veis: a densidade de carga de incêndio e o risco de ativação (ALVES, 2003). Ao longo do tempo, as mudanças na edificação e em seu uso aumentaram certamente a carga combustı́vel. Apesar de jamais ter sido medida, o processo de mudança do mobiliário e a adaptação de imóveis residenciais para comerciais faz crer no aumento da densidade da carga de incêndio. Mas não 48 7 INCÊNDIOS EM OURO PRETO só a quantidade de carga de incêndio tem mudado: a velocidade com que uma antiga mesa de madeira das casas comerciais da antiga Vila Rica liberaria calor é muito menor que as das mesas de plástico ou dos estofamentos dos sofás das salas de hoje. Esse fato traz um sério agravamento do risco (ALVES, 2003). O primeiro de que se tem notı́cia aconteceu em 1949, de acordo com testemunhas oculares, ou em 1950, segundo o boletim ”Isto é Inconfidência”edição no 11, do Museu da Inconfidência. O prédio incendiado é o mesmo que, hoje, abriga o CAEM (Centro Acadêmico da Escola de Minas). Conta-se que naquele ano havia falta de açúcar no mercado, o que forçava grandes altas no preço do produto. E uma grande surpresa se revelou com o fogo no prédio (Figura 6): seu porão estaria abarrotado com sacos de açúcar de um comerciante local. O açúcar estocado para especulação acabou servindo como combustı́vel para o incêndio. No entanto, a repercussão do incêndio foi pouco além das divisas municipais. Ouro Preto vivia o perı́odo do ostracismo e a mı́dia não tinha o poder que tem hoje. Mesmo tendo a cidade corrido o perigo que agora se repetiu, parece que nenhuma providência foi tomada para dotar a cidade de mais segurança contra incêndios. Foi preciso acontecer o segundo, dezessete anos mais tarde, junho de 1967, quando se incendiou o sobrado onde está instalada agência da Caixa Econômica Federal, na Rua São José (Figura 7). O térreo do sobrado era ocupado por uma padaria, e, nos pavimentos superiores funcionava o Clube Social Aluminas, constituı́do por funcionários da ALUMINAS (Alumı́nio Minas Gerais), hoje Novelis Adytia Birla. Tudo foi reduzido a cinzas. Depois desse, quando Ouro Preto voltava a chamar a atenção na mı́dia, iniciaram-se as gestões que culminaram na 49 7 INCÊNDIOS EM OURO PRETO instalação da guarnição do Corpo Bombeiros. Dez anos depois, 1977, outro grande incêndio comoveu Ouro Preto, também na Rua São José. Desta vez foi uma tradicional loja de tecidos. Como no incêndio anterior, tudo foi perdido. Felizmente, nesses sinistros não houveram vı́timas. (Disponı́vel em www/ouropreto.com.br acessado em 24/02/2008 ás 21h12minutos) 50 7 INCÊNDIOS EM OURO PRETO Figura 6: Flagrante do incêndio do Fórum em 1950 Fonte:www/ouropreto.com.br acessado em 24/02/2008 ás 21h12minutos Figura 7: Prédio restaurado após o incêndio de 1967 Fonte:www/ouropreto.com.br acessado em 24/02/2008 ás 21h12minutos No dia 14 de abril de 2003 a esquina da Praça Tiradentes com a Rua do 51 7 INCÊNDIOS EM OURO PRETO Figura 8: Prédio restaurado após o incêndio de 1977 Fonte:www/ouropreto.com.br acessado em 24/02/2008 ás 21h12minutos Ouvidor, entrada para o bairro Antônio Dias, perdeu o contorno imponente feito pelo casarão setecentista, onde funcionaram por longos anos o hotel e o restaurante Pilão. De acordo com informações de pessoas que trabalham ou circulavam nas proximidades, eram cerca de 17 horas 30 minutos, quando foram detectados os primeiros indı́cios do incêndio. O fogo teria se iniciado num cômodo dos fundos, talvez na cozinha, da joalheira ( Amsterdan Sauer). A guarnição local do Corpo de Bombeiros foi acionada e o combate ao sinistro se iniciou, mas a equipagem era toda obsoleta e, para agravar a situação, quando foi necessário um hidrante nas proximidades, este não funcionou. O fogo se alastrou com facilidade devido às condições da construção: paredes de pau-a-pique, mandeirame antigo e ressequido, além do material de fácil combustão nas várias lojas (Figura 9). A parte alta do prédio estava desativada, mas o térreo era ocupado por loja de eletrodomésticos, joalheria, 52 7 INCÊNDIOS EM OURO PRETO farmácia e um café. Espalhada a notı́cia, as vizinhas cidades de Mariana e Itabirito enviaram socorro por meio dos Bombeiros Voluntários da mesma forma reagiram empresas e empresários, que enviaram carros pipa. A essa altura já se configurava perda total do prédio, mas havia que se impedir a propagação do fogo para os prédios vizinhos, o que levaria à destruição uma grande parte do centro histórico, uma vez que os casarões são geminados. Somente depois das 21 horas o fogo foi controlado. Figura 9: Incêndio no prédio do Pilão Fonte:www/ouropreto.com.br acessado em 24/02/2008 ás 21h12minutos 53 7 INCÊNDIOS EM OURO PRETO Em março de 2007, o incêndio da República Baviera, Figura 10, infelizmente, é tragicamente tı́pico. O Corpo de Bombeiros não chega a tempo, não está bem equipado, não existem hidrantes próximos e o que se tentou usar não tinha água. Não havia proteção domiciliar. E se armazenava material inflamável de maneira inadequada. Além do problema com a rede de hidrantes, o Corpo de Bombeiros teve dificuldade em acessar o local do incêndio, pois as ruas estreitas da cidade dificultaram as manobras do caminhão. Figura 10: Incêndio no República Estudantil Baviera Fonte:www/ouropreto.com.br acessado em 24/02/2008 ás 21h12minutos 54 8 ANÁLISE DE RISCO DE INCÊNDIO EM SÍTIOS HISTÓRICOS 8 ANÁLISE DE RISCO DE INCÊNDIO EM SÍTIOS HISTÓRICOS Após a ocorrência do incêndio na edificação que abrigava o Hotel Pi- lão, em abril de 2003, houve grande mobilização por parte de governantes e da sociedade em geral para que fosse implantado um estudo do risco de incêndio na cidade de Ouro Preto, bem como para aplicação de medidas capazes de diminuı́-lo. Por isso, foi desenvolvido um programa de segurança contra incêndio, que contou com a participação da Universidade Federal de Ouro Preto, sob coordenação do Profo Antônio Maria Claret de Gouvêia. De acordo com Araújo(2004) , para se avaliar o risco de incêndio a que está exposta uma edificação ou um conjunto de edificações, foi realizada a análise global de risco, adaptando-se o Método de Gretener (norma técnica SIA-81Societé Suisse des Ingenieurs et Architectes – Method for fire safety evaluation) para edificações caracterı́sticas do barroco brasileiro. Como bem enfatiza Claret (2006) , a idéia central desse método é o balanceamento de parâmetros de risco e medidas de segurança presentes na edificação. Os primeiros facilitam e os segundos dificultam o desenvolvimento e a propagação dos incêndios. Essa filosofia de projeto de segurança contra incêndio foi desenvolvida para companhias de seguro pelo engenheiro suı́ço Max Gretener, entre 1960 e 1965, tendo se universalizado em face da sua simplicidade. Para viabilizar o balanceamento, foi necessário quantificar o perigo de incêndio e a segurança contra incêndio na edificação por meio da atribuição de pesos que foram denominados, respectivamente, fatores de risco e fatores de segurança. Em conseqüência, a medida do perigo de incêndio na 55 8 ANÁLISE DE RISCO DE INCÊNDIO EM SÍTIOS HISTÓRICOS edificação foi denominada exposição ao risco de incêndio (E ). Analogamente, a medida da segurança foi denominada segurança contra incêndio (S ). Há, portanto, dois conceitos opostos que expressam a facilidade e a dificuldade de desenvolvimento e propagação de incêndio em uma edificação: a exposição ao risco de incêndio, E, e a segurança contra incêndio, S. Para quantificá-los, utiliza-se um sistema de pesos ou fatores de risco e de segurança, respectivamente, cujo produto será a sua medida. Então, sendo fi, i = 1, p os fatores de risco (isto é, os pesos que atribuı́mos a cada um dos parâmetros de risco existentes na edificação) e sj, j = 1, n os fatores de segurança (isto é, os pesos que atribuı́mos a cada um dos fatores de segurança), as grandezas E (equação 2) e S (equação 3) são assim definidas: E= p Y fi (2) si (3) 1 S= n Y 1 Como vimos anteriormente, o conceito de risco de incêndio envolve a noção de probabilidade: maior risco de incêndio significa maior probabilidade de ocorrência de um incêndio severo na edificação. Ora, a exposição ao risco de incêndio é uma grandeza que não expressa a noção de probabilidade, mas indica, a qualquer tempo, a idéia de que um incêndio é possı́vel em um dado compartimento, ou seja, existe possibilidade de ocorrência de um incêndio. Nesse ponto, salta aos olhos a idéia de que a exposição ao risco de incêndio é uma medida do potencial de incêndio que pode ser ativado por circunstâncias especiais, decorrendo dessa probabilidade de ativação o risco 56 8 ANÁLISE DE RISCO DE INCÊNDIO EM SÍTIOS HISTÓRICOS de incêndio. Assim, o risco de incêndio, representado por R, é definido pelo produto da grandeza determinı́stica E, que denota a exposição ao risco de incêndio, pela grandeza probabilı́stica A, que denota o risco de ativação de incêndio. Isto é: R = E.A (4) Conhecendo o risco de incêndio, R, e a segurança contra incêndio, S, ambas grandezas probabilı́sticas, como vimos na seção anterior, a razão da segunda pela primeira fornece um coeficiente de segurança contra incêndio, denotado por γ , que mede o balanceamento entre medidas que dificultam o incêndio e medidas que o favorecem, ambas afetadas pelos respectivos fatores de ativação: γ= S R (5) Então, γ mede o eventual desequilı́brio entre risco de incêndio e segurança contra incêndio. γ ≥ 1 indica uma situação favorável à segurança; ao contrário, γ < 1 indica uma situação desfavorável quanto à segurança contra incêndio. Não se pode falar quantitativamente em probabilidade de ocorrência de um incêndio severo, mas é possı́vel falar-se em maior ou menor risco de ocorrência de um incêndio severo, conforme o caso. Sabemos que, ao elaborar um projeto de segurança contra incêndio, desejamos obter o maior coeficiente de segurança contra incêndio com o menor investimento possı́vel. Essa relação de forças no projeto deve ser disciplinada pela exigência legal, via normas técnicas, de um coeficiente de segurança mı́nimo aceitável, γmin . 57 8 ANÁLISE DE RISCO DE INCÊNDIO EM SÍTIOS HISTÓRICOS Logo, no projeto de segurança a ser implementado na edificação deve-se ter: γ ≥ γmin (6) Deve-se observar que a equação 6, a despeito de sua simplicidade, encerra toda a complexidade do sistema [edificação + incêndio + usuário] no termo γ, e todos os aspectos polı́tico-econômico-sociais envolvidos no problema da segurança contra incêndio no termo γmin . É por essa razão que se diz que o método ora proposto é uma análise global do risco de incêndio. O método se particulariza quando se determinam os parâmetros de risco predominantes nos sı́tios históricos considerados e os fatores de risco a eles atribuı́dos. De modo análogo, o método deve propor um conjunto de medidas de segurança viáveis de se implantar nos sı́tios históricos e a eles atribuir fatores de segurança, como apresentado a seguir propostos pelo método. A aplicação do método deverá compreender as seguintes fases: a) levantamento de dados da edificação ou conjunto de edificações Na tabela 11, vê-se uma lista dos dados contendo parte dos dados necessários para a elaboração de uma análise de risco. 58 8 ANÁLISE DE RISCO DE INCÊNDIO EM SÍTIOS HISTÓRICOS Figura 11: Levantamento de dados Fonte: CLARET, 2006 59 8 ANÁLISE DE RISCO DE INCÊNDIO EM SÍTIOS HISTÓRICOS b) determinação da exposição ao risco de incêndio da edificação ou do conjunto A exposição ao risco de incêndio ou perigo de incêndio, em uma edificação ou conjunto de edificações, é a grandeza determinı́stica que mede o peso total dos parâmetros impulsionadores do incêndio aı́ presentes. O método ora proposto elegeu um conjunto de seis parâmetros que predominam na definição do incêndio. Então, a partir dos dados levantados na fase anterior, a exposição ao risco de incêndio pode ser determinada pela expressão: E = f1 .f2 .f3 .f4 .f5 .f6 (7) sendo que f1 é o parâmetro referente à carga de incêndio e como bem enfatiza (CLARET, 2006), em geral, a grandeza da densidade de carga de incêndio é determinada com o emprego de dados de normas técnicas nacionais e estrangeiras. No caso dos sı́tios históricos, a medição direta da densidade de carga de incêndio é uma necessidade. Os levantamentos realizados em Ouro Preto, por exemplo, e descritos na literatura técnica, indicam que os valores caracterı́sticos das edificações coloniais podem superar em muito os valores prescritos em normas técnicas. Os fatores de risco associados à grandeza da carga de incêndio estão apresentados na Fig. 12. c) determinação da segurança O levantamento de dados permitiu identificar também as medidas de segurança existentes na edificação. Desse modo, é possı́vel medir a segurança contra incêndio, S, por meio da atribuição dos pesos definidos para esse fim, isto é: 60 8 ANÁLISE DE RISCO DE INCÊNDIO EM SÍTIOS HISTÓRICOS Figura 12: Densidades de carga de incêndio e fatores de risco Fonte: CLARET, 2006 S = s1 .s2 ...sn (8) A grandeza de S depende do número e do tipo de medidas de segurança existentes na edificação. S é uma grandeza determinı́stica, análoga a E, e no seu cálculo deve-se levar em conta o princı́pio da não-exclusão. Como o método é aplicável compartimento a compartimento, as medidas de segurança disponı́veis na edificação, em geral, são consideradas como operacionais em todo o compartimento em questão. Cabe ao profissional incumbido da análise de risco identificar as situações em que isso não é verdadeiro. d) determinação dos riscos de ativação Os riscos de ativação são determináveis a partir do levantamento de dados. Denominando de A o risco de ativação aplicável a cada um dos compartimentos de uma edificação, ou de um conjunto de edificações, tem-se: A = A1 .Ak 61 (9) 8 ANÁLISE DE RISCO DE INCÊNDIO EM SÍTIOS HISTÓRICOS onde k = 2, 3, 4 , em face do princı́pio da exclusão. Isto é, o risco de ativação devido à ocupação é inerente ao compartimento, enquanto a mesma perdurar. Os demais riscos são acidentais, tornando-se o maior deles aplicável ao caso. Os compartimentos podem ter riscos de ativação distintos em uma mesma edificação, mas, quando um compartimento tem vários cômodos, é necessário considerar o maior dos riscos de ativação de cada cômodo como aplicável ao compartimento. e) cálculo do risco global de incêndio O risco global de incêndio é calculado pelo produto da exposição ao risco de incêndio, E, pelo risco de ativação, A. Isto é: R = E.A (10) O risco global de incêndio é associado a um compartimento. Para uma edificação, toma-se o maior risco associado a um de seus compartimentos, e, para um conjunto de edificações, o maior risco associado a uma das edificações que o compõem. f) análise da segurança Conhecido o risco global de incêndio, o coeficiente de segurança da edificação pode ser determinado pela razão entre o risco e a segurança, isto é: γ= S ≥ γmin R 62 (11) 9 O LEVANTAMENTO NO BAIRRO ANTÔNIO DIAS 9 O LEVANTAMENTO NO BAIRRO ANTÔNIO DIAS O levantamento no bairro Antônio Dias foi realizado por (ARAÚJO, 2004) durante aproximadamente um mês e em cada edificação a sua duração variou entre três e seis horas. Os dados colhidos preencheram uma planilha elaborada especificamente para este fim, seguindo as diretrizes aplicadas no primeiro estudo, realizado em novembro de 2003, na rua São José, Ouro Preto, MG. O levantamento foi realizado com o apoio do laboratório de Análise de Risco de Incêndio – LARIn, grupo interdisciplinar informal de pesquisadores em Engenharia de Incêndio, atuantes em ensino e pesquisa na Universidade Federal de Ouro Preto. O entorno da Igreja Matriz de Nossa Senhora da Conceição possui cerca de 86 edificações. A seleção para o levantamento dos dados foi feita através do inventário de bens tombados do IPHAN – Instituto do Patrimônio Histórico e Artı́stico Nacional. Foram então selecionadas trinta edificações, limitando-se a este número pelo tempo disponı́vel para o estudo. 63 9 O LEVANTAMENTO NO BAIRRO ANTÔNIO DIAS Figura 13: Mapa do bairro Antônio Dias, com indicação das edificações que compuseram o levantamento da carga de incêndio Fonte: Escola de Arquitetura da UFMG, 2001/2002 apud (ARAÚJO, 2004) 64 10 PROGRAMAÇÃO A região de estudo, que inclui a Praça Antônio Dias, a rua Bernardo Vasconcelos, a rua do Aleijadinho, a rua da Conceição e a rua Felippe dos Santos, no bairro Antônio Dias, é constituı́da essencialmente por edificações residenciais. Ao concluir o referido levantamento,(ARAÚJO, 2004)verificou que no caso do bairro Antônio Dias, em Ouro Preto, apesar das edificações analisadas, quase em sua totalidade, não terem passado por intervenções para transformação de uso, mantendo-se assim muitas caracterı́sticas originais, como as disposições dos cômodos e as aberturas, a preservação dessas caracterı́sticas não é acompanhada pela manutenção dessas edificações. As condições de muitas delas são extremamente precárias. 10 PROGRAMAÇÃO Dentro do campo de atuação da programação, a tecnologia tem o objetivo de eliminar as tarefas repetitivas, facilitando o trabalho e fazendo-o mais eficiente. Na década de 50 surgiu a primeira linguagem de grande aceitação, o Fortran. Um programa de computador é a formalização de um algoritmo em qualquer linguagem capaz de ser transformada em instruções que serão executadas por um computador gerando os resultados esperados. Um programa de computador também é conhecido como software, software aplicativo, software de sistema ou simplesmente programa. O termo 65 10.1 TIPOS DE PROGRAMAÇÃO 10 PROGRAMAÇÃO software pode ser utilizado quando se quer designar um conjunto de programas ou, mais freqüentemente, quando é feita uma referência à parte não fı́sica do sistema computacional, em contraposição ao termo hardware, que designa o conjunto de componentes eletrônicos que constituem um computador. O ato de programar um computador é um processo iterativo que consiste na criação ou alteração de código fonte, seguido de testes, análise e posterior refinamento do resultado. Uma pessoa que realiza este trabalho é conhecida como programador de computador ou desenvolvedor de software. A criação de programas de computador, quando baseada em metodologias ou processos formalizados, é conhecida como engenharia de software. Cada linguagem de programação segue uma metodologia diferente. 10.1 TIPOS DE PROGRAMAÇÃO Existem várias classes de programação, dependendo dos métodos utilizados e as técnicas empregadas. Os tipos ou técnicas de programação são bastante variados, no entanto as principais técnicas centram-se em programação estruturada, programação modular e programação orientada a objetos. 10.1.1 Programação estruturada (PE) Um programa está estruturado se possui um único ponto de entrada e só um de saı́da, existem de ”1 a n”caminhos desde o princı́pio até o fim do programa e por último, que todas as instruções são executáveis sem que 66 11 PROGRAMAÇÃO ORIENTADA A OBJETOS(OO) apareçam loops infinitos. A programação estruturada utiliza um número limitado de estruturas de controle, reduzindo assim consideravelmente os erros. 10.1.2 Programação modular ou procedural A programação modular consta de várias seções dividas, que integram o programa em sua totalidade, e que interagem através de chamadas a procedimentos. Na programação modular, o programa principal coordena as chamadas aos módulos secundários e passa os dados necessários em forma de parâmetros. Por sua vez cada módulo pode conter seus próprios dados e chamar a outros módulos ou funções. 10.1.3 Programação Orientada a Objetos (POO) Trata-se de uma técnica que aumenta consideravelmente a velocidade de desenvolvimento dos programas graças à reutilização dos objetos. A seguir serão apresentados os fundamentos da POO. 11 PROGRAMAÇÃO ORIENTADA A OBJETOS(OO) A maioria das linguagens de programação modernas oferece suporte à Programação Orientada a Objetos (POO). A Programação Orientada a Objetos, também chamada Orientada por Objetos, revela uma forma distinta 67 11 PROGRAMAÇÃO ORIENTADA A OBJETOS(OO) de se estruturar os programas. Todas as informações são colocadas e organizadas na forma de objetos e o uso ou a manutenção destas informações deve seguir as regras descritas pela classe do objeto em questão. Uma de suas vantagens é a reutilização de código através de herança permitindo, desse modo, que uma equipe com várias pessoas possa dividir um grande projeto, e cada parte deste ser unida com as outras sem que haja problemas com incompatibilidade (MORAIS, Acesso em 17/09/07 às 18h). Segundo Retamal (2005b) para se obter um bom design(modelo de objetos) é necessário a utilização de um método de análise adequado, ou seja, orientado a objetos. Sem uma visão de mundo Orientada a Objetos - OO, derivar um projeto para uma boa implementação OO torna-se um enorme desafio, senão inútil. A visão de mundo orientada a objetos oferece um excelente paradigma para o entendimento de um determinado contexto ou situação, denominado domı́nio do problema. Anteriormente, eram muito comum o enfoque funcional e o enfoque de dados. Historicamente, dados e funções sempre foram considerados separadamente, desde a arquitetura do hardware até muitas linguagens de programação não-OO. O húngaro Johann Louis von Neumann, por volta de 1945, foi quem sugeriu que, no hardware, tanto os dados quanto os programas fossem armazenados na mesma memória. No mundo do software, os conceitos OO começaram a aparecer por volta de 1959. Alguns anos depois, a linguagem Simula-67 foi desenvolvida para facilitar simulações, oferecendo várias caracterı́sticas de orientação por objetos. Em 1989 a Borland lançou o Turbo Pascal 5.5 com Object Pascal, com extensões para Programação Orientada a Objetos. Cinco anos e várias melhorias depois, a Borland lançou o Delphi 1.0. 68 11.1 ANÁLISE OO 11 PROGRAMAÇÃO ORIENTADA A OBJETOS(OO) 11.1 ANÁLISE OO O paradigma de Programação Orientada por Objetos pode significar uma melhor organização, planejamento, desenvolvimento e manutenção de uma aplicação. No entanto, programar OO sem um projeto (design) OO pode ser uma tarefa difı́cil, levando a uma implementação deficiente, sendo portanto, necessário um método de análise adequado, também orientado por objetos, para se obter um bom modelo de objetos. Os requisitos devem ser analisados a partir da perspectiva das classes e objetos encontrados no vocabulário do domı́nio do problema, enfatizando a construção de modelos do mundo real usando uma visão de mundo orientada por objetos (RETAMAL, 2005c). Ainda, de acordo com Retamal (2005c) , para o processo de classificação, buscando a compreensão do mundo real, costuma-se empregar três métodos: • Diferenciação, baseada na experiência de cada um (as pessoas e os outros objetos); • Distinção entre o todo e suas partes (a pessoa e seus órgãos e tecidos); • Formação de, e distinção entre, as diferentes classes de objetos (classes de pessoas, classes de veı́culos,etc). Por meio desse processo, se consegue distinguir determinados grupos, através de suas similaridades e diferenças. 69 11.2 CONCEITOS 11 PROGRAMAÇÃO ORIENTADA A OBJETOS(OO) 11.2 CONCEITOS Os conceitos fundamentais da orientação por objetos, estendem-se também à análise e ao projeto orientado por objetos. A seguir apresentam-se os principais conceitos da orientação por objetos conforme Boratti(2002), Morais (2007) e Retamal (2005a) e . Objeto Termo que se refere a qualquer entidade que represente algum significado, mesmo que não se constitua de algo concreto ou palpável. É a informação em memória e segue as regras definidas pela classe que o criou. Classe Conjunto de informações que modelam o objeto. A classe não ocupa espaço em memória e não tem dados especı́ficos do programa e possui apenas as regras que irão definir o comportamento de um objeto. Abstração Princı́pio de ignorar os aspectos de um assunto não relevantes para o propósito em questão, o que torna possı́vel uma concentração maior nos assuntos principais. Encapsulamento Cada componente do programa deve conter uma única decisão de projeto, isto é, um agrupamento de aspectos relacionados a uma idéia ou entidade. Além disso, a interface para cada módulo é definida de forma a revelar o menos possı́vel sobre o seu funcionamento interno, implementando a ocultação 70 11.2 CONCEITOS 11 PROGRAMAÇÃO ORIENTADA A OBJETOS(OO) de informação. Se for necessário fazer alguma alteração dentro da “cápsula” o mundo exterior não precisa ser alterado como conseqüência de tal alteração. Identidade Um objeto distingue-se de outro pelo simples fato de existir e sua identidade independe dos valores de seus atributos. Ao serem alocados na memória do computador, dois objetos, embora possam ter todos os atributos iguais, seus endereços de memória são diferentes. Herança Expressa a similaridade entre classes, simplificando a definição de classes iguais e outras que já foram definidas (reutilização de código). Polimorfismo A capacidade de uma mensagem ser entendida e executada de forma diferente por objetos distintos. É também a possibilidade de se manipular objetos mais especializados como se fossem objetos mais genéricos. Associação União ou conexão de idéias. Agrupar certas coisas que acontecem em algum ponto no tempo ou sob circunstâncias similares. Além das associações simples, também podemos ter composições e agregações. 11.2.1 Tipos Básicos de Objetos Normalmente, independente do domı́nio do problema, encontraremos quatro tipos básicos de objetos em todos eles. Esses quatro tipos básicos 71 11.2 CONCEITOS 11 PROGRAMAÇÃO ORIENTADA A OBJETOS(OO) são chamados de arquétipos e são definidos pela Unified Modeling Language - UML. Momento-Intervalo Representa algo que necessita ser registrado, por razões de negócio ou até mesmo legais, que ocorrem em algum momento no tempo ou durante um intervalo de tempo. São atividades, eventos e serviços. É identificado pela cor rosa. Pessoas, lugares ou coisas Representa uma pessoa (fı́sica ou jurı́dica), um certo local (endereço, casa, privado, público) ou algum objeto, geralmente concreto. É identificado pela cor verde. Papel É a representação de um papel que é desempenhado por alguma pessoa, lugar ou coisa em um determinado evento do negócio (momento-intervalo). É mais comumente aplicado a pessoas, mas é possı́vel utiliza-lo com lugares e até mesmo com coisas. Sua cor é o amarelo. Descrição Define as caracterı́sticas de uma determinada coisa, lugar ou até mesmo pessoas, apesar de menos comum, como um item em um catálogo. Usado para concentrar dados comuns a diversos objetos, aparece na cor azul. 72 12 LINGUAGEM DE PROGRAMAÇÃO 12 LINGUAGEM DE PROGRAMAÇÃO Uma linguagem de programação é um método padronizado para expres- sar instruções para um computador. Uma linguagem permite que um programador especifique precisamente sobre quais dados um computador vai atuar, como estes dados serão armazenados ou transmitidos e quais ações devem ser tomadas sob várias circunstâncias. Pode-se citar, pela sua ampla utilização, as linguagens de programação: • C++ ( lê-se ”cê mais mais”), amplamente utilizada em desenvolvimento de sistemas opercaionais (tais como Windows e Linux), em aplicativos desktop e também em sistemas microprocessados na área de automação industrial. • Java - é uma linguagem de programação completamente orientada a objetos e tornou-se popular pelo seu uso na internet. Por esse motivo, sua aplicação vem crescendo a cada dia nas mais diversas plataformas. Por ser uma linguagem completamente orientada a objetos , praticamente não se consegue programar apenas de forma estruturada em Java como se faz em outras linguagens, • Object Pascal - O lançamento do DELPHI em 1995 deu um novo estı́mulo do uso do Pascal, pois ele é um ambiente de programação baseado nessa linguagem e não uma nova linguagem de programação. Além disso, o Delphi implementa novos recursos, notadamente na parte de classes e objetos, e, devido a eles e aos novos tipos de dados agregados ao sistema, o Pascal do Delphi é conhecido como Object Pascal. 73 12.1 DELPHI 12.1 13 METODOLOGIA DELPHI O Delphi é uma das melhores combinações de programação orientada a objetos e programação visual para Windows. Em uma ferramenta de programação visual como o Delphi, o papel do ambiente às vezes é ainda mais importante do que a linguagem de programação em si, pela facilidade e rapidez de desenvolvimento. O nome Delphi é inspirado na cidade de Delfos, o único local na Grécia antiga em que era possı́vel consultar o Oráculo de Delfos. O nome deve-se ao fato de que os desenvolvedores do compilador buscavam uma ferramenta capaz de acessar o banco de dados Oracle - daı́ um trocadilho comum entre programadores em Delphi: ”a única maneira de acessar o oráculo é usando Delphi”. A linguagem utilizada pelo Delphi, o Object Pascal (Pascal com extensões orientadas a objetos) a partir da versão 7 passou a se chamar Delphi Language. 13 METODOLOGIA O desenvolvimento do software para calcular a carga de incêndio se deu por meio das etapas descritas a seguir. 74 13.1 ETAPA 1 – LEVANTAMENTO DE DADOS 13 METODOLOGIA 13.1 ETAPA 1 – LEVANTAMENTO DE DADOS Por meio de pesquisas na literatura correlata sobre carga de incêndio de materiais de uso comum e de metodologia para realização de um estudo de caso sobre o risco global de incêndio aplicada à cidade de Ouro Preto, realizada por Araújo (2004) , selecionou-se valores de pontenciais calorı́ficos e de cargas de incêndios os quais foram o banco de dados do software, conforme apresentado nos anexos ?? a ??. 13.2 ETAPA 2 – ANÁLISE OO Embasado nos dados obtidos na etapa anterior, aplicou-se o processo de classificação que permitiu a definição de objetos virtuais utilizados no software. Mediante observação das similaridades, isto é, caracterı́sticas comuns dos objetos, tais como largura, altura, profundidade, pé-direito, potencial calorı́fico entre outros, foram definidos grupos denominados classes, tais como: • Geral • Edificação • Pavimento • Cômodo • Objeto(real) • Regras de negócio • Relatórios 75 13.3 ETAPA 3 – MODELAGEM OO 13.3 13 METODOLOGIA ETAPA 3 – MODELAGEM OO As classes definidas na etapa 2 foram submetidas à modelagem orientada a objetos utilizando-se o editor de modelos do Delphi 7.0. Conforme apresentado no exemplo a seguir, Figura 14, podemos observar que o diagrama apresenta informações sobre as propriedades que os objetos descritos pela referida classe contém, chamados atributos (attributes), e os métodos (operations) que tais objetos podem executar. Em resumo: as propriedades são as caracterı́sticas dos objetos e os métodos são as ações que esses objetos eventualmente executam. Figura 14: Diagrama de classe Pavimento 13.4 ETAPA 4 – PROGRAMAÇÃO OO Um exemplo de código em object Pascal é apresentado na listagem 1. 76 13.4 ETAPA 4 – PROGRAMAÇÃO OO 13 METODOLOGIA Listagem 1: ”Código para a classe TObjeto” 1 u n i t U Objeto ; 2 interface 3 uses 4 S y s U t i l s , Windows , Messages , C l a s s e s , Graphics , C o n t r o l s , 5 Forms , D i a l o g s , U Material , U Vizinho , G r id s ; 6 type 7 TObjeto = c l a s s ( TObject ) 8 private 9 FNome : s t r i n g ; 10 FAltura : Real ; 11 FLargura : Real ; 12 FProfundidade : Real ; 13 FMaterial : String ; 14 FPosX : Real ; 15 FPosY : Real ; 16 FPosZ : Real ; 17 FVolume : Real ; 18 FCargaEspecifica : real ; 19 FMassaEspecifica : real ; 20 FEnergia : r e a l ; 21 procedure S e t A l t u r a ( const Value : Real ) ; 22 procedure S e t L a r g u r a ( const Value : Real ) ; 23 procedure S e t P r o f u n d i d a d e ( const Value : Real ) ; 24 procedure S e t M a t e r i a l ( const Value : S t r i n g ) ; 25 procedure SetNome ( const Value : s t r i n g ) ; 26 procedure SetPosX ( const Value : Real ) ; 27 procedure SetPosY ( const Value : Real ) ; 28 procedure SetPosZ ( const Value : Real ) ; 29 procedure S e t M a s s a E s p e c i f i c a ( const Value : r e a l ) ; 30 function C a l c C a r g a I n c e n d i o ( ) : r e a l ; 77 13.4 ETAPA 4 – PROGRAMAÇÃO OO 13 METODOLOGIA procedure S e t C a r g a E s p e c i f i c a ( const Value : r e a l ) ; 31 public 32 33 c o n s t r u c t o r Create ; 34 d e s t r u c t o r Destroy ; 35 p r o p e r t y Nome : s t r i n g read FNome write SetNome ; 36 p r o p e r t y M a t e r i a l : S t r i n g read F M a t e r i a l write S e t M a t e r i a l ; 37 p r o p e r t y A l t u r a : Real read FAltura write S e t A l t u r a ; 38 p r o p e r t y Largura : Real read FLargura write S e t L a r g u r a ; 39 p r o p e r t y P r o f u n d i d a d e : Real read FProfundidade write SetProfundidade ; 40 p r o p e r t y Volume : Real read FVolume ; 41 p r o p e r t y M a s s a E s p e c i f i c a : r e a l read F M a s s a E s p e c i f i c a write SetMassaEspecifica ; p r o p e r t y C a r g a E s p e c i f i c a : r e a l read F C a r g a E s p e c i f i c a write 42 SetCargaEspecifica ; 43 p r o p e r t y PosX : Real read FPosX write SetPosX ; 44 p r o p e r t y PosY : Real read FPosY write SetPosY ; 45 p r o p e r t y PosZ : Real read FPosZ write SetPosZ ; 46 procedure GetStream ( var ValStream : TMemoryStream ) ; 47 procedure SetStream ( ValStream : TMemoryStream ) ; 48 procedure CalcVolume ; 49 p r o p e r t y E n e r g i a : r e a l read FEnergia ; 50 procedure C a l c u l o s ( ) ; end ; 51 52 implementation 53 { TObjeto } 54 { 55 ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ TObjeto ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ 56 } 57 c o n s t r u c t o r TObjeto . C r e a t e ; 78 13.4 ETAPA 4 – PROGRAMAÇÃO OO 58 13 METODOLOGIA begin 59 FNome := ’’ ; 60 F M a t e r i a l := ’’ ; 61 FAltura := 0 ; 62 FLargura := 0 ; 63 FProfundidade := 0 ; 64 FVolume := 0 ; 65 F C a r g a E s p e c i f i c a := 0 ; 66 F M a s s a E s p e c i f i c a := 0 ; 67 FPosX := 0 ; 68 FPosY := 0 ; 69 FPosZ := 0 ; 70 end ; 71 d e s t r u c t o r TObjeto . Destroy ; 72 begin 73 end ; 74 procedure TObjeto . GetStream ( var ValStream : TMemoryStream ) ; 75 var S t r 1 : TMemoryStream ; 76 L : Int64 ; 77 St : S t r i n g ; 78 ch : char ; 79 k : integer ; 80 begin 81 S t r 1 := TMemoryStream . C r e a t e ; 82 ValStream . P o s i t i o n := 0 ; 83 St := FNome ; 84 L := Length ( St ) ; 85 ValStream . Write (L , S i z e O f (L) ) ; // grava o comprimento da s t r i n g 86 f or k := 1 to L do 87 ValStream . Write ( St [ k ] , S i z e O f (Ch) ) ; // grava a s t r i n g , ch por ch 79 13.4 ETAPA 4 – PROGRAMAÇÃO OO 13 METODOLOGIA 88 St := F M a t e r i a l ; 89 L := Length ( St ) ; 90 ValStream . Write (L , S i z e O f (L) ) ; // grava o comprimento da s t r i n g 91 f or k := 1 to L do ValStream . Write ( St [ k ] , S i z e O f (Ch) ) ; // grava a s t r i n g , ch por 92 ch 93 ValStream . Write ( FAltura , S i z e O f ( FAltura ) ) ; 94 ValStream . Write ( FLargura , S i z e O f ( FLargura ) ) ; 95 ValStream . Write ( FProfundidade , S i z e O f ( FProfundidade ) ) ; 96 ValStream . Write ( FVolume , S i z e O f ( FVolume ) ) ; 97 ValStream . Write ( F C a r g a E s p e c i f i c a , S i z e O f ( F C a r g a E s p e c i f i c a ) ) ; 98 ValStream . Write ( F C a r g a E s p e c i f i c a , S i z e O f ( F C a r g a E s p e c i f i c a ) ) ; 99 ValStream . Write ( F M a s s a E s p e c i f i c a , S i z e O f ( F M a s s a E s p e c i f i c a ) ) ; 100 101 S t r 1 . Destroy ; end ; 102 103 procedure TObjeto . SetStream ( ValStream : TMemoryStream ) ; 104 var 105 Xr : r e a l ; 106 Ch : char ; 107 k : integer ; 108 L : Int64 ; 109 St : S t r i n g ; 110 begin 111 ValStream . P o s i t i o n := 0 ; 112 ValStream . Read(L , S i z e O f (L) ) ; 113 St := ’’ ; 114 f or k := 1 to L do 115 begin 116 ValStream . Read(Ch , S i z e O f (Ch) ) ; 117 St := St+ch ; 80 13.4 ETAPA 4 – PROGRAMAÇÃO OO end ; 118 119 FNome := St ; 120 ValStream . Read(L , S i z e O f (L) ) ; 121 St := ’’ ; 122 f or k := 1 to L do begin 123 124 ValStream . Read(Ch , S i z e O f (Ch) ) ; 125 St := St+ch ; end ; 126 127 F M a t e r i a l := St ; 128 ValStream . Read( Xr , S i z e O f ( Xr ) ) ; 129 FAltura := Xr ; 130 ValStream . Read( Xr , S i z e O f ( Xr ) ) ; 131 FLargura := Xr ; 132 ValStream . Read( Xr , S i z e O f ( Xr ) ) ; 133 FProfundidade := Xr ; 134 ValStream . Read( Xr , S i z e O f ( Xr ) ) ; 135 FVolume := Xr ; 136 ValStream . Read( Xr , S i z e O f ( Xr ) ) ; 137 F C a r g a E s p e c i f i c a := Xr ; 138 ValStream . Read( Xr , S i z e O f ( Xr ) ) ; 139 F C a r g a E s p e c i f i c a := Xr ; 140 ValStream . Read( Xr , S i z e O f ( Xr ) ) ; 141 F M a s s a E s p e c i f i c a := Xr ; 142 Calculos ; 143 13 METODOLOGIA end ; 144 145 procedure TObjeto . S e t L a r g u r a ( const Value : Real ) ; 146 begin 147 FLargura := Value ; 148 CalcVolume ; 81 13.4 ETAPA 4 – PROGRAMAÇÃO OO 149 13 METODOLOGIA end ; 150 151 procedure TObjeto . S e t P r o f u n d i d a d e ( const Value : Real ) ; 152 begin 153 FProfundidade := Value ; 154 CalcVolume ; 155 end ; 156 157 procedure TObjeto . S e t A l t u r a ( const Value : Real ) ; 158 begin 159 FAltura := Value ; 160 CalcVolume ; 161 end ; 162 163 procedure TObjeto . CalcVolume ; 164 begin 165 166 FVolume := FLargura ∗ FProfundidade ∗ FAltura ; end ; 167 168 procedure TObjeto . S e t M a s s a E s p e c i f i c a ( const Value : r e a l ) ; 169 begin 170 F M a s s a E s p e c i f i c a := Value ; 171 Calculos () ; 172 end ; 173 174 procedure TObjeto . S e t M a t e r i a l ( const Value : S t r i n g ) ; 175 begin 176 F M a t e r i a l := Value ; 177 Calculos () ; 178 end ; 179 82 13.4 ETAPA 4 – PROGRAMAÇÃO OO 180 function TObjeto . C a l c C a r g a I n c e n d i o : r e a l ; 181 begin 182 183 13 METODOLOGIA r e s u l t := FVolume∗ F M a s s a E s p e c i f i c a ∗ F C a r g a E s p e c i f i c a ; end ; 184 185 procedure TObjeto . SetNome ( const Value : s t r i n g ) ; 186 begin 187 188 FNome := Value ; end ; 189 190 procedure TObjeto . SetPosX ( const Value : Real ) ; 191 begin 192 193 FPosX := Value ; end ; 194 195 procedure TObjeto . SetPosY ( const Value : Real ) ; 196 begin 197 198 FPosY := Value ; end ; 199 200 procedure TObjeto . SetPosZ ( const Value : Real ) ; 201 begin 202 203 FPosZ := Value ; end ; 204 205 206 207 procedure TObjeto . C a l c u l o s ; var i : integer ; begin 208 CalcVolume ( ) ; 209 FEnergia := FVolume∗ F C a r g a E s p e c i f i c a ∗ F M a s s a E s p e c i f i c a ; 210 end ; 83 13.5 ETAPA 5 – APLICAÇÃO 14 RESULTADOS E DISCUSSÕES 211 212 procedure TObjeto . S e t C a r g a E s p e c i f i c a ( const Value : r e a l ) ; 213 begin 214 F C a r g a E s p e c i f i c a := Value ; 215 end ; 216 end . 13.5 ETAPA 5 – APLICAÇÃO Para validar o software foram aplicados dados referentes a três exemplos de cálculo de carga de incêndio especı́fica, ou densidade de carga de incêndio, realizados de forma manual por Araújo (2004) : • uma edificaçao considerada de compartimentação única, • duas edificações que possuı́am vários compartimentos. Os dados gerados pelo software foram comparados com os apresentados no cálculo manual, sendo assim avaliada a sua eficiência. 14 RESULTADOS E DISCUSSÕES 14.1 MODELAGEM De acordo com Retamal (2005d) , a correta identificação das classes é muito importante para o sucesso de um projeto de programação orientado a objetos. Como resultado da modelagem realizada no editor de modelos do 84 14.1 MODELAGEM 14 RESULTADOS E DISCUSSÕES Delphi 7.0, obtivemos para cada classe definida o respectivo diagrama, como apresentado a seguir. 14.1.1 Geral Figura 15: Diagrama de classe Geral 85 14.1 MODELAGEM 14.1.2 14 RESULTADOS E DISCUSSÕES Edificação Figura 16: Diagrama de classe Edificação 86 14.1 MODELAGEM 14.1.3 14 RESULTADOS E DISCUSSÕES Pavimento Figura 17: Diagrama de classe Pavimento 87 14.1 MODELAGEM 14.1.4 14 RESULTADOS E DISCUSSÕES Cômodo Figura 18: Diagrama de classe Cômodo 88 14.1 MODELAGEM 14.1.5 14 RESULTADOS E DISCUSSÕES Objeto (real) Figura 19: Diagrama de classe Objeto 14.1.6 Regras de negócio A classe TRegras, vide listagem 3, é responsável pelas regras de negócio. No jargão técnico, significa uma camada intermediária entre a interface gráfica com o usuário e os demais objetos que compõem o software. Essa classe nos permite separar o código da interface gráfica e, assim, separar o sistema em camadas. 14.1.7 Relatórios À classe TRelatorios, apresentada na listagem 4, cabe a responsabilidade de gerar relatórios no formato HTML, acessando o browser do computador 89 14.2 PROGRAMAÇÃO 14 RESULTADOS E DISCUSSÕES para a apresentação dos resultados. Esse procedimento também está em conformidade com a separação do sistema em camadas. A utilização do editor de modelos do Delphi 7.0 facilitou a análise e entendimento do software mediante sua vizualização gráfica. 14.2 PROGRAMAÇÃO Após a criação das classes onde se evidenciou as propriedades e os métodos necessários à implementação de cada uma delas e, em conseqüência, à implementação do software como um todo, passamos à codificação do conjunto em object pascal, conforme observa-se nas listagens: • listagem 2 - Código para a classe FormPrincipal (anexo N) • listagem 3 - Código para a classe TRegras (anexo O) • listagem 4 - Código para a classe TRelatorios (anexo P) • listagem 5 - Código para a classe TEdificacao (anexo Q) • listagem 6 - Código para a classe TPavimento (anexo R) • listagem 7 - Código para a classe TComodo (anexo S) 14.3 APLICAÇÃO Para ilustrar, apresentamos a seguir as telas de uma aplicação do software de acordo com a seqüência de entrada de dados até a obtenção dos resultados. 90 14.3 APLICAÇÃO 14 RESULTADOS E DISCUSSÕES Figura 20: Tela de abertura - apresentação do software CCI 91 14.3 APLICAÇÃO 14 RESULTADOS E DISCUSSÕES Figura 21: Tela que permite escolher uma edificação já cadastrada 92 14.3 APLICAÇÃO 14 RESULTADOS E DISCUSSÕES Figura 22: Tela para entrada de dados gerais da edificação, nova ou anteriormente cadastrada - suas dimensões, distâncias com relação às edificações vizinhas e cadastro de pavimentos 93 14.3 APLICAÇÃO 14 RESULTADOS E DISCUSSÕES Figura 23: Tela para entrada das dimensões por pavimento(s) o que permite cadastro de pisos com diferentes dimensões de pé-direito Figura 24: Tela para entrada de(s) cômodo(s) - cadastro de nome e sua especialidade de acordo com tabela de carga de incêncio especı́fica por ocupação (anexo A) 94 14.3 APLICAÇÃO 14 RESULTADOS E DISCUSSÕES Figura 25: Tela para entrada de dados do(s) comodo(s) - dimenões e posição em relação a um ponto da edificação escolhido para ser o inicial para que possa ser elaborada um croqui da edificação Figura 26: Tela para cadastro de objeto(s) real(is) 95 14.3 APLICAÇÃO 14 RESULTADOS E DISCUSSÕES Figura 27: Tela para entrada de dados do(s) objeto(s) real(is) - dimensões, material, massa especı́fica para determinação de seu volume e de sua carga de incêndio Figura 28: Tela para cadastro de dados no banco de dados de materiais nome e potencial calorı́fico 96 14.3 APLICAÇÃO 14 RESULTADOS E DISCUSSÕES Figura 29: Tela para entrada de dados no banco de tipos de ocupação Figura 30: Tela para solicitar que seja gerado relatório da aplicação no formato HTML 97 14.3 APLICAÇÃO 14 RESULTADOS E DISCUSSÕES Figura 31: Tela de ajuda ao usuário contendo tópicos: de descrição do software;a respeito da entrada de dados; orientando como gerar relatórios e com os principais conceitos sobre carga de incêndio 98 14.3 APLICAÇÃO 14 RESULTADOS E DISCUSSÕES Figura 32: Relatório HTML 99 15 CONCLUSÃO A tabela 8 apresenta os resultados alcançados com a otimização proporcionada pelo software, em comparação com os resultados obtidos por Araújo(2004) . Tabela 8: Comparativo com valores apresentados por Araújo(2004) Carga de Incêndio (MJ/m2 ) Ocupação re- Norma (ARAÚJO, software Razão Razão sidencial 2004) (2) CCI (3) (2)/(1) (3)/(1) 2.745,68 2.763,26 9,15 9,21 922,02 921,68 3,07 3,07 2386,97 2388,81 7,96 7,96 Brasileira (1) Único com- 300 partimento Vários com- 300 partimentos Anexo-térreo 15 300 CONCLUSÃO A aplicação do software se mostrou eficiente conforme resultados apresen- tados na tabela 8 comparando-se as colunas Razão (2)/(1) e Razão (3)/(1). Um importante resultado alcançado foi uma maior agilidade na obtenção da densidade de carga de incêndio em edificações. Devido à extensão do banco de dados do software foi viabilizada a determinação da carga de incêndio para uma maior diversidade de materiais, 100 16 CONSIDERAÇÕES FINAIS comparação com valores apresentados pela norma prescritiva e emissão de relatório para complementação de laudos técnicos. Além disso, o software para Cálculo da Carga de Incêndio (C.C.I) poderá contribuir com a otimização do trabalho de profissionais ligados à área de atuação da Engenharia de Incêndio e para estudos futuros sobre caracterı́sticas de reação ao fogo dos materiais de uso comum. 16 CONSIDERAÇÕES FINAIS Ainda que o resultado desse trabalho tenha atendido plenamente nos- sas espectativas, durante o desenvolvimento do mesmo vislumbramos novas possibilidades de melhoria do software C.C.I. tais como: 1. implementar o cálculo dos fatores de risco para a aplicação da metodologia de análise de risco global proposta por Claret (2006) , 2. implementar simulação para a determinação de locais crı́ticos para inı́cio de incêndio em uma edificação, 3. a partir da determinação de locais crı́ticos para inı́cio de incêndio em uma edificação, determinar as rotas de fuga em caso de incêndio, 4. implementar uma nova versão do softwre C.C.I. em plataforma web para que o Corpo de Bombeiros e demais órgãos de segurança pública, possam acessar o banco de dados de edificações através de dispositivos móveis, agilizando o atendimento em caso de de incêndio. 101 REFERÊNCIAS REFERÊNCIAS Referências ABNT. NBR14432-Exigências de resistência ao fogo de elementos construtivos de edificações. [S.l.], 2001. ALVES, R. M. Análise de risco de incêndios em edificações em sı́tios históricos.Dissertação (Mestrado em Construção Metálica). Dissertação (Mestrado) — Universidade Federal de Ouro Preto, Ouro Preto, 2003. ARAÚJO, S. M. S. Incêndio em Edificações Históricas: um estudo de caso sobre o risco global de incêndio em cidades tombadas e suas formas de prevençao, proteção e combate. A metodologia aplicada à cidade de Ouro Preto. Dissertação (Mestrado) — Universidade Federal Fluminense, Niterói, 2004. ASSIS, V. Carga de incêndio em edifı́cios de escritórios - estudo de caso: Belo Horizonte/MG. Dissertação (Mestrado em Estruturas Metálicas). Dissertação (Mestrado) — Universidade Federal de Ouro Preto, Ouro Preto, 2001. BARBOSA, A. A.; TRAMONTANO, M. Cidade e habitação em minas nos séculos xviii-xix. Disponı́vel em www.nomads.usp.br, acesso em 24/03/08 às 18h. BORATTI, I. C. Programação Orientada a Objetos. [S.l.]: Visual Book LTDA, Março de 2002. BWALYA, A. C.; SULTAN, M. A.; BÉNICHOU, N. Literature review on design fires. [S.l.], 2003. 102 REFERÊNCIAS REFERÊNCIAS CARMO, D. D. Orientação a objetos. Disponı́vel em www.danieldestro.com.br, acesso em 17/09/2006 às 22h. CBMMG. CORPO DE BOMBEIROS MILITAR DE MINAS GERAIS. Instrução Técnica no.02 - Terminologia de proteção contra incêndio. [S.l.], 1990. CBMMG. CORPO DE BOMBEIROS MILITAR DE MINAS GERAIS. Instrução Técnica No.09 -Carga de incêndio nas edificações e área de risco. [S.l.], 1990. CBMMG. CORPO DE BOMBEIROS MILITAR DE MINAS GERAIS. Instrução Técnica No.35 - Segurança contra incêndio em edificações históricas. [S.l.], 2005. CLARET, A. M. Análise de Risco de Incêndio em Sı́tios Históricos. [S.l.]: IPHAN/Monumenta, 2006. CLARET, A. M.; ANDRADE, A. T. Levantamento de Risco de Incêndio em Ouro PReto - Etapa I: Rua São José. Relatório Técnico do Projeto UNESCO/Movimento Chama. Tese (Doutorado) — Laboratório de Análise de Risco de Incêndio. Universidade Federal de Ouro Preto, 2004. GOMES, A. G. Sistemas de prevenção contra incêndios: sistemas hidráulicos, sistemas sob comando, redes de hidrante e sistema automático. [S.l.]: Editora Interciência, Rio de JAneiro, 1998. IBGE (Ed.). INSTITUTO BRASILEIRO DE GEOGRAFIA E ESTATÍSTICA - Estatı́sticas populacionais, sociais, polı́ticas e culturais. [S.l.: s.n.], 2007. 103 REFERÊNCIAS REFERÊNCIAS KUMAR, S.; RAO, C. K. Fire load in residential buildings. Building and Environment, volume 30, No.2, p. p. 299–305, 1995. MINASGERAIS (Ed.). Decreto no.44270, 31 de março de 2006. Regulamenta a Lei no. 14.130, de 19 de dezembro de 2001, que dispõe sobre a prevenção contra incêndio e pânico no Estado e dá outras providências. [S.l.: s.n.], 2006. MORAIS, J. Programação orientada a objetos com object pascal. Disponı́vel em www.joaomorais.com.br/pascal, v. 1, p. 2, Acesso em 17/09/07 às 18h. OLIVEIRA, B. T. Salvemos ouro preto. Jornal da Ciência., Disponı́vel em www.jornaldaciencia.org.br Data de acesso: 24 mar 2008 às 19h, 2003. RETAMAL, A. M. Análise orientada por objetos. ClubeDelphi, ed.58, p. 4–7, Disponı́vel em www.clubedelphi.net. Data de acesso: 20 jul 2006 às 19h, 2005. RETAMAL, A. M. Análise orientada por objetos: Parte ii - arquétipos e uml em cores. ClubeDelphi, ed.59, p. 4–7, Disponı́vel em www.clubedelphi.net. Data de acesso: 20 jul 2006 às 19h, 2005. RETAMAL, A. M. Projeto orientado por objetos: Parte iii - componente genérico de modelo e aplicação no delphi 2005. ClubeDelphi, ed.60, p. p.6–10, Disponı́vel em www.clubedelphi.net. Data de acesso: 20 jul 2006 às 20h, 2005. RETAMAL, A. M. Projeto orientado por objetos: Parte iv - a aplicação completa. ClubeDelphi, ed. 61, p. p. 6–12, Disponı́vel em www.clubedelphi.net. Data de acesso: 20 jul 2006 às 21h, 2005. 104 REFERÊNCIAS REFERÊNCIAS SEITO, A. I. et al. A segurança contra incêndio no Brasil. [S.l.]: São Paulo: Projeto Editora, 2008. 105 17 ANEXOS 17 ANEXOS 17.1 ANEXO A Figura 33: Exemplo de cargas de incêndio especı́fica por ocupação 106 17.2 Anexo B 17.2 17 ANEXOS Anexo B Figura 34: Metodologia para medição direta de carga de incêndio 107 17.3 ANEXO C 17.3 17 ANEXOS ANEXO C Figura 35: Exemplo de cálculo de carga de incêndio - edificação único compartimento 108 17.4 ANEXO D 17.4 17 ANEXOS ANEXO D Figura 36: Exemplo de cálculo de carga de incêndio - edificação vários compartimentos parte 1 109 17.5 ANEXO E 17.5 17 ANEXOS ANEXO E Figura 37: Exemplo de cálculo de carga de incêndio - edificação vários compartimentos parte 2 110 17.6 ANEXO F 17.6 17 ANEXOS ANEXO F Figura 38: Exemplo de cálculo de carga de incêndio - edificação vários compartimentos parte 3 111 17.7 ANEXO G 17.7 17 ANEXOS ANEXO G Figura 39: Exemplo de cálculo de carga de incêndio - edificação vários compartimentos parte 4 112 17.8 ANEXO H 17.8 17 ANEXOS ANEXO H Figura 40: Exemplo de cálculo de carga de incêndio - edificação vários compartimentos parte 5 113 17.9 ANEXO I 17.9 17 ANEXOS ANEXO I Figura 41: Exemplo de cálculo de carga de incêndio - edificação vários compartimentos parte 6 114 17.10 ANEXO J 17.10 17 ANEXOS ANEXO J Figura 42: Exemplo de cálculo de carga de incêndio - edificação vários compartimentos partes 7 e 8 115 17.11 ANEXO K 17.11 17 ANEXOS ANEXO K Figura 43: Exemplo de cálculo de carga de incêndio - edificação vários compartimentos parte 9 116 17.12 ANEXO L 17.12 17 ANEXOS ANEXO L Figura 44: Exemplo de cálculo de carga de incêndio - edificação vários compartimentos parte 10 117 17.13 ANEXO M 17.13 17 ANEXOS ANEXO M Figura 45: Exemplo de cálculo de carga de incêndio - edificação vários compartimentos parte 11 118 17.14 ANEXO N 17.14 17 ANEXOS ANEXO N Listagem 2: Código para a classe FormPrincipal” 1 u n i t UFormPrincipal ; 2 3 interface 4 5 6 uses Windows , Messages , S y s U t i l s , V a r i a n t s , C l a s s e s , Graphics , C o n t r o l s , Forms , 7 D i a l o g s , E x t C t r l s , ComCtrls , S t d C t r l s , Buttons , U Regras , U Limite , U E d i f i c a c a o , U PAvimento , U Comodo , 8 Mask , DBCtrls , Grids , DBGrids , UrlMon , DB; 9 10 11 type TFormPrincipal = c l a s s (TForm) 12 BtnAbrir : TBitBtn ; 13 BtnAjuda : TBitBtn ; 14 BtnNovo : TBitBtn ; 15 B t n S a i r : TBitBtn ; 16 BtnSobre : TBitBtn ; 17 Panel1 : TPanel ; 18 StBar : TStatusBar ; 19 GroupBox3 : TGroupBox ; 20 RBtnCorte : TRadioButton ; 21 RBtnPlanta : TRadioButton ; 22 Plan ta : TImage ; 23 lbCoord : TLabel ; 24 PgC1 : TPageControl ; 25 T a b E d i f i c a c a o : TTabSheet ; 26 PgC2 : TPageControl ; 119 17.14 ANEXO N 27 TabSheet5 : TTabSheet ; 28 G B e d i f i c a c a o : TGroupBox ; 29 L ab e l1 : TLabel ; 30 L ab e l4 : TLabel ; 31 L ab e l5 : TLabel ; 32 L ab e l6 : TLabel ; 33 L ab e l7 : TLabel ; 34 L ab e l8 : TLabel ; 35 L ab e l9 : TLabel ; 36 B e v e l1 : TBevel ; 37 L ab e l11 : TLabel ; 38 L ab e l2 : TLabel ; 39 Panel2 : TPanel ; 40 BtnRemover : TBitBtn ; 41 EdtCompFrente : TEdit ; 42 EdtCompDireita : TEdit ; 43 EdtCompFundo : TEdit ; 44 EdtCompEsquerda : TEdit ; 45 E d t D i s t F r e n t e : TEdit ; 46 E d t D i s t D i r e i t a : TEdit ; 47 EdtDistFundo : TEdit ; 48 EdtDistEsquerda : TEdit ; 49 GridPavs : TS tr in gG r id ; 50 STNome : T S t a t i c T e x t ; 51 STPavs : T S t a t i c T e x t ; 52 TabComodos : TTabSheet ; 53 L ab e l3 : TLabel ; 54 CBoxPavs : TComboBox ; 55 GBoxPavimentos : TGroupBox ; 56 GridComodos : TS tr in gG r id ; 57 TabObjetos : TTabSheet ; 17 ANEXOS 120 17.14 ANEXO N 17 ANEXOS 58 L ab e l12 : TLabel ; 59 CBoxPavs2 : TComboBox ; 60 TabSheet4 : TTabSheet ; 61 TabSheet10 : TTabSheet ; 62 PgC3 : TPageControl ; 63 TabSheet11 : TTabSheet ; 64 DBGrid1 : TDBGrid ; 65 TabSheet12 : TTabSheet ; 66 DBGrid3 : TDBGrid ; 67 BtnAdd : TBitBtn ; 68 BtnEdt : TBitBtn ; 69 BtnDel : TBitBtn ; 70 B t n I n s O b j L i s t a : TBitBtn ; 71 GBoxComodos : TGroupBox ; 72 GBoxObjetos : TGroupBox ; 73 G r i d O b j e t o s : TS tr in gG r id ; 74 L ab e l14 : TLabel ; 75 CBoxComodos : TComboBox ; 76 BitBtn1 : TBitBtn ; 77 L ab e l10 : TLabel ; 78 L b P r o j e t o : TLabel ; 79 procedure A t u a l i z a O b j E d i ; 80 procedure A t u a l i z a T e l a E d i f i c a c a o ; 81 procedure AtualizaTelaComodos ; 82 procedure B t n A b r i r C l i c k ( Sender : TObject ) ; 83 procedure BtnNovoClick ( Sender : TObject ) ; 84 procedure BtnRemoverClick ( Sender : TObject ) ; 85 procedure B t n S a i r C l i c k ( Sender : TObject ) ; 86 procedure CBoxPavsChange ( Sender : TObject ) ; 87 procedure FormClose ( Sender : TObject ; var Action : TCloseAction ) ; 121 17.14 ANEXO N 17 ANEXOS 88 procedure FormCreate ( Sender : TObject ) ; 89 procedure FormDestroy ( Sender : TObject ) ; 90 procedure PgC1Change ( Sender : TObject ) ; 91 procedure PgC2Change ( Sender : TObject ) ; 92 procedure B t n E d i t a O b j e t o C l i c k ( Sender : TObject ) ; 93 procedure FormShow ( Sender : TObject ) ; 94 procedure BtnAddClick ( Sender : TObject ) ; 95 procedure B t n D e l C l i c k ( Sender : TObject ) ; 96 procedure CBoxPavs2Change ( Sender : TObject ) ; 97 procedure CBoxComodosChange ( Sender : TObject ) ; 98 procedure B t n I n s O b j L i s t a C l i c k ( Sender : TObject ) ; 99 procedure B t n S a l v a L i s t a C l i c k ( Sender : TObject ) ; 100 procedure BtnEdtClick ( Sender : TObject ) ; 101 procedure DBGrid3MouseDown ( Sender : TObject ; Button : TMouseButton ; S h i f t : T S h i f t S t a t e ; X, Y: Integer ) ; 102 procedure DBGrid1MouseDown ( Sender : TObject ; Button : 103 TMouseButton ; S h i f t : T S h i f t S t a t e ; X, Y: Integer ) ; 104 105 procedure B i t B t n 1 C l i c k ( Sender : TObject ) ; 106 procedure B t n S o b r e C l i c k ( Sender : TObject ) ; 107 procedure BtnAjudaClick ( Sender : TObject ) ; private 108 109 Aberto : Boolean ; 110 procedure A t u a l i z a T e l a O b j e t o ; 111 function S t r F l o a t ( s t : s t r i n g ) : r e a l ; 112 procedure DesenhaPlanta ( modo , pavimento , comodo : s t r i n g ) ; 113 114 115 116 // procedure A t u a l i z a P l a n t a ; public Regras : TRegras ; end ; 122 17.14 ANEXO N 17 ANEXOS 117 118 var 119 F o r m P r i n c i p a l : TFormPrincipal ; 120 ListaOcup , L i s t a O b j : T S t r i n g L i s t ; 121 Frente , D i r e i t a , Fundo , Esquerda : TLimite ; 122 123 124 implementation 125 126 u s e s U DataModule , U FormSplash ; 127 128 {$R ∗ . dfm} 129 130 { 131 ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ TFormPrincipal ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ 132 } 133 procedure TFormPrincipal . A t u a l i z a O b j E d i ; 134 begin 135 F r e n t e . Comprimento := S t r T o F l o a t ( EdtCompFrente . Text ) ; 136 F r e n t e . D i s t a n c i a P r o x i m o := S t r T o F l o a t ( E d t D i s t F r e n t e . Text ) ; 137 D i r e i t a . Comprimento := S t r T o F l o a t ( EdtCompDireita . Text ) ; 138 D i r e i t a . D i s t a n c i a P r o x i m o := S t r T o F l o a t ( E d t D i s t D i r e i t a . Text ) ; 139 Fundo . Comprimento := S t r T o F l o a t ( EdtCompFundo . Text ) ; 140 Fundo . D i s t a n c i a P r o x i m o := S t r T o F l o a t ( EdtDistFundo . Text ) ; 141 Esquerda . Comprimento := S t r T o F l o a t ( EdtCompEsquerda . Text ) ; 142 Esquerda . D i s t a n c i a P r o x i m o := S t r T o F l o a t ( EdtDistEsquerda . Text ) ; 143 Regras . S e t L i m i t e s ( Frente , D i r e i t a , Fundo , Esquerda ) ; 144 end ; 145 146 procedure TFormPrincipal . A t u a l i z a T e l a E d i f i c a c a o ; 123 17.14 ANEXO N 147 var Nome , Pavs : s t r i n g ; 148 149 17 ANEXOS begin Regras . G e t L i m i t e s (Nome , Pavs , Frente , D i r e i t a , Fundo , Esquerda 150 ); 151 STNome . Caption := Nome ; 152 STPavs . Caption := Pavs ; 153 EdtCompDireita . Text := F l o a t T o S t r ( D i r e i t a . Comprimento ) ; 154 E d t D i s t D i r e i t a . Text := F l o a t T o S t r ( D i r e i t a . D i s t a n c i a P r o x i m o ) ; 155 EdtCompEsquerda . Text := F l o a t T o S t r ( Esquerda . Comprimento ) ; 156 EdtDistEsquerda . Text := F l o a t T o S t r ( Esquerda . D i s t a n c i a P r o x i m o ) ; 157 EdtCompFrente . Text := F l o a t T o S t r ( F r e n t e . Comprimento ) ; 158 E d t D i s t F r e n t e . Text := F l o a t T o S t r ( F r e n t e . D i s t a n c i a P r o x i m o ) ; 159 EdtCompFundo . Text := F l o a t T o S t r ( Fundo . Comprimento ) ; 160 EdtDistFundo . Text := F l o a t T o S t r ( Fundo . D i s t a n c i a P r o x i m o ) ; 161 162 // A t u a l i z a P l a n t a ( Regras . E d i f i c a c a o ) ; 163 164 165 Regras . ExportaGridPavs ( GridPavs ) ; end ; 166 167 procedure TFormPrincipal . AtualizaTelaComodos ; 168 begin 169 170 Regras . ExportaGridComodos ( CBoxPavs . Text , GridComodos ) ; end ; 171 172 procedure TFormPrincipal . B t n A b r i r C l i c k ( Sender : TObject ) ; 173 var 174 175 176 i : Word ; begin i f Aberto then 124 17.14 ANEXO N 17 ANEXOS begin 177 178 AtualizaObjEdi ; 179 Regras . S a l v a r ; end ; 180 i f Regras . A b r i r then 181 begin 182 183 AtualizaTelaEdificacao ; 184 PgC1 . V i s i b l e := true ; 185 G B e d i f i c a c a o . V i s i b l e := true ; 186 // AtualizaObjEdi ; 187 Aberto := true ; 188 DesenhaPlanta ( ’’ , ’’ , ’’ ) ; 189 L b P r o j e t o . Caption := Regras . GetNomeProjeto ; end ; 190 191 end ; 192 193 procedure TFormPrincipal . BtnNovoClick ( Sender : TObject ) ; 194 var 195 Nome : s t r i n g ; 196 cod : integer ; 197 198 199 begin i f Aberto then begin 200 AtualizaObjEdi ; 201 Regras . S a l v a r ; 202 Aberto := f a l s e ; 203 end ; 204 G B e d i f i c a c a o . V i s i b l e := f a l s e ; 205 Nome := InputBox ( ’Novo Projeto ’ , ’Nome do Projeto:’ , ’’ ) ; 206 207 i f Nome <> ’’ then begin 125 17.14 ANEXO N 17 ANEXOS 208 cod := Regras . Nomevalido (Nome) ; 209 i f ( cod = 0 ) then begin 210 211 Regras . NovoProjeto (Nome) ; 212 Regras . S a l v a r ; 213 AtualizaTelaObjeto ; 214 ShowMessage ( ’Novo projeto criado com sucesso!’ ) end 215 e l s e i f ( cod = 1 ) then ShowMessage ( ’Ja existe um projeto 216 com esse nome! Escolha outro nome.’ ) e l s e i f ( cod = 2 ) then ShowMessage ( ’O nome do projeto nao 217 pode ter mais que 30 ( trinta) caracteres !’+#13+’Escolha outro nome.’ ) end ; 218 219 end ; 220 221 procedure TFormPrincipal . BtnRemoverClick ( Sender : TObject ) ; 222 begin 223 Regras . RemoveProjeto ( G B e d i f i c a c a o ) ; 224 Aberto := f a l s e ; 225 end ; 226 227 procedure TFormPrincipal . B t n S a i r C l i c k ( Sender : TObject ) ; 228 begin 229 230 Close ; end ; 231 232 procedure TFormPrincipal . CBoxPavsChange ( Sender : TObject ) ; 233 begin 234 Regras . ExportaGridComodos ( CBoxPavs . Text , GridComodos ) ; LbComodos . Caption := ’Pavimento: ’+CBoxPavs . Text+’ 126 // Possui 17.14 ANEXO N 17 ANEXOS ’+I n t T o s t r ( Regras . E d i f i c a c a o . GetNumComodos ( S t r T o I n t ( CBoxPavs . Text ) ) )+’ comodos ’ ; 235 GBoxPavimentos . V i s i b l e := true ; 236 DesenhaPlanta ( ’’ , CBoxPavs . Text , ’’ ) ; 237 end ; 238 239 procedure TFormPrincipal . FormClose ( Sender : TObject ; var Action : TCloseAction ) ; 240 begin i f Aberto then 241 begin 242 243 AtualizaObjEdi ; 244 Regras . S a i r ; end ; 245 246 end ; 247 248 procedure TFormPrincipal . FormCreate ( Sender : TObject ) ; 249 begin 250 Regras := TRegras . C r e a t e ; 251 PgC2 . A c tiv e Page I n d e x := 0 ; 252 Aberto := f a l s e ; 253 ListaOcup := T S t r i n g L i s t . C r e a t e ; 254 L i s t a O b j := T S t r i n g L i s t . C r e a t e ; 255 F r e n t e := TLimite . C r e a t e ; 256 D i r e i t a := TLimite . C r e a t e ; 257 Fundo := TLimite . C r e a t e ; 258 Esquerda := TLimite . C r e a t e ; 259 // Sleep (2000) ; 260 // FormSplash . C l o s e ; 261 end ; 262 127 17.14 ANEXO N 17 ANEXOS 263 procedure TFormPrincipal . FormDestroy ( Sender : TObject ) ; 264 begin 265 266 Regras . Free ; end ; 267 268 procedure TFormPrincipal . PgC1Change ( Sender : TObject ) ; 269 begin 270 271 i f Aberto then A t u a l i z a O b j E d i ; end ; 272 273 274 procedure TFormPrincipal . PgC2Change ( Sender : TObject ) ; var i : integer ; Items : T S t r i n g L i s t ; 275 276 begin 277 i f Aberto then A t u a l i z a O b j E d i ; 278 CBoxPavs . C l e a r ; 279 CBoxPavs2 . C l e a r ; 280 Items := T S t r i n g L i s t . C r e a t e ; 281 Regras . E x p o r t a L i s t a P a v s ( Items ) ; 282 CBoxPavs . Items := Items ; 283 CBoxPavs2 . Items := Items ; 284 GBoxPavimentos . V i s i b l e := f a l s e ; 285 GBoxComodos . V i s i b l e := f a l s e ; 286 GBoxObjetos . V i s i b l e := f a l s e ; 287 end ; 288 289 290 291 292 293 procedure TFormPrincipal . B t n E d i t a O b j e t o C l i c k ( Sender : TObject ) ; var l i n : integer ; begin i f CBoxComodos . Text <> ’’ then begin 128 17.14 ANEXO N l i n := G r i d O b j e t o s . Row ; 294 295 17 ANEXOS // i f ( l i n > 0 ) then Regras . E d i t a O b j e t o ( CBoxPavs2 . Text , CBoxComodos . Text , G r i d O b j e t o s . C e l l s [ 1 , l i n ] , ) ; AtualizaTelaObjeto ; 296 end ; 297 298 end ; 299 300 procedure TFormPrincipal . A t u a l i z a T e l a O b j e t o ; 301 begin 302 Regras . ExportaGridObjetos ( CBoxpavs2 . Text , CBoxComodos . Text , GridObjetos ) ; 303 end ; 304 305 function TFormPrincipal . S t r F l o a t ( s t : s t r i n g ) : r e a l ; 306 begin 307 i f s t <> ’’ then r e s u l t := S t r T o F l o a t ( s t ) 308 e l s e r e s u l t := 0 ; 309 end ; 310 311 procedure TFormPrincipal . FormShow ( Sender : TObject ) ; 312 begin 313 Caption := 314 StBar . P a n e l s [ 0 ] . Text := ’v’+Regras . GetVersaoArq ; 315 PgC1 . A c tiv e Page I n d e x := 0 ; 316 PgC2 . A c tiv e Page I n d e x := 0 ; 317 BtnAbrir . C l i c k ; 318 ’Calculo de Carga de Incendio em Edificacoes ’ ; end ; 319 320 procedure TFormPrincipal . BtnAddClick ( Sender : TObject ) ; 321 begin 322 Case PgC2 . ActivePage . TabIndex of 129 17.14 ANEXO N 17 ANEXOS 0 : begin 323 324 Regras . EditaPavimento ( ’’ , 2 ) ; 325 AtualizaTelaEdificacao ; end ; 326 1 : begin 327 328 Regras . EditaComodo ( CBoxPavs . Text , ’’ , 2 ) ; 329 AtualizaTelaComodos ; end ; 330 2: 331 begin Regras . E d i t a O b j e t o ( CBoxPavs2 . Text , CBoxComodos . Text , ’’ 332 , 2 ) ; // 2 i n s e r e o b j e t o AtualizaTelaObjeto ; 333 end ; 334 end ; 335 336 end ; 337 338 339 340 341 342 procedure TFormPrincipal . BtnEdtClick ( Sender : TObject ) ; var l i n : integer ; begin Case PgC2 . ActivePage . TabIndex of 0 : begin 343 l i n := GridPavs . Row ; 344 i f ( l i n > 0 ) then Regras . EditaPavimento ( GridPavs . C e l l s [1 , lin ] ,1) ; 345 346 347 AtualizaTelaEdificacao ; end ; 1 : begin 348 l i n := GridComodos . Row ; 349 i f ( l i n > 0 ) then Regras . EditaComodo ( CBoxPavs . Text , GridComodos . C e l l s [ 1 , l i n ] , 1 ) ; 350 AtualizaTelaComodos ; 130 17.14 ANEXO N 17 ANEXOS end ; 351 2: 352 begin 353 l i n := G r i d O b j e t o s . Row ; 354 i f ( l i n > 0 ) then Regras . E d i t a O b j e t o ( CBoxPavs2 . Text , CBoxComodos . Text , G r i d O b j e t o s . C e l l s [ 1 , l i n ] , 1 ) ; AtualizaTelaObjeto ; 355 end ; 356 end ; 357 358 end ; 359 360 361 362 363 364 procedure TFormPrincipal . B t n D e l C l i c k ( Sender : TObject ) ; var l i n : integer ; begin Case PgC2 . ActivePage . TabIndex of 0 : begin 365 l i n := GridPavs . Row ; 366 Regras . EditaPavimento ( GridPavs . C e l l s [ 1 , l i n ] , 0 ) ; 367 AtualizaTelaEdificacao ; end ; 368 369 1 : begin 370 l i n := GridComodos . Row ; 371 Regras . EditaComodo ( CBoxPavs . Text , GridComodos . C e l l s [ 1 , lin ] ,0) ; AtualizaTelaComodos ; 372 end ; 373 374 2: begin 375 l i n := G r i d O b j e t o s . Row ; 376 Regras . E d i t a O b j e t o ( CBoxPavs2 . Text , CBoxComodos . Text , GridObjetos . C e l l s [ 1 , l i n ] , 0 ) ; 377 378 AtualizaTelaObjeto ; end ; 131 17.14 ANEXO N end ; 379 380 17 ANEXOS end ; 381 382 procedure TFormPrincipal . CBoxPavs2Change ( Sender : TObject ) ; var indP , indC , i : integer ; 383 Items : T S t r i n g L i s t ; 384 385 begin 386 Items := T S t r i n g L i s t . C r e a t e ; 387 Regras . ExportaListaComodos ( CBoxPavs2 . Text , Items ) ; 388 CBoxComodos . Text := ’’ ; 389 CBoxComodos . Items := Items ; 390 GBoxComodos . V i s i b l e := true ; 391 GBoxObjetos . V i s i b l e := f a l s e ; 392 DesenhaPlanta ( ’’ , CBoxPavs2 . Text , ’’ ) ; 393 end ; 394 395 procedure TFormPrincipal . CBoxComodosChange ( Sender : TObject ) ; 396 begin Regras . ExportaGridObjetos ( CBoxPavs2 . Text , CBoxComodos . Text , 397 GridObjetos ) ; 398 GBoxObjetos . V i s i b l e := true ; 399 AtualizaTelaObjeto ; 400 DesenhaPlanta ( ’’ , CBoxPavs2 . Text , CBoxComodos . Text ) ; 401 end ; 402 403 procedure TFormPrincipal . B t n I n s O b j L i s t a C l i c k ( Sender : TObject ) ; 404 begin 405 // i f ( CBoxPavs2 . Text <> ’’ ) and ( CBoxComodos . Text <> ’’ ) then 406 // Regras . I n s e r e O b j e t o L i s t a ( CBoxPavs2 . Text , CBoxComodos . Text ) ; 407 // 408 end ; AtualizaTelaObjeto ; 132 17.14 ANEXO N 17 ANEXOS 409 410 procedure TFormPrincipal . B t n S a l v a L i s t a C l i c k ( Sender : TObject ) ; var path : s t r i n g ; 411 412 begin 413 end ; 414 415 (∗ 416 p r o c e d u r e TFormPrincipal . A t u a l i z a P l a n t a ( E d i f i c a c a o : T E d i f i c a c a o ) ; 417 v a r x , y , x0 , y0 , Xmax , Ymax : i n t e g e r ; k : real ; 418 419 begin 420 x0 := 5 ; 421 y0 := 5 ; 422 Xmax := P l a n t a . Width−x0 ; 423 Ymax := P l a n t a . Height −y0 ; 424 x := x0 ; 425 i f E d i f i c a c a o . F r e n t e . Comprimento > 0 t h e n 426 begin 427 k := (Xmax − x0−x0 ) / E d i f i c a c a o . F r e n t e . Comprimento ; 428 y := Ymax−y0 ; 429 P l a n t a . Canvas . MoveTo( x , y ) ; 430 431 x := round ( k ∗ E d i f i c a c a o . F r e n t e . Comprimento ) ; 432 P l a n t a . Canvas . LineTo ( x , y ) ; 433 y := Ymax − round ( k ∗ E d i f i c a c a o . D i r e i t a . Comprimento ) ; 434 P l a n t a . Canvas . LineTo ( x , y ) ; 435 x := 436 P l a n t a . Canvas . LineTo ( x , y ) ; 437 y := Ymax − round ( k ∗ E d i f i c a c a o . Esquerda . Comprimento ) ; 438 P l a n t a . Canvas . LineTo ( x , y ) ; round ( k ∗ E d i f i c a c a o . Fundo . Comprimento ) ; 133 17.14 ANEXO N end ; 439 440 17 ANEXOS // l b C o o r d . Caption := fo r m a t ( ’ k=%4.1 f xM=%4d yM=%4d x=%4d =%4d ’ , [ k , Xmax , Ymax , x , y ] ) ; 441 end ; 442 ∗) 443 // ordena p e l a c o l u n a c l i c k a d a 444 445 procedure MouseCell ( Grid : TDBGrid ; var Coluna , Linha : integer ) ; 446 var 447 448 Pt : TPoint ; begin 449 GetCursorPos ( Pt ) ; 450 Pt := Grid . S c r e e n T o C l i e n t ( Pt ) ; 451 i f PtInRect ( Grid . C l i e n t R e c t , Pt ) then begin 452 453 Linha := Grid . MouseCoord ( Pt . X, Pt .Y) .Y; 454 Coluna := Grid . MouseCoord ( Pt . X, Pt .Y) .X; end 455 456 else begin 457 458 Coluna := −1; 459 Linha := −1; end ; 460 461 end ; 462 463 procedure TFormPrincipal . DBGrid3MouseDown ( Sender : TObject ; 464 Button : TMouseButton ; S h i f t : T S h i f t S t a t e ; X, Y: Integer ) ; 465 var l i n h a , c o l u n a : word ; 466 begin 467 // showMessage ( I n t T o S t r ( DBGrid3 . MouseCoord (X,Y) .X)+’ ’+I n t T o S t r ( DBGrid3 . MouseCoord (X,Y) .Y) ) ; 134 y 17.14 ANEXO N 468 // 17 ANEXOS i f ( Column . FieldName = ’tipo ’ ) then DM. CDSOcupacoes . IndexFieldNames := Column . FieldName+’; especialidade ’ 469 // e l s e DM. CDSOcupacoes . IndexFieldNames := Column . FieldName ; 470 l i n h a := DBGrid3 . MouseCoord (X,Y) .Y; 471 c o l u n a := DBGrid3 . MouseCoord (X,Y) .X; 472 // showMessage ( ’L=’+I n t T o S t r ( Linha )+’ C=’+I n t T o S t r ( Coluna ) ) ; i f ( Linha = 0 ) and ( c o l u n a = 1 ) then DM. CDSOcupacoes . 473 IndexFieldNames := ’tipo ’ e l s e i f ( Linha = 0 ) and ( c o l u n a = 2 ) then DM. CDSOcupacoes . 474 IndexFieldNames := ’especialidade ’ e l s e i f ( Linha = 0 ) and ( c o l u n a = 3 ) then DM. CDSOcupacoes . 475 IndexFieldNames := ’q’ ; 476 end ; 477 478 479 procedure TFormPrincipal . DBGrid1MouseDown ( Sender : TObject ; 480 Button : TMouseButton ; S h i f t : T S h i f t S t a t e ; X, Y: Integer ) ; 481 var l i n h a , c o l u n a : word ; 482 begin 483 l i n h a := DBGrid1 . MouseCoord (X,Y) .Y; 484 c o l u n a := DBGrid1 . MouseCoord (X,Y) .X; 485 // showMessage ( ’L=’+I n t T o S t r ( Linha )+’ C=’+I n t T o S t r ( Coluna ) ) ; i f ( Linha = 0 ) and ( c o l u n a = 1 ) then DM. CDSMateriais . 486 IndexFieldNames := ’material ’ e l s e i f ( Linha = 0 ) and ( c o l u n a = 2 ) then DM. CDSMateriais . 487 IndexFieldNames := ’H’ ; 488 489 // DM. CDSMateriais . IndexFieldNames := Column . FieldName ; 490 491 end ; 492 135 17.14 ANEXO N 17 ANEXOS 493 procedure TFormPrincipal . B i t B t n 1 C l i c k ( Sender : TObject ) ; 494 begin 495 496 Regras . R e l a t o r i o ; end ; 497 498 procedure TFormPrincipal . DesenhaPlanta ( modo , pavimento , comodo : string ) ; 499 var x , y , xi , yi , x0 , y0 , Xmax, Ymax, Dx , Dy , 500 indP , i : integer ; 501 k , kx , ky : r e a l ; 502 s t , nome : s t r i n g ; 503 Edi : T E d i f i c a c a o ; 504 PavimentoAtual : TPavimento ; 505 ComodoAtual : TComodo ; 506 begin 507 x0 := 2 ; 508 y0 := 2 ; 509 Xmax := Plan ta . Width−2∗x0 ; 510 Ymax := Plan ta . Height −2∗y0 ; 511 Dx := Xmax−x0 ; 512 Dy := Ymax−y0 ; 513 514 Plan ta . Canvas . Brush . C o l o r := clWhite ; 515 Plan ta . Canvas . F i l l R e c t ( Rect ( 0 , 0 , Width , Height ) ) ; 516 Regras . G e t L i m i t e s ( nome , s t , Frente , D i r e i t a , Fundo , Esquerda ) ; 517 i f ( F r e n t e . Comprimento > 0 ) and ( Esquerda . Comprimento > 0 ) then 518 begin 519 kx := Dx/ F r e n t e . Comprimento ; 520 ky := Dy/ Esquerda . Comprimento ; 521 k := kx ; 136 17.14 ANEXO N 17 ANEXOS i f ( ky < k ) then k := ky ; 522 523 524 525 (∗ x := X0 ; 526 y := Y0 ; 527 P l a n t a . Canvas . MoveTo( x , y ) ; 528 529 x := Round ( k ∗ F r e n t e . Comprimento )−x0 ; 530 P l a n t a . Canvas . LineTo ( x , y ) ; 531 532 y := Round ( k ∗ Esquerda . Comprimento )−y0 ; 533 P l a n t a . Canvas . LineTo ( x , y ) ; 534 535 x := X0 ; 536 P l a n t a . Canvas . LineTo ( x , y ) ; 537 538 y := Y0 ; 539 P l a n t a . Canvas . LineTo ( x , y ) ; 540 ∗) 541 // s t := ’Dx=’+I n t T o S t r (Dx)+’ Dy=’+I n t T o S t r (Dy) ; 542 // Plan ta . Canvas . TextOut ( x+10 ,y+10 , s t ) ; 543 544 Edi := T E d i f i c a c a o . C r e a t e ; 545 PavimentoAtual := TPavimento . C r e a t e ; 546 ComodoAtual := TComodo . C r e a t e ; 547 Edi := Regras . ExportaEdi ( ) ; 548 Edi . C a l c u l o s ; 549 indP := Edi . GetIndPav ( pavimento ) ; 550 i f ( indP >= 0 ) then 551 begin 137 17.14 ANEXO N 552 17 ANEXOS PavimentoAtual := TPavimento ( Edi . Pavimentos . Items [ indP −1]) ; 553 554 555 f or i := 1 to PavimentoAtual . Comodos . Count do begin ComodoAtual := TComodo( PavimentoAtual . Comodos [ i −1]) ; 556 x i := X0+Round ( k∗ComodoAtual . PosX ) ; 557 y i := Y0+Round ( k∗ComodoAtual . PosY ) ; 558 x := x i ; 559 y := y i ; 560 Plan ta . Canvas . MoveTo ( x , y ) ; 561 x := x i+Round ( k∗ComodoAtual . Largura ) ; 562 Plan ta . Canvas . LineTo ( x , y ) ; 563 y := y i+Round ( k∗ComodoAtual . P r o f u n d i d a d e ) ; 564 Plan ta . Canvas . LineTo ( x , y ) ; 565 x := x i ; 566 Plan ta . Canvas . LineTo ( x , y ) ; 567 y := y i ; 568 Plan ta . Canvas . LineTo ( x , y ) ; 569 i f ( ComodoAtual . Nome = comodo ) then 570 begin 571 Plan ta . Canvas . MoveTo ( xi , y i ) ; 572 Plan ta . Canvas . Brush . C o l o r := clRed ; 573 Plan ta . Canvas . Brush . S t y l e := bsBDiagonal ; 574 Plan ta . Canvas . F l o o d F i l l ( x i +5, y i +5, c l B l a c k , fsBorder ) ; 575 Plan ta . Canvas . Brush . S t y l e := b s C l e a r ; 576 Plan ta . Canvas . Brush . C o l o r := clWhite ; 577 578 end ; Plan ta . Canvas . TextOut ( x i +3, y i +3,ComodoAtual . Nome) ; 138 17.14 ANEXO N 17 ANEXOS St := ’Energia: ’+format ( ’%10.2 fMJ ’ , [ ComodoAtual . 579 Energia ] ) ; 580 Plan ta . Canvas . TextOut ( x i +3, y i +16 , St ) ; 581 St := ’Area: ’+format ( ’%10.2 fm2 ’ , [ ComodoAtual . Area ]) ; 582 Plan ta . Canvas . TextOut ( x i +3, y i +29 , St ) ; 583 St := ’q: ’+format ( ’%10.2 fMJ/m2’ , [ ComodoAtual . CargaIncendio ] ) ; Plan ta . Canvas . TextOut ( x i +3, y i +42 , St ) ; 584 585 end ; 586 end ; 587 588 // ComodoAtual . Free ; 589 // PavimentoAtual . Free ; 590 // Edi . Free ; end ; 591 592 end ; 593 594 procedure TFormPrincipal . B t n S o b r e C l i c k ( Sender : TObject ) ; 595 begin 596 597 FormSplash . ShowModal ; end ; 598 599 600 601 procedure TFormPrincipal . BtnAjudaClick ( Sender : TObject ) ; var Arq , Path : s t r i n g ; begin 602 Path := E x t r a c t F i l e P a t h ( A p p l i c a t i o n . ExeName ) ; 603 Arq := ’Ajuda.html ’ ; 604 Arq := Path+Arq ; 605 H l i n k N a v i g a t e S t r i n g ( n i l , PWideChar ( WideString ( Arq ) ) ) ; 606 end ; 139 17.14 ANEXO N 17 ANEXOS 607 608 end . 140 17.15 ANEXO O 17.15 17 ANEXOS ANEXO O Listagem 3: Código para a classe TRegras 1 // r e g r a s de n e g o c i o 2 u n i t U Regras ; 3 4 interface 5 6 u s e s U DataModule , U E d i f i c a c a o , U Pavimento , U Comodo , U Objeto , U Limite , DB, U FormEscolhaEdi , U FormComodo , U FormObjeto , U FormListaObjetos , 7 U FormPavimento , U R e l a t o r i o s , D i a l o g s , S y s U t i l s , ComCtrls , S t d C t r l s , Types , Windows , Forms , Grids , C l a s s e s ; 8 9 type 10 TRegras = c l a s s ( TObject ) 11 private 12 Edificacao : TEdificacao ; 13 Rel : T R e l a t o r i o ; 14 function RandCod ( n : integer ) : s t r i n g ; 15 function Cod ( nome : s t r i n g ) : s t r i n g ; 16 public 17 cargaOcup , cargaObj : r e a l ; 18 c o n s t r u c t o r Create ; 19 d e s t r u c t o r Destroy ; 20 function A b r i r : Boolean ; 21 function GetVersaoArq : s t r i n g ; 22 function NomeValido (Nome : s t r i n g ) : integer ; 23 procedure NovoProjeto (Nome : s t r i n g ) ; 24 procedure I n s e r e P a v i m e n t o L i s t a ; 25 procedure I n s e r e C o m o d o L i s t a ( Pav : S t r i n g ) ; 141 17.15 ANEXO O 17 ANEXOS 26 procedure I n s e r e O b j e t o L i s t a ( Pav , Cmd : S t r i n g ) ; 27 procedure EditaPavimento ( Pav : S t r i n g ; modo : word ) ; 28 procedure EditaComodo ( Pav , Cmd: S t r i n g ; modo : word ) ; 29 procedure E d i t a O b j e t o ( Pav , Cmd, Obj : s t r i n g ; modo : word ) ; 30 procedure RemoveProjeto ( var GB : TGroupBox ) ; 31 procedure S a i r ; 32 procedure S a l v a r ; 33 procedure S e t L i m i t e s ( Frente , D i r e i t a , Fundo , Esquerda : TLimite ) ; 34 procedure G e t L i m i t e s ( var Nome , Pavs : s t r i n g ; var Frente , D i r e i t a , Fundo , Esquerda : TLimite ) ; 35 function GetIndPav ( Pav : s t r i n g ) : integer ; 36 function GetNomeProjeto ( ) : s t r i n g ; 37 procedure ExportaGridPavs ( var Grid : TS tr in gG r id ) ; 38 procedure ExportaGridComodos ( Pav : S t r i n g ; var Grid : TS tr in gG r id ) ; 39 procedure ExportaGridObjetos ( Pav , Cmd : s t r i n g ; var Grid : TS tr in gG r id ) ; 40 procedure E x p o r t a L i s t a P a v s ( var Items : T S t r i n g L i s t ) ; 41 procedure ExportaListaComodos ( Pav : s t r i n g ; var Items : TStringList ) ; 42 function ExportaEdi ( ) : T E d i f i c a c a o ; 43 procedure CalcCarga ( var ListaOcup , L i s t a O b j : T S t r i n g L i s t ) ; 44 procedure R e l a t o r i o ; 45 end ; 46 47 implementation 48 49 { TRegras } 50 51 142 17.15 ANEXO O 17 ANEXOS 52 { 53 ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ TRegras ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ 54 } 55 c o n s t r u c t o r TRegras . C r e a t e ; 56 begin 57 E d i f i c a c a o := T E d i f i c a c a o . C r e a t e ; 58 Rel := T R e l a t o r i o . C r e a t e ; 59 end ; 60 61 d e s t r u c t o r TRegras . Destroy ; 62 begin 63 E d i f i c a c a o . Free ; 64 Rel . Free ; 65 end ; 66 67 function TRegras . A b r i r : Boolean ; 68 begin 69 r e s u l t := f a l s e ; 70 try 71 72 73 DM. C D S E d i f i c a c o e s . Open ; i f FormEscolhaEdi . MyShowModal (DM. D S E d i f i c a c o e s ) then begin 74 E d i f i c a c a o . Free ; 75 E d i f i c a c a o := T E d i f i c a c a o . C r e a t e ; 76 E d i f i c a c a o . Nome := DM. CDSEdificacoesNome . A s S t r i n g ; 77 E d i f i c a c a o . Arq := DM. CDSEdificacoesArq . A s S t r i n g ; 78 Ed ific ac ao . Carregar ; 79 r e s u l t := true ; 80 81 end ; except 143 17.15 ANEXO O 17 ANEXOS r a i s e e x c e p t i o n . C r e a t e ( ’Nao foi possivel abrir o projeto 82 selecionado!’ ) ; 83 84 end ; end ; 85 86 procedure TRegras . NovoProjeto (Nome : s t r i n g ) ; 87 begin 88 E d i f i c a c a o . Free ; 89 E d i f i c a c a o := T E d i f i c a c a o . C r e a t e ; 90 E d i f i c a c a o . Nome := Trim (Nome) ; 91 E d i f i c a c a o . Arq := Cod (Nome) ; 92 Edificacao . Salvar ; 93 DM. C D S E d i f i c a c o e s . I n s e r t ; 94 DM. C D S E d i f i c a c o e s . FieldByName ( ’Nome ’ ) . Value := E d i f i c a c a o . Nome ; 95 DM. C D S E d i f i c a c o e s . FieldByName ( ’Arq ’ ) . Value := E d i f i c a c a o . Arq ; 96 DM. C D S E d i f i c a c o e s . Post ; 97 end ; 98 99 100 101 102 procedure TRegras . RemoveProjeto ( var GB : TGroupBox ) ; var arq : s t r i n g ; begin i f MessageDlg ( ’Confirma Eliminacao da edificacao : ’+E d i f i c a c a o . Nome+’?’ , mtWarning , [ mbYes , mbNo ] , 0 ) = 6 then 103 104 begin arq := E x t r a c t F i l e P A t h ( A p p l i c a t i o n . ExeName )+’dados\’+ E d i f i c a c a o . Arq+’.str ’ ; 105 D e l e t e F i l e ( PChar ( arq ) ) ; 106 DM. C D S E d i f i c a c o e s . D e l e t e ; 107 GB. V i s i b l e := f a l s e ; 108 end ; 144 17.15 ANEXO O 109 17 ANEXOS end ; 110 111 procedure TRegras . EditaPavimento ( Pav : S t r i n g ; modo : word ) ; 112 begin 113 case modo of 114 0 : E d i f i c a c a o . RemovePavimento ( Pav ) ; / / remove 115 1 : E d i f i c a c a o . EditaPavimento ( Pav ) ; / / e d i t a 116 2 : E d i f i c a c a o . I n s e r e P a v i m e n t o ; / / i n s e r e novo end ; 117 118 end ; 119 120 procedure TRegras . EditaComodo ( Pav , Cmd: S t r i n g ; modo : word ) ; 121 begin 122 case modo of 123 0 : E d i f i c a c a o . RemoveComodo ( Pav ,Cmd) ; / / remove 124 1 : E d i f i c a c a o . EditaComodo ( Pav ,Cmd) ; / / e d i t a 125 2 : E d i f i c a c a o . InsereComodo ( Pav ) ; / / i n s e r e novo end ; 126 127 end ; 128 129 procedure TRegras . E d i t a O b j e t o ( Pav , Cmd, Obj : S t r i n g ; modo : word ) ; 130 131 begin case modo of 132 0 : E d i f i c a c a o . RemoveObjeto ( Pav ,Cmd, Obj ) ; / / remove 133 1 : E d i f i c a c a o . E d i t a O b j e t o ( Pav ,Cmd, Obj ) ; / / e d i t a 134 2 : E d i f i c a c a o . I n s e r e O b j e t o ( Pav ,Cmd) ; / / i n s e r e novo end ; 135 136 end ; 137 138 procedure TRegras . I n s e r e O b j e t o L i s t a ( Pav , Cmd: S t r i n g ) ; 145 17.15 ANEXO O 139 var indP , indC : integer ; 140 Objeto : TObjeto ; 141 Pavimento : TPavimento ; 142 Comodo : TComodo ; 143 17 ANEXOS begin 144 indP := E d i f i c a c a o . GetIndPav ( Pav ) ; 145 Objeto := TObjeto . C r e a t e ; 146 i f FormListaObjetos . MyShowModal ( Objeto , E d i f i c a c a o ) then begin 147 148 Pavimento := TPavimento . c r e a t e ; 149 Pavimento := TPavimento ( E d i f i c a c a o . Pavimentos . Items [ indP ] ) ; 150 indC := Pavimento . GetIndComodo (Cmd) ; 151 Comodo := TComodo . C r e a t e ; 152 Comodo := TComodo( Pavimento . Comodos . Items [ indC ] ) ; 153 Comodo . O b j e t o s . Add( Objeto ) ; 154 Pavimento . Comodos . Items [ indC ] := Comodo ; 155 E d i f i c a c a o . Pavimentos . Items [ indP ] := Pavimento ; end ; 156 157 end ; 158 159 procedure TRegras . S a i r ; 160 begin 161 162 Salvar ; end ; 163 164 procedure TRegras . S a l v a r ; 165 begin 166 Edificacao . Salvar ; 167 i f DM. CDSMateriais . S t a t e in [ dsEDit , d s I n s e r t ] then DM. CDSMateriais . Post ; 146 17.15 ANEXO O 168 17 ANEXOS i f DM. CDSOcupacoes . S t a t e in [ dsEDit , d s I n s e r t ] then DM. CDSOcupacoes . Post ; 169 end ; 170 171 function TRegras . GetVersaoArq : s t r i n g ; 172 var 173 174 l i s t a : TStringList ; begin 175 l i s t a := T S t r i n g L i s t . C r e a t e ; 176 l i s t a . LoadFromFile ( ’versao.txt ’ ) ; 177 r e s u l t := l i s t a [ 0 ] ; 178 end ; 179 180 // r e t o r n a s t r i n g randomica de ’n’ p o s i c o e s 181 function TRegras . RandCod ( n : integer ) : s t r i n g ; 182 var i : integer ; 183 st : string ; 184 a : array [ 1 . . 3 ] of integer ; 185 begin 186 s t := ’’ ; 187 Randomize ; 188 f or i := 1 to n do begin 189 190 a [ 1 ] := 48+Random ( 9 ) ; 191 a [ 2 ] := 65+Random ( 2 5 ) ; 192 a [ 3 ] := 97+Random ( 2 5 ) ; 193 s t := s t+c h r ( a [1+random ( 3 ) ] ) ; end ; 194 195 196 r e s u l t := s t ; end ; 197 147 17.15 ANEXO O 198 199 200 17 ANEXOS function TRegras . NomeValido (Nome : s t r i n g ) : integer ; var ok : integer ; begin 201 ok := 0 ; 202 i f ( l e n g t h (Nome) > 3 0 ) then ok := 2 203 else begin 204 DM. C D S E d i f i c a c o e s . F i r s t ; 205 while not (DM. C D S E d i f i c a c o e s . Eof ) do 206 begin 207 i f (DM. C D S E d i f i c a c o e s . FieldByName ( ’Nome ’ ) . A s S t r i n g = 208 Trim (Nome) ) then ok := 1 ; // nao m o d i f i c a r p o i s s e n a o s o pega o u l t i m o DM. C D S E d i f i c a c o e s . Next ; 209 end ; 210 end ; 211 212 213 r e s u l t := ok ; end ; 214 215 216 function TRegras . Cod ( nome : s t r i n g ) : s t r i n g ; var s t , s t x : s t r i n g ; ch : char ; 217 218 begin 219 s t := ’’ ; 220 s t x := nome ; 221 while s t x <> ’’ do 222 begin 223 ch := s t x [ 1 ] ; 224 i f ch in [ ’0’ . . ’9’ , ’A’ . . ’Z’ , ’a’ . . ’z’ ] then s t := s t+ch e l s e s t := s t+’_’ ; 225 d e l e t e ( stx , 1 , 1 ) ; 148 17.15 ANEXO O end ; 226 227 228 17 ANEXOS r e s u l t := s t ; end ; 229 230 procedure TRegras . CalcCarga ( var ListaOcup , L i s t a O b j : T S t r i n g L i s t ); 231 var Pavimento : TPavimento ; 232 Comodo : TComodo ; 233 Objeto : TObjeto ; 234 indP , indC , indO : integer ; 235 somapav , somacomodo : r e a l ; 236 begin 237 end ; 238 239 procedure TRegras . I n s e r e C o m o d o L i s t a ( Pav : S t r i n g ) ; 240 begin 241 242 end ; 243 244 procedure TRegras . I n s e r e P a v i m e n t o L i s t a ; 245 begin 246 247 end ; 248 249 procedure TRegras . G e t L i m i t e s ( var Nome , Pavs : s t r i n g ; var Frente , D i r e i t a , Fundo , 250 251 Esquerda : TLimite ) ; begin 252 Nome := E d i f i c a c a o . Nome ; 253 Pavs := I n t T o S t r ( E d i f i c a c a o . Pavimentos . Count ) ; 254 F r e n t e := E d i f i c a c a o . F r e n t e ; 149 17.15 ANEXO O 17 ANEXOS 255 D i r e i t a := E d i f i c a c a o . D i r e i t a ; 256 Fundo := E d i f i c a c a o . Fundo ; 257 Esquerda := E d i f i c a c a o . Esquerda ; 258 end ; 259 260 procedure TRegras . S e t L i m i t e s ( Frente , D i r e i t a , Fundo , Esquerda : TLimite ) ; 261 begin 262 E d i f i c a c a o . SetFrente ( Frente ) ; 263 Edificacao . SetDireita ( Direita ) ; 264 E d i f i c a c a o . SetFundo ( Fundo ) ; 265 E d i f i c a c a o . SetEsquerda ( Esquerda ) ; 266 end ; 267 268 function TRegras . GetIndPav ( Pav : s t r i n g ) : integer ; 269 begin 270 271 r e s u l t := E d i f i c a c a o . GetIndPav ( Pav ) ; end ; 272 273 procedure TRegras . ExportaGridComodos ( Pav : S t r i n g ; var Grid : TS tr in gG r id ) ; 274 275 276 begin E d i f i c a c a o . ExportaGridComodos ( Pav , Grid ) ; end ; 277 278 procedure TRegras . E x p o r t a L i s t a P a v s ( var Items : T S t r i n g L i s t ) ; 279 begin 280 281 E d i f i c a c a o . E x p o r t a L i s t a P a v s ( Items ) ; end ; 282 283 procedure TRegras . ExportaGridPavs ( var Grid : TS tr in gG r id ) ; 150 17.15 ANEXO O 284 285 286 17 ANEXOS begin E d i f i c a c a o . ExportaGridPavs ( Grid ) ; end ; 287 288 procedure TRegras . ExportaListaComodos ( Pav : s t r i n g ; var Items : TStringList ) ; 289 290 291 begin E d i f i c a c a o . ExportaListaComodos ( Pav , Items ) ; end ; 292 293 procedure TRegras . ExportaGridObjetos ( Pav , Cmd: s t r i n g ; var Grid : TS tr in gG r id ) ; 294 295 296 begin E d i f i c a c a o . ExportaGridObjetos ( Pav , Cmd, Grid ) ; end ; 297 298 299 300 procedure TRegras . R e l a t o r i o ; var ListaOcup , L i s t a O b j : T S t r i n g L i s t ; begin 301 Rel . Tipo := ’completo ’ ; 302 Rel . GeraHtml ( E d i f i c a c a o ) ; 303 end ; 304 305 function TRegras . GetNomeProjeto : s t r i n g ; 306 begin 307 308 r e s u l t := E d i f i c a c a o . Nome ; end ; 309 310 function TRegras . ExportaEdi ( ) : T E d i f i c a c a o ; 311 begin 312 r e s u l t := E d i f i c a c a o ; 151 17.15 ANEXO O 313 17 ANEXOS end ; 314 315 end . 152 17.16 ANEXO P 17.16 17 ANEXOS ANEXO P Listagem 4: Código para a classe TRelatorios 1 unit U Relatorios ; 2 3 interface 4 5 u s e s UrlMon , C l a s s e s , S y s U t i l s , Forms , D i a l o g s , U E d i f i c a c a o , U Pavimento , U Comodo , U Objeto ; 6 7 Type TRelatorio = c l a s s 8 9 private 10 FTipo : s t r i n g ; 11 Arq , Path , nome tab : s t r i n g ; 12 Lista : TStringList ; 13 FEdi : T E d i f i c a c a o ; 14 procedure S e tEd i ( const Value : T E d i f i c a c a o ) ; 15 procedure SetTipo ( const Value : s t r i n g ) ; 16 17 public 18 p r o p e r t y Tipo : s t r i n g read FTipo write SetTipo ; 19 p r o p e r t y Edi : T E d i f i c a c a o read FEdi write S e tEd i ; 20 c o n s t r u c t o r Create ; 21 d e s t r u c t o r Destroy ; 22 procedure GeraHtml ( xEdi : T E d i f i c a c a o ) ; 23 procedure GeraGrid ( modo : s t r i n g ) ; 24 procedure Cabecalho ; 25 procedure Rodape ; 26 end ; 27 153 17.16 ANEXO P 28 17 ANEXOS implementation 29 30 { TRelatorio } 31 32 c o n s t r u c t o r TRelatorio . Create ; 33 begin 34 Path := E x t r a c t F i l e P a t h ( A p p l i c a t i o n . ExeName ) ; 35 L i s t a := T S t r i n g L i s t . C r e a t e ; 36 Edi := T E d i f i c a c a o . C r e a t e ; 37 end ; 38 39 d e s t r u c t o r T R e l a t o r i o . Destroy ; 40 begin 41 L i s t a . Free ; 42 Edi . Free ; 43 end ; 44 45 46 procedure T R e l a t o r i o . Cabecalho ; var s t , s t 1 : s t r i n g ; c o l : integer ; 47 48 begin 49 L i s t a . Add( ’ <head > </head > ’ ) ; 50 L i s t a . Add( ’<body style =" width: 210 mm; height: 297 mm" > ’ ) ; 51 L i s t a . Add( ’<h3 > Calculo da carga de Incendio </h3 >’ ) ; 52 L i s t a . Add( ’<h4 > Relatorio ’+Tipo+’ </h4 >’ ) ; 53 L i s t a . Add( ’<h5 > Projeto: ’+Edi . Nome+’ </h5 >’ ) ; 54 Edi . C a l c u l o s ; 55 s t := ’<h6 >’+format ( ’Area :%7.2 fm2 ’ , [ Edi . Area ] ) ; 56 s t := s t+’- Energia Total Liberada:’ ; 57 s t 1 := format ( ’%15.2 mMJ ’ , [ Edi . E n e r g i a ] ) ; 58 s t 1 := t r i m ( s t 1 ) ; 154 17.16 ANEXO P 17 ANEXOS 59 s t := s t+ copy ( s t 1 , 3 , l e n g t h ( s t 1 ) −2) ; 60 s t := s t+ format ( ’- Carga de incendio %7.2 fMJ/m2 ’ , [ Edi . C a r g a I n c e n d i o ] )+’ </h6 >’ ; 61 L i s t a . Add( s t ) ; 62 L i s t a . Add( ’<hr >’ ) ; 63 end ; 64 65 66 procedure T R e l a t o r i o . GeraGrid ( modo : s t r i n g ) ; var l i n , c o l , pavs , cmds , o b j s : integer ; 67 st , st1 : s t r i n g ; 68 area , e n e r g i a , c a r g a : r e a l ; 69 70 71 begin f or pavs := 1 to Edi . Pavimentos . Count do begin 72 s t 1 := TPavimento ( Edi . Pavimentos [ pavs −1]) . Nome ; 73 TPavimento ( Edi . Pavimentos [ pavs −1]) . C a l c u l o s ; 74 a r e a := TPavimento ( Edi . Pavimentos [ pavs −1]) . Area ; 75 e n e r g i a := TPavimento ( Edi . Pavimentos [ pavs −1]) . E n e r g i a ; 76 c a r g a := TPavimento ( Edi . Pavimentos [ pavs −1]) . C a r g a I n c e n d i o ; 77 s t := ’<h6 > Pavimento: ’+s t 1 ; 78 s t := s t+format ( ’ - Area :%7.2 fm2 ’ , [ a r e a ] ) ; 79 s t := s t+’- Energia Total Liberada:’ ; 80 s t 1 := format ( ’%15.2 mMJ ’ , [ e n e r g i a ] ) ; 81 s t 1 := t r i m ( s t 1 ) ; 82 s t := s t+ copy ( s t 1 , 3 , l e n g t h ( s t 1 ) −2) ; 83 s t := s t+ format ( ’- Carga de incendio %7.2 fMJ/m2’ , [ c a r g a ] )+ ’ </h6 >’ ; 84 L i s t a . Add( s t ) ; 85 86 f or cmds := 1 to TPavimento ( Edi . Pavimentos [ pavs −1]) . comodos . count do 155 17.16 ANEXO P 87 88 17 ANEXOS begin s t 1 := TComodo( TPavimento ( Edi . Pavimentos [ pavs −1]) . comodos [ cmds −1]) . Nome ; 89 TComodo( TPavimento ( Edi . Pavimentos [ pavs −1]) . comodos [ cmds −1]) . C a l c u l o s ; 90 a r e a := TComodo( TPavimento ( Edi . Pavimentos [ pavs −1]) . comodos [ cmds −1]) . Area ; 91 e n e r g i a := TComodo( TPavimento ( Edi . Pavimentos [ pavs −1]) . comodos [ cmds −1]) . E n e r g i a ; 92 c a r g a := TComodo( TPavimento ( Edi . Pavimentos [ pavs −1]) . comodos [ cmds −1]) . C a r g a I n c e n d i o ; 93 s t := ’<h6 > Comodo: ’+s t 1 ; 94 s t := s t+format ( ’- Area :%7.2 fm2 ’ , [ a r e a ] ) ; 95 s t := s t+’- Energia Total Liberada:’ ; 96 s t 1 := format ( ’%15.2 mMJ ’ , [ e n e r g i a ] ) ; 97 s t 1 := t r i m ( s t 1 ) ; 98 s t := s t+ copy ( s t 1 , 3 , l e n g t h ( s t 1 ) −2) ; 99 s t := s t+ format ( ’- Carga de incendio %7.2 fMJ/m2’ , [ c a r g a ] )+’ </h6 >’ ; 100 L i s t a . Add( s t ) ; 101 L i s t a . Add( ’<br >’ ) ; 102 103 L i s t a . Add( ’<table id=" tabela ’+format ( ’%2.2d’ , [ cmds ] )+’ " border ="1" style ="font -size : 8pt ;" >’ ) ; 104 L i s t a . Add( ’<tr bgcolor = "# ffff99"> ’ ) ; 105 L i s t a . Add( ’<td width ="200" > <div align =" left" > Objeto </div > </td >’ ) ; 106 L i s t a . Add( ’<td width ="100" > <div align =" left" > Energia (MJ) </div > </td >’ ) ; 107 L i s t a . Add( ’ </tr >’ ) ; 108 156 17.16 ANEXO P 17 ANEXOS f or o b j s := 1 to TComodo( TPavimento ( Edi . Pavimentos [ 109 pavs −1]) . comodos [ cmds −1]) . o b j e t o s . count do begin 110 s t 1 := TObjeto (TComodo( TPavimento ( Edi . Pavimentos [ 111 pavs −1]) . comodos [ cmds −1]) . o b j e t o s [ o b j s −1]) . Nome ; TObjeto (TComodo( TPavimento ( Edi . Pavimentos [ pavs −1]) 112 . comodos [ cmds −1]) . o b j e t o s [ o b j s −1]) . C a l c u l o s ; e n e r g i a := TObjeto (TComodo( TPavimento ( Edi . 113 Pavimentos [ pavs −1]) . comodos [ cmds −1]) . o b j e t o s [ o b j s −1]) . E n e r g i a ; 114 i f ( ( ( o b j s +1) mod 2 ) = 0 ) then L i s t a . Add( ’<tr 115 bgcolor = "# ffffff">’ ) 116 e l s e L i s t a . Add( ’<tr bgcolor = "# dae5e3">’ ) ; 117 L i s t a . Add( ’<td > <div align =" left" > ’+s t 1+’ </div > </td >’ ) ; 118 s t 1 := format ( ’%7.2m’ , [ e n e r g i a ] ) ; 119 s t 1 := t r i m ( s t 1 ) ; 120 s t 1 := copy ( s t 1 , 3 , l e n g t h ( s t 1 ) −2) ; 121 L i s t a . Add( ’<td > <div align =" left" > ’+s t 1+’ </div > </td >’ ) ; L i s t a . Add( ’ </tr >’ ) ; 122 end ; 123 L i s t a . Add( ’ </table > ’ ) ; 124 end ; 125 126 L i s t a . Add( ’<hr >’ ) ; 127 end ; 128 129 end ; 130 157 17.16 ANEXO P 131 procedure T R e l a t o r i o . Rodape ; 132 begin 17 ANEXOS 133 L i s t a . Add( ’<br style ="page -break - before: always ;">’ ) ; 134 L i s t a . Add( ’ </body >’ ) ; 135 end ; 136 137 procedure T R e l a t o r i o . GeraHtml ( xEdi : T E d i f i c a c a o ) ; var l i n , c o l , pos : integer ; 138 139 ok : boolean ; 140 st : string ; 141 begin 142 Edi := xEdi ; 143 Arq := ’Relatorio.html ’ ; 144 Arq := Path+Arq ; 145 Lista . Clear ; 146 Cabecalho ; 147 GeraGrid ( Tipo ) ; 148 Rodape ; 149 L i s t a . S av e ToF ile ( Arq ) ; 150 // showmessage ( ’Relatorio gerado em: ’+Arq ) ; H l i n k N a v i g a t e S t r i n g ( n i l , PWideChar ( WideString ( Arq ) ) ) ; 151 152 end ; 153 154 procedure T R e l a t o r i o . S e tEd i ( const Value : T E d i f i c a c a o ) ; 155 begin 156 157 FEdi := Value ; end ; 158 159 procedure T R e l a t o r i o . SetTipo ( const Value : s t r i n g ) ; 160 begin 161 i f ( Value = ’completo ’ ) or ( Value = ’resumo ’ ) then 158 17.16 ANEXO P FTipo := Value ; 162 163 17 ANEXOS end ; 164 165 end . 159 17.17 ANEXO Q 17.17 17 ANEXOS ANEXO Q Listagem 5: Código para a classe TEdificacao 1 // c l a s s e que d e f i n e uma e d i f i c a o 2 unit U Edificacao ; 3 4 interface 5 6 uses 7 S y s U t i l s , Windows , Messages , C l a s s e s , Graphics , C o n t r o l s , 8 Forms , D i a l o g s , Contnrs , U Pavimento , U Comodo , U Objeto , U Limite , G r id s ; 9 10 type 11 T E d i f i c a c a o = c l a s s ( TObject ) 12 private 13 FArq : s t r i n g ; 14 FPavimentos : T O b j e c t L i s t ; 15 PavimentoAtual : TPavimento ; 16 F D i r e i t a : TLimite ; 17 FEsquerda : TLimite ; 18 FFrente : TLimite ; 19 FFundo : TLimite ; 20 FNome : s t r i n g ; 21 Lista : TStringList ; 22 FCargaIncendio : r e a l ; 23 FArea : r e a l ; 24 FEnergia : r e a l ; 25 procedure SetArq ( const Value : s t r i n g ) ; 26 procedure SetPavimentos ( const Value : T O b j e c t L i s t ) ; 27 procedure GetStream ( var ValStream : TMemoryStream ) ; 160 17.17 ANEXO Q 28 29 17 ANEXOS procedure SetStream ( ValStream : TMemoryStream ) ; public 30 c o n s t r u c t o r Create ; 31 d e s t r u c t o r Destroy ; 32 procedure S e t D i r e i t a ( const Value : TLimite ) ; 33 procedure SetEsquerda ( const Value : TLimite ) ; 34 procedure S e t F r e n t e ( const Value : TLimite ) ; 35 procedure SetFundo ( const Value : TLimite ) ; 36 procedure SetNome ( const Value : s t r i n g ) ; 37 procedure I n s e r e P a v i m e n t o ; 38 procedure RemovePavimento ( Pav : S t r i n g ) ; 39 procedure EditaPavimento ( Pav : s t r i n g ) ; 40 procedure InsereComodo ( Pav : S t r i n g ) ; 41 procedure RemoveComodo ( Pav ,Cmd : S t r i n g ) ; 42 procedure EditaComodo ( Pav ,Cmd : S t r i n g ) ; 43 procedure I n s e r e O b j e t o ( Pav ,Cmd : S t r i n g ) ; 44 procedure RemoveObjeto ( Pav ,Cmd, Obj : S t r i n g ) ; 45 procedure E d i t a O b j e t o ( Pav ,Cmd, Obj : S t r i n g ) ; 46 function GetIndPav (Nome : S t r i n g ) : integer ; 47 function NomeValido (Nome : s t r i n g ) : boolean ; 48 procedure S a l v a r ; 49 procedure C a r r e g a r ; 50 procedure ExportaGridPavs ( var Grid : TS tr in gG r id ) ; 51 procedure ExportaGridComodos ( Pav : s t r i n g ; var Grid : TS tr in gG r id ) ; 52 procedure ExportaGridObjetos ( Pav , Cmd : s t r i n g ; Grid : TS tr in gG r id ) ; 53 procedure E x p o r t a L i s t a P a v s ( var x L i s t a : T S t r i n g L i s t ) ; 54 procedure ExportaListaComodos ( Pav : S t r i n g ; var Items : TStringList ) ; 55 procedure ExportaEdi ( var Edi : T E d i f i c a c a o ) ; 161 17.17 ANEXO Q 17 ANEXOS p r o p e r t y Pavimentos : T O b j e c t L i s t read FPavimentos write 56 SetPavimentos ; 57 p r o p e r t y D i r e i t a : TLimite read F D i r e i t a write S e t D i r e i t a ; 58 p r o p e r t y Esquerda : TLimite read FEsquerda write SetEsquerda ; 59 p r o p e r t y F r e n t e : TLimite read FFrente write S e t F r e n t e ; 60 p r o p e r t y Fundo : TLimite read FFundo write SetFundo ; 61 p r o p e r t y Nome : s t r i n g read FNome write SetNome ; 62 p r o p e r t y Arq : s t r i n g read FArq write SetArq ; 63 p r o p e r t y Area : r e a l read FArea ; 64 p r o p e r t y E n e r g i a : r e a l read FEnergia ; 65 p r o p e r t y C a r g a I n c e n d i o : r e a l read FCargaIncendio ; 66 procedure C a l c u l o s ( ) ; end ; 67 68 69 70 implementation 71 72 u s e s U FormPavimento , U FormObjeto ; 73 74 { TEdificacao } 75 76 { 77 ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ T E d i f i c a c a o ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ 78 } 79 c o n s t r u c t o r TEdificacao . Create ; 80 begin 81 Pavimentos := T O b j e c t L i s t . C r e a t e ; 82 F D i r e i t a := TLimite . C r e a t e ; 83 FEsquerda := TLimite . C r e a t e ; 84 FFrente := TLimite . C r e a t e ; 162 17.17 ANEXO Q 17 ANEXOS 85 FFundo := TLimite . C r e a t e ; 86 PavimentoAtual := TPavimento . C r e a t e ; 87 L i s t a := T S t r i n g L i s t . C r e a t e ; 88 end ; 89 90 d e s t r u c t o r T E d i f i c a c a o . Destroy ; var i ,N : integer ; 91 92 begin 93 // N := Pavimentos . Count ; 94 // f or i := 1 to N do 95 // Pavimentos . Items [ i ] . Destroy ; 96 Pavimentos . C l e a r ; 97 Pavimentos . Free ; 98 end ; 99 100 101 102 procedure T E d i f i c a c a o . C a l c u l o s ( ) ; var i : integer ; begin 103 FArea := 0 ; 104 FEnergia := 0 ; 105 f or i := 1 to Pavimentos . Count do begin 106 107 TPavimento ( FPavimentos . Items [ i −1]) . C a l c u l o s ( ) ; 108 FArea := FArea+TPavimento ( FPavimentos . Items [ i −1]) . Area ; 109 FEnergia := FEnergia+TPavimento ( FPavimentos . Items [ i −1]) . Energia ; end ; 110 111 i f FArea > 0 then FCargaIncendio := FEnergia /FArea 112 e l s e FCargaIncendio := −1; 113 end ; 114 163 17.17 ANEXO Q 17 ANEXOS 115 procedure T E d i f i c a c a o . S e t D i r e i t a ( const Value : TLimite ) ; 116 begin 117 118 F D i r e i t a := Value ; end ; 119 120 procedure T E d i f i c a c a o . SetEsquerda ( const Value : TLimite ) ; 121 begin 122 123 FEsquerda := Value ; end ; 124 125 procedure T E d i f i c a c a o . S e t F r e n t e ( const Value : TLimite ) ; 126 begin 127 128 FFrente := Value ; end ; 129 130 procedure T E d i f i c a c a o . SetFundo ( const Value : TLimite ) ; 131 begin 132 133 FFundo := Value ; end ; 134 135 procedure T E d i f i c a c a o . SetNome ( const Value : s t r i n g ) ; 136 begin 137 138 FNome := Value ; end ; 139 140 141 142 143 144 145 procedure T E d i f i c a c a o . ExportaGridPavs ( var Grid : TS tr in gG r id ) ; var l i n : integer ; begin i f FPavimentos . Count > 0 then begin Grid . RowCount := FPavimentos . Count +1; 164 17.17 ANEXO Q 17 ANEXOS 146 Grid . ColCount := 2 ; 147 Grid . C e l l s [ 0 , 0 ] := ’Pavimento ’ ; 148 Grid . C e l l s [ 1 , 0 ] := ’Nome ’ ; 149 f or l i n := 1 to Grid . RowCount−1 do begin 150 151 Grid . C e l l s [ 0 , l i n ] := I n t T o S t r ( l i n ) ; 152 Grid . C e l l s [ 1 , l i n ] := TPavimento ( FPavimentos . Items [ l i n −1]) . Nome ; end ; 153 end ; 154 155 end ; 156 157 procedure T E d i f i c a c a o . ExportaGridComodos ( Pav : s t r i n g ; var Grid : TS tr in gG r id ) ; 158 159 var indPav : integer ; begin 160 indPav := GetIndPav ( Pav ) ; 161 i f indPav > 0 then begin 162 163 PavimentoAtual := TPavimento ( FPavimentos . Items [ indPav −1]) ; 164 PavimentoAtual . ExportaGridComodos ( Grid ) ; end ; 165 166 end ; 167 168 procedure T E d i f i c a c a o . ExportaGridObjetos ( Pav , Cmd: s t r i n g ; Grid : TS tr in gG r id ) ; 169 170 var indPav : integer ; begin 171 indPav := GetIndPav ( Pav ) ; 172 i f indPav > 0 then 173 begin 165 17.17 ANEXO Q 17 ANEXOS 174 PavimentoAtual := TPavimento ( FPavimentos . Items [ indPav −1]) ; 175 PavimentoAtual . ExportaGridObjetos (Cmd, Grid ) ; end ; 176 177 end ; 178 179 180 procedure T E d i f i c a c a o . C a r r e g a r ; var arq : s t r i n g ; MStr : TMemoryStream ; 181 182 begin 183 MStr := TMemoryStream . C r e a t e ; 184 MStr . LoadFromFile ( ’dados\’+FArq+’.str ’ ) ; 185 SetStream ( MStr ) ; 186 MStr . Free ; 187 end ; 188 189 190 procedure T E d i f i c a c a o . S a l v a r ; var arq : s t r i n g ; MStr : TMemoryStream ; 191 192 begin 193 MStr := TMemoryStream . C r e a t e ; 194 GetStream ( MStr ) ; 195 MStr . P o s i t i o n := 0 ; 196 MStr . S av e ToF ile ( ’dados\’+FArq+’.str ’ ) ; 197 MStr . Free ; 198 end ; 199 200 // r e t o r n a uma stream com dados do o b j e t o 201 procedure T E d i f i c a c a o . GetStream ( var ValStream : TMemoryStream ) ; 202 var S t r 1 : TMemoryStream ; 203 L : Int64 ; 204 St : S t r i n g ; 166 17.17 ANEXO Q 205 ch : char ; 206 k ,N : integer ; 17 ANEXOS 207 208 begin 209 S t r 1 := TMemoryStream . C r e a t e ; 210 ValStream . P o s i t i o n := 0 ; 211 212 St := FNome ; 213 L := Length ( St ) ; 214 ValStream . Write (L , S i z e O f (L) ) ; // grava o comprimento da s t r i n g 215 f or k := 1 to L do 216 ValStream . Write ( St [ k ] , S i z e O f (Ch) ) ; // grava a s t r i n g , ch por ch 217 218 St := FArq ; 219 L := Length ( St ) ; 220 ValStream . Write (L , S i z e O f (L) ) ; // grava o comprimento da s t r i n g 221 f or k := 1 to L do 222 ValStream . Write ( St [ k ] , S i z e O f (Ch) ) ; // grava a s t r i n g , ch por ch 223 224 ValStream . Write ( F D i r e i t a . Comprimento , S i z e O f ( F D i r e i t a . Comprimento ) ) ; 225 ValStream . Write ( F D i r e i t a . DistanciaProximo , S i z e O f ( F D i r e i t a . DistanciaProximo ) ) ; 226 227 ValStream . Write ( FEsquerda . Comprimento , S i z e O f ( FEsquerda . Comprimento ) ) ; 228 ValStream . Write ( FEsquerda . DistanciaProximo , S i z e O f ( FEsquerda . DistanciaProximo ) ) ; 229 167 17.17 ANEXO Q 230 17 ANEXOS ValStream . Write ( FFrente . Comprimento , S i z e O f ( FFrente . Comprimento )); 231 ValStream . Write ( FFrente . DistanciaProximo , S i z e O f ( FFrente . DistanciaProximo ) ) ; 232 233 ValStream . Write ( FFundo . Comprimento , S i z e O f ( FFundo . Comprimento ) ) ; 234 ValStream . Write ( FFundo . DistanciaProximo , S i z e O f ( FFundo . DistanciaProximo ) ) ; 235 236 // L i s t a de Pavimentos ; 237 N := FPavimentos . Count ; 238 ValStream . Write (N, S i z e O f (N) ) ; 239 f or k := 1 to N do begin 240 241 TPavimento ( FPavimentos . Items [ k −1]) . GetStream ( S t r 1 ) ; 242 S t r 1 . P o s i t i o n := 0 ; 243 L := S t r 1 . S i z e ; 244 ValStream . Write (L , S i z e O f (L) ) ; 245 ValStream . CopyFrom ( Str1 , L) ; end ; 246 247 248 S t r 1 . Destroy ; 249 250 end ; 251 252 // p r e e n c h e a s p r o p r i e d a d e s do o b j e t o com o s dados r e c e b i d o s de ValStream 253 procedure T E d i f i c a c a o . SetStream ( ValStream : TMemoryStream ) ; 254 var 255 Xr : r e a l ; 168 17.17 ANEXO Q 256 Xc , Ch : char ; 257 N, k : Integer ; 258 Xl : boolean ; 259 L : Int64 ; 260 S t r 1 : TMemoryStream ; 261 St : S t r i n g ; 262 Pav : TPavimento ; 17 ANEXOS 263 264 begin 265 S t r 1 := TMemoryStream . C r e a t e ; 266 ValStream . P o s i t i o n := 0 ; 267 268 ValStream . Read(L , S i z e O f (L) ) ; // l e o comprimento da s t r i n g 269 St := ’’ ; 270 f or k := 1 to L do 271 begin 272 ValStream . Read(Ch , S i z e O f (Ch) ) ; // l e a s t r i n g 273 St := St+ch ; 274 275 end ; FNome := St ; 276 277 ValStream . Read(L , S i z e O f (L) ) ; // l e o comprimento da s t r i n g 278 St := ’’ ; 279 f or k := 1 to L do 280 begin 281 ValStream . Read(Ch , S i z e O f (Ch) ) ; // l e a s t r i n g 282 St := St+ch ; 283 284 end ; FArq := St ; 285 286 ValStream . Read( Xr , S i z e O f ( Xr ) ) ; 169 17.17 ANEXO Q 17 ANEXOS 287 F D i r e i t a . Comprimento := Xr ; 288 ValStream . Read( Xr , S i z e O f ( Xr ) ) ; 289 F D i r e i t a . D i s t a n c i a P r o x i m o := Xr ; 290 291 ValStream . Read( Xr , S i z e O f ( Xr ) ) ; 292 FEsquerda . Comprimento := Xr ; 293 ValStream . Read( Xr , S i z e O f ( Xr ) ) ; 294 FEsquerda . D i s t a n c i a P r o x i m o := Xr ; 295 296 ValStream . Read( Xr , S i z e O f ( Xr ) ) ; 297 FFrente . Comprimento := Xr ; 298 ValStream . Read( Xr , S i z e O f ( Xr ) ) ; 299 FFrente . D i s t a n c i a P r o x i m o := Xr ; 300 301 ValStream . Read( Xr , S i z e O f ( Xr ) ) ; 302 FFundo . Comprimento := Xr ; 303 ValStream . Read( Xr , S i z e O f ( Xr ) ) ; 304 FFundo . D i s t a n c i a P r o x i m o := Xr ; 305 306 // L i s t a de Pavimentos ; 307 ValStream . Read(N, S i z e O f (N) ) ; 308 f or k := 1 to N do 309 begin 310 ValStream . Read(L , S i z e O f (L) ) ; 311 Str1 . Position :=0; 312 S t r 1 . CopyFrom ( ValStream , L) ; 313 Pav := TPavimento . c r e a t e ; 314 Pav . SetStream ( S t r 1 ) ; 315 FPavimentos . Add( Pav ) ; 316 L i s t a . Add( Pav . Nome) ; 317 end ; 170 17.17 ANEXO Q 318 319 17 ANEXOS S t r 1 . Destroy ; end ; 320 321 procedure T E d i f i c a c a o . SetArq ( const Value : s t r i n g ) ; 322 begin 323 324 FArq := Value ; end ; 325 326 procedure T E d i f i c a c a o . SetPavimentos ( const Value : T O b j e c t L i s t ) ; 327 begin 328 329 FPavimentos := Value ; end ; 330 331 332 function T E d i f i c a c a o . GetIndPav (Nome : S t r i n g ) : integer ; var i n d : integer ; ok : boolean ; 333 334 begin 335 ok := f a l s e ; 336 i f ( FPavimentos . Count > 0 ) then begin 337 338 i n d := −1; 339 repeat 340 inc ( ind ) ; 341 ok := ( i n d < FPavimentos . Count ) ; u n t i l not ( ok ) or ( L i s t a [ i n d ] = Nome) ; 342 end ; 343 344 i f ok then r e s u l t := i n d+1 345 e l s e r e s u l t := −1; 346 end ; 347 348 function T E d i f i c a c a o . NomeValido (Nome : s t r i n g ) : boolean ; 171 17.17 ANEXO Q 349 var ok : boolean ; i : integer ; 350 351 17 ANEXOS begin 352 ok := true ; 353 f or i := 1 to FPavimentos . Count do i f ( L i s t a [ i −1] = Nome) then ok := f a l s e ; 354 355 356 r e s u l t := ok ; end ; 357 358 procedure T E d i f i c a c a o . E x p o r t a L i s t a P a v s ( var x L i s t a : T S t r i n g L i s t ) ; 359 begin 360 361 x L i s t a := L i s t a ; end ; 362 363 procedure T E d i f i c a c a o . ExportaListaComodos ( Pav : S t r i n g ; var Items : TStringList ) ; 364 365 var indPav : integer ; begin 366 indPav := GetIndPav ( Pav ) ; 367 i f indPav > 0 then begin 368 369 PavimentoAtual := TPavimento ( FPavimentos . Items [ indPav −1]) ; 370 PavimentoAtual . ExportaListaComodos ( Items ) ; end ; 371 372 end ; 373 374 375 procedure T E d i f i c a c a o . I n s e r e P a v i m e n t o ; 376 var 377 Nome : s t r i n g ; 378 Pavx : TPavimento ; 172 17.17 ANEXO Q 379 17 ANEXOS begin 380 Pavx := TPavimento . c r e a t e ; 381 Pavx . Nome := ’’ ; 382 Pavx . P e D i r e i t o := 0 ; 383 Pavx . Largura := F r e n t e . Comprimento ; 384 Pavx . P r o f u n d i d a d e := Esquerda . Comprimento ; 385 i f FormPavimento . MyShowModal ( Pavx , L i s t a , −1) then begin 386 387 Pavimentos . Add( Pavx ) ; 388 L i s t a . Add( Pavx . Nome) ; end ; 389 390 end ; 391 392 procedure T E d i f i c a c a o . InsereComodo ( Pav : S t r i n g ) ; 393 var 394 395 indP : integer ; begin 396 indP := GetIndPav ( Pav ) ; 397 i f indP >= 0 then begin 398 399 PavimentoAtual := TPavimento ( Pavimentos [ indP −1]) ; 400 PavimentoAtual . InsereComodo ; 401 Pavimentos [ indP −1] := PavimentoAtual ; end ; 402 403 end ; 404 405 procedure T E d i f i c a c a o . I n s e r e O b j e t o ( Pav , Cmd: S t r i n g ) ; 406 var 407 408 409 indP : integer ; begin indP := GetIndPav ( Pav ) ; 173 17.17 ANEXO Q 410 17 ANEXOS i f indP >= 0 then begin 411 412 PavimentoAtual := TPavimento ( Pavimentos [ indP −1]) ; 413 PavimentoAtual . I n s e r e O b j e t o (Cmd) ; 414 Pavimentos [ indP −1] := PavimentoAtual ; end ; 415 416 end ; 417 418 procedure T E d i f i c a c a o . EditaPavimento ( Pav : s t r i n g ) ; 419 var 420 421 indP : integer ; begin 422 indP := GetIndPav ( Pav ) ; 423 i f indP >= 0 then begin 424 425 PavimentoAtual := TPavimento ( Pavimentos . Items [ indP −1]) ; 426 i f FormPavimento . MyShowModal ( PavimentoAtual , L i s t a , indP ) then begin 427 428 Pavimentos . Items [ indP −1] := PavimentoAtual ; 429 L i s t a [ indP −1] := PavimentoAtual . Nome ; end ; 430 end ; 431 432 end ; 433 434 procedure T E d i f i c a c a o . EditaComodo ( Pav , Cmd: S t r i n g ) ; 435 var 436 437 indP : integer ; begin 438 indP := GetIndPav ( Pav ) ; 439 i f indP >= 0 then 174 17.17 ANEXO Q 17 ANEXOS begin 440 441 PavimentoAtual := TPavimento ( Pavimentos . Items [ indP −1]) ; 442 PavimentoAtual . EditaComodo (Cmd) ; 443 Pavimentos . Items [ indP −1] := PavimentoAtual ; end ; 444 445 end ; 446 447 procedure T E d i f i c a c a o . E d i t a O b j e t o ( Pav , Cmd, Obj : S t r i n g ) ; 448 var 449 450 indP : integer ; begin 451 indP := GetIndPav ( Pav ) ; 452 i f indP >= 0 then begin 453 454 PavimentoAtual := TPavimento ( Pavimentos . Items [ indP −1]) ; 455 PavimentoAtual . E d i t a O b j e t o (Cmd, Obj ) ; 456 Pavimentos . Items [ indP −1] := PavimentoAtual ; end ; 457 458 end ; 459 460 461 462 procedure T E d i f i c a c a o . RemovePavimento ( Pav : S t r i n g ) ; var i n d : integer ; begin 463 i n d := GetindPav ( Pav ) ; 464 i f MessageDlg ( ’Confirma Eliminacao do Pavimento: ’+Pav+’?’ , mtWarning , [ mbYes , mbNo ] , 0 ) = 6 then 465 466 i f ( i n d >= 0 ) then begin 467 FPavimentos . Remove ( TPavimento ( FPavimentos . Items [ ind −1]) ) ; 468 L i s t a . D e l e t e ( ind −1) ; 469 end ; 175 17.17 ANEXO Q 470 17 ANEXOS end ; 471 472 procedure T E d i f i c a c a o . RemoveComodo ( Pav , Cmd: S t r i n g ) ; 473 var 474 475 indP : integer ; begin 476 indP := GetIndPav ( Pav ) ; 477 i f indP >= 0 then begin 478 479 PavimentoAtual := TPavimento ( Pavimentos . Items [ indP −1]) ; 480 PavimentoAtual . RemoveComodo (Cmd) ; 481 Pavimentos . Items [ indP −1] := PavimentoAtual ; end ; 482 483 end ; 484 485 procedure T E d i f i c a c a o . RemoveObjeto ( Pav , Cmd, Obj : S t r i n g ) ; 486 var 487 488 indP : integer ; begin 489 indP := GetIndPav ( Pav ) ; 490 i f indP >= 0 then begin 491 492 PavimentoAtual := TPavimento ( Pavimentos . Items [ indP −1]) ; 493 PavimentoAtual . RemoveObjeto (Cmd, Obj ) ; 494 Pavimentos . Items [ indP −1] := PavimentoAtual ; end ; 495 496 end ; 497 498 procedure T E d i f i c a c a o . ExportaEdi ( var Edi : T E d i f i c a c a o ) ; 499 begin 500 Edi := T E d i f i c a c a o . C r e a t e ; 176 17.17 ANEXO Q 501 17 ANEXOS end ; 502 503 end . 177 17.18 ANEXO R 17.18 17 ANEXOS ANEXO R Listagem 6: Código para a classe TPavimento 1 u n i t U Pavimento ; 2 3 interface 4 5 uses 6 S y s U t i l s , Windows , Messages , C l a s s e s , Graphics , C o n t r o l s , 7 Forms , D i a l o g s , Contnrs , U Comodo , G r id s ; 8 9 type 10 TPavimento = c l a s s ( TObject ) 11 private 12 FNome : s t r i n g ; 13 FComodos : T O b j e c t L i s t ; 14 FPeDireito : real ; 15 FProximoY : r e a l ; 16 FProximaLargura : r e a l ; 17 FProximaProfundidade : r e a l ; 18 FProximoX : r e a l ; 19 FLargura : r e a l ; 20 FProfundidade : r e a l ; 21 Lista : TStringList ; 22 ComodoAtual : TComodo ; 23 FCargaIncendio : r e a l ; 24 FArea : r e a l ; 25 FEnergia : r e a l ; 26 procedure SetComodos ( const Value : T O b j e c t L i s t ) ; 27 procedure S e t P e D i r e i t o ( const Value : r e a l ) ; 28 procedure S e t L a r g u r a ( const Value : r e a l ) ; 178 17.18 ANEXO R 29 30 17 ANEXOS procedure S e t P r o f u n d i d a d e ( const Value : r e a l ) ; public 31 c o n s t r u c t o r Create ; 32 d e s t r u c t o r Destroy ; 33 function NomeValido (Nome : s t r i n g ) : boolean ; 34 function GetIndComodo (Nome : S t r i n g ) : integer ; 35 function ProximoComodo ( ) : boolean ; // busca c o o r d e n a d a s do proximo comodo p o s s i v e l ( v a z i o na p l a n t a ) 36 procedure InsereComodo ; 37 procedure EditaComodo (Cmd : S t r i n g ) ; 38 procedure RemoveComodo (Cmd : S t r i n g ) ; 39 procedure I n s e r e O b j e t o (Cmd : S t r i n g ) ; 40 procedure E d i t a O b j e t o (Cmd, Obj : S t r i n g ) ; 41 procedure RemoveObjeto (Cmd, Obj : S t r i n g ) ; 42 procedure ExportaGridComodos ( var Grid : TS tr in gG r id ) ; 43 procedure ExportaGridObjetos (Cmd: s t r i n g ; var Grid : TS tr in gG r id ) ; 44 procedure ExportaListaComodos ( var Items : T S t r i n g L i s t ) ; 45 procedure GetStream ( var ValStream : TMemoryStream ) ; 46 procedure SetStream ( ValStream : TMemoryStream ) ; 47 p r o p e r t y Nome : s t r i n g read FNome write FNome ; 48 p r o p e r t y P e D i r e i t o : r e a l read F P e D i r e i t o write S e t P e D i r e i t o ; 49 p r o p e r t y Largura : r e a l read FLargura write S e t L a r g u r a ; 50 p r o p e r t y P r o f u n d i d a d e : r e a l read FProfundidade write SetProfundidade ; 51 p r o p e r t y Comodos : T O b j e c t L i s t read FComodos write SetComodos ; 52 p r o p e r t y ProximoX : r e a l read FProximoX ; // proxima coordenada v a z i a para um comodo 53 p r o p e r t y ProximoY : r e a l read FProximoY ; 179 17.18 ANEXO R 17 ANEXOS 54 p r o p e r t y ProximaLargura : r e a l read FProximaLargura ; 55 p r o p e r t y ProximaProfundidade : r e a l read FProximaProfundidade ; 56 p r o p e r t y Area : r e a l read FArea ; 57 p r o p e r t y E n e r g i a : r e a l read FEnergia ; 58 p r o p e r t y C a r g a I n c e n d i o : r e a l read FCargaIncendio ; 59 procedure C a l c u l o s ( ) ; 60 end ; 61 62 63 64 65 implementation 66 67 u s e s U FormComodo ; 68 69 { 70 ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ TPavimento ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ 71 } 72 c o n s t r u c t o r TPavimento . C r e a t e ; 73 begin 74 FComodos := T o b j e c t L i s t . C r e a t e ; 75 L i s t a := T S t r i n g L i s t . C r e a t e ; 76 ComodoAtual := TComodo . C r e a t e ; 77 end ; 78 79 d e s t r u c t o r TPavimento . Destroy ; 80 begin 81 82 FComodos . Free ; end ; 83 180 17.18 ANEXO R 84 85 86 17 ANEXOS procedure TPavimento . ExportaGridComodos ( var Grid : TS tr in gG r id ) ; var l i n : integer ; begin 87 Grid . ColCount := 3 ; 88 Grid . C e l l s [ 0 , 0 ] := ’Comodo ’ ; 89 Grid . C e l l s [ 1 , 0 ] := ’Nome ’ ; 90 Grid . C e l l s [ 2 , 0 ] := ’Especialidade ’ ; 91 i f FComodos . Count > 0 then begin 92 93 Grid . RowCount := FComodos . Count +1; 94 f or l i n := 1 to Grid . RowCount−1 do begin 95 96 Grid . C e l l s [ 0 , l i n ] := I n t T o S t r ( l i n ) ; 97 Grid . C e l l s [ 1 , l i n ] := TComodo( FComodos . Items [ l i n −1]) . Nome ; Grid . C e l l s [ 2 , l i n ] := TComodo( FComodos . Items [ l i n −1]) . 98 Ocupacao . e s p e c i a l i d a d e ; end ; 99 end 100 101 else begin 102 103 Grid . RowCount := 2 ; 104 Grid . C e l l s [ 0 , 1 ] := ’’ ; 105 Grid . C e l l s [ 1 , 1 ] := ’’ ; 106 Grid . C e l l s [ 2 , 1 ] := ’’ ; end ; 107 108 end ; 109 110 procedure TPavimento . ExportaGridObjetos (Cmd: s t r i n g ; var Grid : TS tr in gG r id ) ; 111 var indC : integer ; 181 17.18 ANEXO R 112 17 ANEXOS begin 113 indC := GetindComodo (Cmd) ; 114 i f ( indC >= 0 ) then begin 115 116 ComodoAtual := TComodo( Comodos [ indC −1]) ; 117 ComodoAtual . ExportaGridObjetos ( Grid ) ; end ; 118 119 end ; 120 121 procedure TPavimento . InsereComodo ; 122 var 123 Nome : s t r i n g ; 124 Comx : TComodo ; 125 begin 126 Comx := TComodo . c r e a t e ; 127 Comx . Nome := ’’ ; 128 Comx . A l t u r a := F P e D i r e i t o ; 129 Comx . Largura := FLargura ; 130 Comx . P r o f u n d i d a d e := FProfundidade ; 131 i f FormComodo . MyShowModal (Comx , L i s t a , −1) then begin 132 133 Comodos . Add(Comx) ; 134 L i s t a . Add(Comx . Nome) ; end ; 135 136 end ; 137 138 139 140 procedure TPavimento . EditaComodo (Cmd: S t r i n g ) ; var indC : integer ; begin 141 indC := GetindComodo (Cmd) ; 142 i f ( indC >= 0 ) then 182 17.18 ANEXO R 17 ANEXOS begin 143 144 ComodoAtual := TComodo( Comodos [ indC −1]) ; 145 i f FormComodo . MyShowModal ( ComodoAtual , L i s t a , indC ) then begin 146 147 Comodos [ indC −1] := ComodoAtual ; 148 L i s t a [ indC −1] := ComodoAtual . Nome ; end ; 149 end ; 150 151 end ; 152 153 154 155 procedure TPavimento . RemoveComodo (Cmd: S t r i n g ) ; var indC : integer ; begin 156 indC := GetindComodo (Cmd) ; 157 i f MessageDlg ( ’Confirma Eliminacao do Comodo: ’+Cmd+’?’ , mtWarning , [ mbYes , mbNo ] , 0 ) = 6 then 158 i f ( indC >= 0 ) then begin 159 160 Comodos . Remove ( FComodos . Items [ indC −1]) ; 161 L i s t a . D e l e t e ( indC −1) ; end ; 162 163 end ; 164 165 166 167 procedure TPavimento . I n s e r e O b j e t o (Cmd: S t r i n g ) ; var indC : integer ; begin 168 indC := GetindComodo (Cmd) ; 169 i f ( indC >= 0 ) then 170 begin 171 ComodoAtual := TComodo( Comodos [ indC −1]) ; 172 ComodoAtual . I n s e r e O b j e t o ; 183 17.18 ANEXO R Comodos [ indC −1] := ComodoAtual ; 173 end ; 174 175 17 ANEXOS end ; 176 177 178 179 procedure TPavimento . E d i t a O b j e t o (Cmd, Obj : S t r i n g ) ; var indC : integer ; begin 180 indC := GetindComodo (Cmd) ; 181 i f ( indC >= 0 ) then begin 182 183 ComodoAtual := TComodo( Comodos [ indC −1]) ; 184 ComodoAtual . E d i t a O b j e t o ( Obj ) ; 185 Comodos [ indC −1] := ComodoAtual ; end ; 186 187 end ; 188 189 190 191 procedure TPavimento . RemoveObjeto (Cmd, Obj : S t r i n g ) ; var indC : integer ; begin 192 indC := GetindComodo (Cmd) ; 193 i f ( indC >= 0 ) then begin 194 195 ComodoAtual := TComodo( Comodos [ indC −1]) ; 196 ComodoAtual . RemoveObjeto ( Obj ) ; 197 Comodos [ indC −1] := ComodoAtual ; end ; 198 199 end ; 200 201 // r e t o r n a uma stream com dados do o b j e t o 202 procedure TPavimento . GetStream ( var ValStream : TMemoryStream ) ; 203 var S t r 1 : TMemoryStream ; 184 17.18 ANEXO R 204 L : Int64 ; 205 St : S t r i n g ; 206 ch : char ; 207 k ,N : integer ; 17 ANEXOS 208 209 begin 210 S t r 1 := TMemoryStream . C r e a t e ; 211 ValStream . P o s i t i o n := 0 ; 212 213 St := FNome ; 214 L := Length ( St ) ; 215 ValStream . Write (L , S i z e O f (L) ) ; // grava o comprimento da s t r i n g 216 f or k := 1 to L do 217 ValStream . Write ( St [ k ] , S i z e O f (Ch) ) ; // grava a s t r i n g , ch por ch 218 219 ValStream . Write ( FPeDireito , S i z e O f ( F P e D i r e i t o ) ) ; 220 ValStream . Write ( FLargura , S i z e O f ( FLargura ) ) ; 221 ValStream . Write ( FProfundidade , S i z e O f ( FProfundidade ) ) ; 222 223 // L i s t a de Comodos ; 224 N := FComodos . Count ; 225 ValStream . Write (N, S i z e O f (N) ) ; 226 f or k := 1 to N do 227 begin 228 TComodo( FComodos . Items [ k −1]) . GetStream ( S t r 1 ) ; 229 S t r 1 . P o s i t i o n := 0 ; 230 L := S t r 1 . S i z e ; 231 ValStream . Write (L , S i z e O f (L) ) ; 232 ValStream . CopyFrom ( Str1 , L) ; 233 end ; 185 17.18 ANEXO R 17 ANEXOS 234 235 236 S t r 1 . Destroy ; end ; 237 238 // p r e e n c h e a s p r o p r i e d a d e s do o b j e t o com o s dados r e c e b i d o s de ValStream 239 procedure TPavimento . SetStream ( ValStream : TMemoryStream ) ; 240 var 241 Xr : r e a l ; 242 Xc , Ch : char ; 243 N, k : Integer ; 244 Xl : boolean ; 245 L : Int64 ; 246 S t r 1 : TMemoryStream ; 247 St : S t r i n g ; 248 Comodo : TComodo ; 249 250 begin 251 S t r 1 := TMemoryStream . C r e a t e ; 252 ValStream . P o s i t i o n := 0 ; 253 254 ValStream . Read(L , S i z e O f (L) ) ; // l e o comprimento da s t r i n g 255 St := ’’ ; 256 f or k := 1 to L do 257 begin 258 ValStream . Read(Ch , S i z e O f (Ch) ) ; // l e a s t r i n g 259 St := St+ch ; 260 261 end ; FNome := St ; 262 263 ValStream . Read( Xr , S i z e O f ( Xr ) ) ; 186 17.18 ANEXO R 17 ANEXOS 264 F P e D i r e i t o := Xr ; 265 ValStream . Read( Xr , S i z e O f ( Xr ) ) ; 266 FLargura := Xr ; 267 ValStream . Read( Xr , S i z e O f ( Xr ) ) ; 268 FProfundidade := Xr ; 269 270 // L i s t a de Comodos ; 271 ValStream . Read(N, S i z e O f (N) ) ; 272 f or k := 1 to N do begin 273 274 ValStream . Read(L , S i z e O f (L) ) ; 275 Str1 . Position :=0; 276 S t r 1 . CopyFrom ( ValStream , L) ; 277 Comodo := TComodo . c r e a t e ; 278 Comodo . SetStream ( S t r 1 ) ; 279 FComodos . Add( Comodo ) ; 280 L i s t a . Add( Comodo . Nome) ; end ; 281 282 283 284 S t r 1 . Destroy ; end ; 285 286 procedure TPavimento . SetComodos ( const Value : T O b j e c t L i s t ) ; 287 begin 288 289 FComodos := Value ; end ; 290 291 292 function TPavimento . GetIndComodo (Nome : S t r i n g ) : integer ; var i n d : integer ; ok : boolean ; 293 294 begin 187 17.18 ANEXO R 295 ok := f a l s e ; 296 i f ( FComodos . Count > 0 ) then 17 ANEXOS begin 297 298 i n d := −1; 299 repeat 300 inc ( ind ) ; 301 ok := ( i n d < FComodos . Count ) ; u n t i l not ( ok ) or ( L i s t a [ i n d ] = Nome) ; 302 end ; 303 304 i f ok then r e s u l t := i n d+1 305 e l s e r e s u l t := −1; 306 end ; 307 308 309 function TPavimento . NomeValido (Nome : s t r i n g ) : boolean ; var ok : boolean ; i : integer ; 310 311 begin 312 ok := true ; 313 f or i := 1 to L i s t a . Count do begin 314 i f ( L i s t a [ i −1] = Nome) then ok := f a l s e ; 315 end ; 316 317 318 r e s u l t := ok ; end ; 319 320 procedure TPavimento . S e t P e D i r e i t o ( const Value : r e a l ) ; 321 begin 322 323 F P e D i r e i t o := Value ; end ; 324 325 function TPavimento . ProximoComodo : boolean ; 188 17.18 ANEXO R 326 17 ANEXOS var i : integer ; 327 xComodo , yComodo : TComodo ; 328 auxX , auxY : r e a l ; 329 begin 330 i := 0 ; 331 FProximoX := −1; 332 FProximoY := −1; 333 FProximaLargura := −1; 334 FProximaProfundidade := −1; 335 i f FComodos . Count > 0 then 336 337 begin repeat 338 xComodo := TComodo . C r e a t e ; 339 xComodo := TComodo( FComodos . Items [ i ] ) ; 340 auxX := xComodo . PosX+xComodo . Largura ; // x maximo do comodo 341 auxY := xComodo . PosY+xComodo . P r o f u n d i d a d e ; // y maximo do comodo 342 343 i f auxX < Largura then // cabe na l a r g u r a do pavimento begin 344 // v e r i f i c a s e nao e s t a d e n t r o do proximo comodo 345 yComodo := TComodo . C r e a t e ; 346 i f ( i +1) < FComodos . Count then // s e a i n d a e x i s t e m comodos 347 begin 348 yComodo := TComodo( FComodos . Items [ i +1]) ; 349 i f not ( yComodo . Dentro ( auxX , auxY ) ) then FProximoX := auxX ; 350 351 352 yComodo . Free ; end e l s e FProximoX := auxX ; 189 17.18 ANEXO R 17 ANEXOS end ; 353 i f auxY < P r o f u n d i d a d e then // cabe na p r o f u n d i d a d e do 354 pavimento begin 355 356 // v e r i f i c a s e nao e s t a d e n t r o do proximo comodo 357 yComodo := TComodo . C r e a t e ; 358 i f ( i +1) < FComodos . Count then // s e a i n d a e x i s t e m comodos begin 359 360 yComodo := TComodo( FComodos . Items [ i +1]) ; 361 i f not ( yComodo . Dentro ( auxX , auxY ) ) then FProximoY := auxY ; yComodo . Free ; 362 end 363 e l s e FProximoY := auxY ; 364 end ; 365 366 xComodo . Free ; 367 inc ( i ) ; u n t i l ( i >= FComodos . Count ) ; 368 end ; 369 370 i f FProximoX > 0 then FProximaLargura := Largura−FProximoX ; 371 i f FProximoY > 0 then FProximaProfundidade := Profundidade− FProximoY ; 372 end ; 373 374 procedure TPavimento . S e t L a r g u r a ( const Value : r e a l ) ; 375 begin 376 377 FLargura := Value ; end ; 378 379 procedure TPavimento . S e t P r o f u n d i d a d e ( const Value : r e a l ) ; 190 17.18 ANEXO R 380 381 382 17 ANEXOS begin FProfundidade := Value ; end ; 383 384 procedure TPavimento . ExportaListaComodos ( var Items : T S t r i n g L i s t ) ; 385 386 387 begin Items := L i s t a ; end ; 388 389 390 391 procedure TPavimento . C a l c u l o s ; var i : integer ; begin 392 FArea := 0 ; 393 FEnergia := 0 ; 394 f or i := 1 to Comodos . Count do begin 395 396 TComodo( Comodos . Items [ i −1]) . C a l c u l o s ( ) ; 397 FArea := FArea+TComodo( Comodos . Items [ i −1]) . Area ; 398 FEnergia := FEnergia+TComodo( Comodos . Items [ i −1]) . E n e r g i a ; end ; 399 400 i f FArea > 0 then FCargaIncendio := FEnergia /FArea 401 e l s e FCargaIncendio := −1; 402 end ; 403 404 end . 191 17.19 ANEXO S 17.19 17 ANEXOS ANEXO S Listagem 7: Código para a classe TComodo 1 u n i t U Comodo ; 2 3 interface 4 5 uses 6 S y s U t i l s , Windows , Messages , C l a s s e s , Graphics , C o n t r o l s , 7 Forms , D i a l o g s , Contnrs , U Objeto , G r id s ; 8 9 10 type TOcupacao = record 11 Tipo : S t r i n g [ 5 0 ] ; 12 Especialidade : String [ 5 0 ] ; 13 q f i : Real ; 14 end ; 15 16 TComodo = c l a s s ( TObject ) 17 private 18 FNome : s t r i n g ; 19 FPosX : Real ; 20 FPosY : Real ; 21 FAltura : Real ; 22 FLargura : Real ; 23 FProfundidade : Real ; 24 FObjetos : T O b j e c t L i s t ; 25 FOcupacao : TOcupacao ; 26 Lista : TStringList ; 27 ObjetoAtual : TObjeto ; 28 FCargaIncendio : r e a l ; 192 17.19 ANEXO S 17 ANEXOS 29 FArea : r e a l ; 30 FEnergia : r e a l ; 31 procedure S e t A l t u r a ( const Value : Real ) ; 32 procedure S e t L a r g u r a ( const Value : Real ) ; 33 procedure SetPosX ( const Value : Real ) ; 34 procedure SetPosY ( const Value : Real ) ; 35 procedure S e t P r o f u n d i d a d e ( const Value : Real ) ; 36 procedure S e t O b j e t o s ( const Value : T O b j e c t L i s t ) ; 37 function C a l c C a r g a I n c e n d i o O b j : r e a l ; 38 function CalcCargaIncendioOcup : r e a l ; 39 procedure SetArea ( const Value : r e a l ) ; 40 procedure S e t C a r g a I n c e n d i o ( const Value : r e a l ) ; 41 procedure S e t E n e r g i a ( const Value : r e a l ) ; 42 public 43 c o n s t r u c t o r Create ; 44 d e s t r u c t o r Destroy ; 45 p r o p e r t y Nome : s t r i n g read FNome write FNome ; 46 function NomeValido (Nome : s t r i n g ) : boolean ; 47 p r o p e r t y A l t u r a : Real read FAltura write S e t A l t u r a ; 48 p r o p e r t y Largura : Real read FLargura write S e t L a r g u r a ; 49 p r o p e r t y P r o f u n d i d a d e : Real read FProfundidade write SetProfundidade ; 50 p r o p e r t y PosX : Real read FPosX write SetPosX ; 51 p r o p e r t y PosY : Real read FPosY write SetPosY ; 52 procedure SetOcupacao ( const Value : TOcupacao ) ; 53 p r o p e r t y Ocupacao : TOcupacao read FOcupacao write SetOcupacao ; 54 p r o p e r t y O b j e t o s : T O b j e c t L i s t read FObjetos write SetObjetos ; 55 procedure I n s e r e O b j e t o ; 56 procedure E d i t a O b j e t o ( Obj : S t r i n g ) ; 193 17.19 ANEXO S 17 ANEXOS 57 procedure Removeobjeto ( Obj : S t r i n g ) ; 58 function GetIndObjeto (Nome : S t r i n g ) : integer ; 59 procedure ExportaGridObjetos ( var Grid : TS tr in gG r id ) ; 60 procedure GetStream ( var ValStream : TMemoryStream ) ; 61 procedure SetStream ( ValStream : TMemoryStream ) ; 62 function Dentro ( x , y : r e a l ) : boolean ; 63 p r o p e r t y Area : r e a l read FArea write SetArea ; 64 p r o p e r t y E n e r g i a : r e a l read FEnergia write S e t E n e r g i a ; 65 p r o p e r t y C a r g a I n c e n d i o : r e a l read FCargaIncendio write SetCargaIncendio ; procedure C a l c u l o s ( ) ; 66 67 end ; 68 69 70 implementation 71 72 u s e s U FormObjeto ; 73 74 { TComodo } 75 76 { 77 ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ TComodo ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ 78 } 79 c o n s t r u c t o r TComodo . C r e a t e ; 80 begin 81 FNome := ’’ ; 82 FAltura := 0 ; 83 FLargura := 0 ; 84 FProfundidade := 0 ; 85 FPosX := 0 ; 194 17.19 ANEXO S 17 ANEXOS 86 FPosY := 0 ; 87 FOcupacao . Tipo := ’’ ; 88 FOcupacao . E s p e c i a l i d a d e := ’’ ; 89 FOcupacao . q f i := 0 ; 90 O b j e t o s := T o b j e c t L i s t . C r e a t e ; 91 L i s t a := T S t r i n g L i s t . C r e a t e ; 92 ObjetoAtual := TObjeto . C r e a t e ; 93 end ; 94 95 d e s t r u c t o r TComodo . Destroy ; 96 begin 97 Objetos . Clear ; 98 O b j e t o s . Free ; 99 end ; 100 101 102 procedure TComodo . GetStream ( var ValStream : TMemoryStream ) ; var S t r 1 : TMemoryStream ; 103 L : Int64 ; 104 St : S t r i n g ; 105 ch : char ; 106 k ,N : integer ; 107 108 begin 109 S t r 1 := TMemoryStream . C r e a t e ; 110 ValStream . P o s i t i o n := 0 ; 111 112 St := FNome ; 113 L := Length ( St ) ; 114 ValStream . Write (L , S i z e O f (L) ) ; // grava o comprimento da s t r i n g 115 f or k := 1 to L do 195 17.19 ANEXO S 116 17 ANEXOS ValStream . Write ( St [ k ] , S i z e O f (Ch) ) ; // grava a s t r i n g , ch por ch 117 118 ValStream . Write ( FAltura , S i z e O f ( FAltura ) ) ; 119 ValStream . Write ( FLargura , S i z e O f ( FLargura ) ) ; 120 ValStream . Write ( FProfundidade , S i z e O f ( FProfundidade ) ) ; 121 ValStream . Write ( FPosX , S i z e O f ( FPosX ) ) ; 122 ValStream . Write ( FPosY , S i z e O f ( FPosY ) ) ; 123 124 St := FOcupacao . Tipo ; 125 L := Length ( St ) ; 126 ValStream . Write (L , S i z e O f (L) ) ; // grava o comprimento da s t r i n g 127 f or k := 1 to L do 128 ValStream . Write ( St [ k ] , S i z e O f (Ch) ) ; // grava a s t r i n g , ch por ch 129 St := FOcupacao . E s p e c i a l i d a d e ; 130 L := Length ( St ) ; 131 ValStream . Write (L , S i z e O f (L) ) ; // grava o comprimento da s t r i n g 132 f or k := 1 to L do 133 ValStream . Write ( St [ k ] , S i z e O f (Ch) ) ; // grava a s t r i n g , ch por ch 134 ValStream . Write ( FOcupacao . q f i , S i z e O f ( FOcupacao . q f i ) ) ; 135 136 // L i s t a de o b j e t o s 137 N := FObjetos . Count ; 138 ValStream . Write (N, S i z e O f (N) ) ; 139 f or k := 1 to N do 140 begin 141 TObjeto ( FObjetos . Items [ k −1]) . GetStream ( S t r 1 ) ; 142 S t r 1 . P o s i t i o n := 0 ; 143 L := S t r 1 . S i z e ; 196 17.19 ANEXO S 17 ANEXOS 144 ValStream . Write (L , S i z e O f (L) ) ; 145 ValStream . CopyFrom ( Str1 , L) ; end ; 146 147 148 S t r 1 . Destroy ; 149 150 end ; 151 152 procedure TComodo . SetStream ( ValStream : TMemoryStream ) ; 153 var 154 Xr : r e a l ; 155 Ch : char ; 156 k ,N : Integer ; 157 L : Int64 ; 158 S t r 1 : TMemoryStream ; 159 St : S t r i n g ; 160 Objeto : TObjeto ; 161 162 begin 163 S t r 1 := TMemoryStream . C r e a t e ; 164 ValStream . P o s i t i o n := 0 ; 165 166 ValStream . Read(L , S i z e O f (L) ) ; // l e o comprimento da s t r i n g 167 St := ’’ ; 168 f or k := 1 to L do 169 begin 170 ValStream . Read(Ch , S i z e O f (Ch) ) ; // l e a s t r i n g 171 St := St+ch ; 172 173 end ; FNome := St ; 174 197 17.19 ANEXO S 17 ANEXOS 175 ValStream . Read( Xr , S i z e O f ( Xr ) ) ; 176 FAltura := Xr ; 177 ValStream . Read( Xr , S i z e O f ( Xr ) ) ; 178 FLargura := Xr ; 179 ValStream . Read( Xr , S i z e O f ( Xr ) ) ; 180 FProfundidade := Xr ; 181 ValStream . Read( Xr , S i z e O f ( Xr ) ) ; 182 FPosX := Xr ; 183 ValStream . Read( Xr , S i z e O f ( Xr ) ) ; 184 FPosY := Xr ; 185 186 ValStream . Read(L , S i z e O f (L) ) ; // l e o comprimento da s t r i n g 187 St := ’’ ; 188 f or k := 1 to L do 189 begin 190 ValStream . Read(Ch , S i z e O f (Ch) ) ; // l e a s t r i n g 191 St := St+ch ; 192 end ; 193 FOcupacao . Tipo := St ; 194 ValStream . Read(L , S i z e O f (L) ) ; // l e o comprimento da s t r i n g 195 St := ’’ ; 196 f or k := 1 to L do 197 begin 198 ValStream . Read(Ch , S i z e O f (Ch) ) ; // l e a s t r i n g 199 St := St+ch ; 200 end ; 201 FOcupacao . E s p e c i a l i d a d e := St ; 202 ValStream . Read( Xr , S i z e O f ( Xr ) ) ; 203 FOcupacao . q f i := Xr ; 204 205 // L i s t a de o b j e t o s 198 17.19 ANEXO S 206 ValStream . Read(N, S i z e O f (N) ) ; 207 f or k := 1 to N do 17 ANEXOS begin 208 209 ValStream . Read(L , S i z e O f (L) ) ; 210 Str1 . Position :=0; 211 S t r 1 . CopyFrom ( ValStream , L) ; 212 Objeto := TObjeto . c r e a t e ; 213 Objeto . SetStream ( S t r 1 ) ; 214 FObjetos . Add( Objeto ) ; 215 L i s t a . Add( Objeto . Nome) end ; 216 217 218 219 S t r 1 . Destroy ; end ; 220 221 procedure TComodo . S e t A l t u r a ( const Value : Real ) ; 222 begin 223 224 FAltura := Value ; end ; 225 226 procedure TComodo . S e t L a r g u r a ( const Value : Real ) ; 227 begin 228 229 FLargura := Value ; end ; 230 231 procedure TComodo . SetPosX ( const Value : Real ) ; 232 begin 233 234 FPosX := Value ; end ; 235 236 procedure TComodo . SetPosY ( const Value : Real ) ; 199 17.19 ANEXO S 237 238 239 17 ANEXOS begin FPosY := Value ; end ; 240 241 procedure TComodo . S e t P r o f u n d i d a d e ( const Value : Real ) ; 242 begin 243 244 FProfundidade := Value ; end ; 245 246 procedure TComodo . S e t O b j e t o s ( const Value : T O b j e c t L i s t ) ; 247 begin 248 249 FObjetos := Value ; end ; 250 251 252 253 254 255 procedure TComodo . ExportaGridObjetos ( var Grid : TS tr in gG r id ) ; var l i n : integer ; begin i f FObjetos . Count > 0 then begin 256 Grid . RowCount := FObjetos . Count +1; 257 Grid . ColCount := 3 ; 258 Grid . C e l l s [ 0 , 0 ] := ’Objeto ’ ; 259 Grid . C e l l s [ 1 , 0 ] := ’Nome ’ ; 260 Grid . C e l l s [ 2 , 0 ] := ’Energia (MJ)’ ; 261 f or l i n := 1 to FObjetos . Count do 262 begin 263 Grid . C e l l s [ 0 , l i n ] := I n t T o S t r ( l i n ) ; 264 Grid . C e l l s [ 1 , l i n ] := TObjeto ( FObjetos . Items [ l i n −1]) . Nome ; 265 Grid . C e l l s [ 2 , l i n ] := F l o a t T o S t r ( TObjeto ( FObjetos . Items [ l i n −1]) . E n e r g i a ) ; 200 17.19 ANEXO S end ; 266 end 267 268 17 ANEXOS else begin 269 270 Grid . RowCount := 2 ; 271 Grid . ColCount := 3 ; 272 Grid . C e l l s [ 0 , 0 ] := ’Objeto ’ ; 273 Grid . C e l l s [ 1 , 0 ] := ’Nome ’ ; 274 Grid . C e l l s [ 2 , 0 ] := ’Energia (MJ)’ ; 275 Grid . C e l l s [ 0 , 1 ] := ’’ ; 276 Grid . C e l l s [ 1 , 1 ] := ’’ ; 277 Grid . C e l l s [ 2 , 1 ] := ’’ ; end ; 278 279 end ; 280 281 procedure TComodo . I n s e r e O b j e t o ; 282 var 283 Nome : s t r i n g ; 284 Obx : TObjeto ; 285 begin 286 Obx:= TObjeto . c r e a t e ; 287 Obx . Nome := ’’ ; 288 Obx . A l t u r a := 1 ; 289 Obx . Largura := 1 ; 290 Obx . P r o f u n d i d a d e := 1 ; 291 i f FormObjeto . MyShowModal (Obx , L i s t a , −1) then begin 292 293 O b j e t o s . Add(Obx) ; 294 L i s t a . Add(Obx . Nome) ; end ; 295 296 end ; 201 17.19 ANEXO S 17 ANEXOS 297 298 299 300 procedure TComodo . E d i t a O b j e t o ( Obj : S t r i n g ) ; var indO : integer ; begin 301 indO := GetindObjeto ( Obj ) ; 302 i f ( indO >= 0 ) then begin 303 304 ObjetoAtual := TObjeto ( O b j e t o s [ indO −1]) ; 305 i f FormObjeto . MyShowModal ( ObjetoAtual , L i s t a , indO ) then begin 306 307 O b j e t o s [ indO −1] := ObjetoAtual ; 308 L i s t a [ indO −1] := ObjetoAtual . Nome ; end ; 309 end ; 310 311 end ; 312 313 314 315 procedure TComodo . Removeobjeto ( Obj : S t r i n g ) ; var indO : integer ; begin 316 indO := GetindObjeto ( o b j ) ; 317 i f MessageDlg ( ’Confirma Eliminacao do objeto: ’+Obj+’?’ , mtWarning , [ mbYes , mbNo ] , 0 ) = 6 then 318 i f ( indO >= 0 ) then begin 319 320 FObjetos . Remove ( TObjeto ( FObjetos . Items [ indO −1]) ) ; 321 L i s t a . D e l e t e ( indO −1) ; end ; 322 323 end ; 324 325 procedure TComodo . SetOcupacao ( const Value : TOcupacao ) ; 326 begin 202 17.19 ANEXO S 327 328 17 ANEXOS FOcupacao := Value ; end ; 329 330 331 function TComodo . GetIndObjeto (Nome : S t r i n g ) : integer ; var i n d : integer ; ok : boolean ; 332 333 begin 334 ok := f a l s e ; 335 i f ( FObjetos . Count > 0 ) then begin 336 337 i n d := −1; 338 repeat 339 inc ( ind ) ; 340 ok := ( i n d < FObjetos . Count ) ; u n t i l not ( ok ) or ( L i s t a [ i n d ] = Nome) ; 341 end ; 342 343 i f ok then r e s u l t := i n d+1 344 e l s e r e s u l t := −1; 345 end ; 346 347 348 function TComodo . NomeValido (Nome : s t r i n g ) : boolean ; var ok : boolean ; i : integer ; 349 350 begin 351 ok := true ; 352 f or i := 1 to FObjetos . Count do i f TObjeto ( FObjetos . Items [ i −1]) . Nome = Nome then ok := f a l s e 353 ; 354 355 r e s u l t := ok ; end ; 356 203 17.19 ANEXO S 17 ANEXOS 357 function TComodo . C a l c C a r g a I n c e n d i o O b j : r e a l ; 358 begin 359 360 end ; 361 362 363 364 function TComodo . CalcCargaIncendioOcup : r e a l ; var carga , a r e a : r e a l ; begin 365 a r e a := FLargura ∗ FProfundidade ; 366 c a r g a := a r e a ∗ ocupacao . q f i ; 367 r e s u l t := c a r g a ; 368 end ; 369 370 // r e t o r n a true s e o ponto ( x , y ) e s t a d e n t r o do comodo 371 function TComodo . Dentro ( x , y : r e a l ) : boolean ; 372 begin 373 r e s u l t := ( ( x > PosX ) and ( x < ( PosX+Largura ) ) ) and ( ( y > PosY ) and ( y < ( PosY+P r o f u n d i d a d e ) ) ) ; 374 375 end ; 376 377 378 379 procedure TComodo . C a l c u l o s ; var i : integer ; begin 380 FArea := FLargura ∗ FProfundidade ; 381 FEnergia := 0 ; 382 f or i := 1 to O b j e t o s . Count do 383 begin 384 TObjeto ( FObjetos . Items [ i −1]) . C a l c u l o s ( ) ; 385 FEnergia := FEnergia+TObjeto ( FObjetos . Items [ i −1]) . E n e r g i a ; 386 387 end ; i f FArea > 0 then FCargaIncendio := FEnergia /FArea 204 17.19 ANEXO S 388 389 17 ANEXOS e l s e FCargaIncendio := −1; end ; 390 391 procedure TComodo . SetArea ( const Value : r e a l ) ; 392 begin 393 394 FArea := Value ; end ; 395 396 procedure TComodo . S e t C a r g a I n c e n d i o ( const Value : r e a l ) ; 397 begin 398 399 FCargaIncendio := Value ; end ; 400 401 procedure TComodo . S e t E n e r g i a ( const Value : r e a l ) ; 402 begin 403 404 FEnergia := Value ; end ; 405 406 end . 205 REDEMAT REDE TEMÁTICA EM ENGENHARIA DE MATERIAIS UFOP – CETEC – UEMG UFOP - CETEC - UEMG Sandra Arlinda Santiago Maciel "Desenvolvimento de um software para levantamento de características de reação ao fogo dos materiais de uso comum: carga de incêndio" Dissertação de Mestrado apresentada ao Programa de Pós-Graduação em Engenharia de Materiais da REDEMAT, como parte integrante dos requisitos para a obtenção do título de Mestre em Engenharia de Materiais. Área de concentração: Análise de Materiais Orientador: Prof. Antônio Maria Claret de Gouveia, DSc Co-Orientador: Prof. Ronaldo Silva Trindade, MSc Ouro Preto, setembro de 2008 M152d Maciel, Sandra Arlinda Santiago. Desenvolvimento de um software para levantamento de características de reação ao fogo dos materiais de uso comum [manuscrito]: carga de incêndio / Sandra Arlinda Santiago Maciel. – 2008. 205f.: il. color., tabs. Orientador: Prof. Dr. Antônio Maria Claret Gouveia. Co-orientador: Prof. Ronaldo Silva Trindade. Dissertação (Mestrado) - Universidade Federal de Ouro Preto. Escola de Minas. Rede Temática em Engenharia de Materiais. Área de concentração: Análise e seleção de materiais. Catalogação: [email protected] “Posso, tudo posso Naquele que me fortalece Nada e ninguém no mundo vai me fazer desistir Quero, tudo quero, sem medo entregar meus projetos Deixar-me guiar nos caminhos que Deus desejou pra mim e ali estar Vou perseguir tudo aquilo que Deus já escolheu pra mim Vou persistir, e mesmo nas marcas daquela dor Do que ficou, vou me lembrar E realizar o sonho mais lindo que Deus sonhou Em meu lugar estar na espera de um novo que vai chegar Vou persistir, continuar a esperar e crer E mesmo quando a visão se turva e o coração só chora Mas na alma, há certeza da vitória Posso, tudo posso Naquele que me fortalece Nada e ninguém no mundo vai me fazer desistir Vou perseguir tudo aquilo que Deus já escolheu pra mim Vou persistir, e mesmo nas marcas daquela dor Do que ficou, vou me lembrar E realizar o sonho mais lindo que Deus sonhou Em meu lugar estar na espera de um novo que vai chegar Vou persistir, continuar a esperar e crer ... Eu vou sofrendo, mas seguindo enquanto tantos não entendem Vou cantando minha história, profetizando Que eu posso, tudo posso... em Jesus!” Celina Borges Agradecimentos A Deus, pelo dom da vida. Aos meus amores e companheiros de jornada, por condição e também por opção: minha mãe Lélia, meu pai Cór-Jesu, as queridas maninhas Alesandra e Alexsandra (quantas correções, Lê!!!) . Ao Iram, o amor que a vida me deu de presente, pela compreensão e apoio. Aos professores Claret, pela oportunidade e orientação e ao mestre, por vocação e doação, Ronaldinho, pelo incentivo e aprendizado. Aos amigos e colegas de trabalho do CEFET-OP, em especial da Diretoria de Ensino, pelo incentivo e compreensão. Aos irmãos de caminhada espiritual do grupo de oração e do NATA pelas orações.