CONTATO

Thaís Pedrosa, Estudante de Graduação em Engenharia Civil.

E-mail para contato:  thaisgp07@gmail.com

 

PROGRAMAS

 

Nesta parte do trabalho apresentam-se os seis módulos que compõem o programa FORMAS_A_3D que foram detalhados nos itens anteriores. Para compor o programa a partir dos módulos aqui inseridos, o usuário deverá, primeiramente, no diretório Meus Documentos, criar uma pasta denominada “FORMAS_A_3D”, para que os arquivos, em extensão lsp sejam armazenados. Desta maneira, o usuário deverá então acessar o programa AutoCAD, na opção Tools. Escolher a opção AutoLISP  e por fim Visual LISP Editor.

            O primeiro módulo que deverá ser copiado deste relatório e inserido no editor é o formasarmado3d.lsp. Para cada módulo inserido no editor, deve ser aberto um novo arquivo em extensão lsp, através do ícone indicado na figura, que está presente na tela do editor VisualLISP.

 

Ícone para abertura de um novo arquivo lsp.

 

            Após proceder a cópia da rotina inserida neste relatório para seu devido arquivo lsp, a mesma deve ser armazenada na pasta criada pelo usuário, contida em Meus Documentos. O processo de armazenamento é feito, após a inserção do texto da rotina no editor, pelo ícone indicado na figura.

 

 

 

 

 

 

 

 

No detalhe, ícone para salvamento do arquivo na pasta Espacial.

             Ao final do processo de armazenamento dos arquivos na pasta, a mesma deverá conter seis arquivos em extensão lsp.

 

            O mesmo deve ser feito com o módulo aqui produzido para o desenvolvimento gráfico do programa ESPACIAL, devendo se inserir o módulo “estrutura3d” salvado em lsp, na pasta deste programa.

LISTAGEM DA PROGRAMAÇÃO

formasarmado3d.lsp

eixos3d.lsp

 pilares3d.lsp

pilaresiso3d.lsp

 vigas3d.lsp

lajes3d.lsp

estrutura3d.lsp

 

 Clique aqui para download da pasta compactada!

formasarmado3d.lsp

 

(defun c:formasarmado3D ()

  ;==Caracteristicas da estrutura==;

  (alert "Após pressionar OK, insira o nome da obra, os valores do fck, da carga acidental e da carga permanente (as unidades corretas de inserção estão indicadas)")

  (setq nome (getstring T "\nDigite o nome da obra==> "))

  (initget 7)

  (setq fck (getreal "\nValor do fck do concreto (MPa)==> "))

  (initget 7)

  (setq acidental (getreal "\nCarga acidental sobre a estrutura (kN/m2)==> "))

  (initget 7)

  (setq permanente (getreal "\nSobrecarga permanente sobre a estrutura (kN/m2)==> "))

  (setq extensao ".txt")

  (setq numero1 "1")

  (setq grava1 (strcat nome numero1 extensao))

  (setq padrao (open "Nome da obra.txt" "w"))

  (princ nome padrao)

  (close padrao)

  (setq a getpoint)

  (setq abre1 (open grava1 "w"))

  (princ "#Nome da obra==> " abre1)

  (princ nome abre1)

  (princ "\n" abre1)

  (princ "#Valor do fck do concreto (MPa)==> " abre1)

  (princ fck abre1)

  (princ "\n" abre1)

  (princ "#Carga acidental sobre a estrutura (kN/m2)==> " abre1)

  (princ acidental abre1)

  (princ "\n" abre1)

  (princ "#Sobrecarga permanente sobre a estrutura (kN/m2)==> " abre1)

  (princ permanente abre1)

  (close abre1)

  (alert "Para inserir os eixos na estrutura, após pressionar OK digite a palavra 'Eixos3D' no prompt de comando.")

  (setq a (findfile "Programa FORMAS_A_3D"))

  (setq b "\\eixos3D.lsp")

  (setq arquivo1 (strcat a b))

  (load arquivo1)

  ;=========================================================================;

)

 


eixos3d.lsp

 

(defun c:eixos3D ()

  ;Definir a vista como sendo Isometrica sudoeste

  (alert ">>Pressione a tecla direita do mouse e escolha em Preset views a vista SW isometric, em seguida de Esc")

  (command "3dorbit")

  (command "osnap" "off")

  ;colocação dos eixos

  (command "layer" "n" "eixosy" "color" "2" "eixosy" "s" "eixosy" "")

  (alert ">>Colocação dos eixos verticais e horizontais da estrutura. As medidas devem ser inseridas em centímetro (Pressione OK)")

  (setq nivel (getint "\nNúmero de níveis==>  "))

  (initget 7)

  (setq Anivel (getdist "\nAltura dos níveis==>  "))

  (initget 7)

  (setq mv3 (getdist "\nDistância máxima vertical==> "))

  (alert "Os eixos são inseridos na tela gráfica seguindo o sentido de crescimento dos eixos X e Y(PRESSIONE OK).")

 ;eixos verticais

  (initget 7)

  (setq neixo (getreal "\nNúmero de eixos verticais==> "))

  (setq eixonumero 1)

  (setq Al 0)

  (setq K1 0)

  (setq M60 -60)

  (setq ext (+ mv3 60))

  (command "linetype" "s" "dashdot" "")

  (setq nivel (+ nivel 1))

  (while (<= (- eixonumero nivel) 0)

  (command "line" (list K1 M60 Al)(list K1 ext Al) "") ; linha de 0;-60;al a 0;mv3+60;al

  (setq Al (+ Al Anivel))

  (setq eixonumero (+ eixonumero 1))

  (command "zoom" "extents")

    )

  (setq eixonumero 1)

  (setq Al 0)

  (while (< (- eixonumero neixo) 0)

    (setq nivelnumero 1)

    (setq Al 0)

    (initget 7)

    (setq distancia (getdist "\nEntre com a distância entre os eixos==> "))

    (setq K1 (+ K1 distancia))

    (command "linetype" "s" "dashdot" "")

    (while (<= (- nivelnumero nivel) 0)

    (command "line" (list K1 M60 Al)(list K1 ext Al) "")

    (setq Al (+ Al Anivel))

    (setq nivelnumero (+ nivelnumero 1))

    )

    (setq eixonumero (+ eixonumero 1))

    (command "zoom" "extents")

    )

    ;eixos horizontais

  (initget 7)

  (setq mh3 (getdist "\nDistância máxima horizontal==> "))

  (command "layer" "n" "eixosx" "color" "1" "eixosx" "s" "eixosx" "")

  (setq neixo1 (getreal "\nNúmero de eixos horizontais==> "))

  (setq eixonumero1 1)

  (setq Al2 0)

  (setq K2 0)

  (setq M60 -60)

  (setq ext1 (+ mh3 60))

  (command "linetype" "s" "dashdot" "")

  (command "zoom" "extents")

  (while (<= (- eixonumero1 nivel) 0)

  (command "line" (list ext1 K2 Al2)(list M60 K2 Al2) "")

  (setq Al2 (+ Al2 Anivel))

  (setq eixonumero1 (+ eixonumero1 1))

  (command "zoom" "extents")

    )

  (setq eixonumero1 1)

  (while (< (- eixonumero1 neixo1) 0)

    (setq nivelnumero 1)

    (setq Al2 0)

    (initget 7)

    (setq distancia1 (getdist "\nDistância entre os eixos horizontais==> "))

    (setq K2 (+ K2 distancia1))

    (command "linetype" "s" "dashdot" "")

    (while (<= (- nivelnumero nivel) 0)

    (command "line" (list ext1 K2 Al2)(list M60 K2 Al2) "")

    (setq Al2 (+ Al2 Anivel))

    (setq nivelnumero (+ nivelnumero 1))

    )

    (setq eixonumero1 (+ eixonumero1 1))

    (command "zoom" "extents")

       )

   (setq Al (- Al Anivel)) ; Correção para a altura total

  (setq Nivel (- nivel 1 )) ; correção para o número de niveis

    (command "zoom" "e")

  (alert ">>Ajuste a órbita que melhor visualize sua obra, em seguida de Esc")

  (command "3dorbit")

  (setq nome1 (open "Nome da obra.txt" "r"))

  (setq nome2 (read-line nome1))

  (setq numero2 "2");posicao do arquivo

  (setq extensao ".txt")

  (setq arquivo (strcat nome2 numero2 extensao))

  (setq arquivo1 (open arquivo "w"))

  (princ "#Número niveis  // " arquivo1)

  (princ "#Alturas parciais  // " arquivo1)

  (princ "#Altura total  // " arquivo1)

  (princ "# eixos verticais  // " arquivo1)

  (princ "#D máxima vertical  // " arquivo1)

  (princ "# eixos horizontais  // " arquivo1)

  (princ "#D máxima horizontal  // " arquivo1)

  (princ "\n" arquivo1)

  (princ "       " arquivo1)

  (princ nivel arquivo1)

  (princ "                  " arquivo1)

  (princ (/ Al nivel) arquivo1)

  (princ "              " arquivo1)

  (princ Al arquivo1)

  (princ "                " arquivo1)

  (princ neixo arquivo1)

  (princ "                   " arquivo1)

  (princ mv3 arquivo1)

  (princ "                  " arquivo1)

  (princ neixo1 arquivo1)

  (princ "                     " arquivo1)

  (princ mh3 arquivo1)

  (close arquivo1)

  ;Carregamento do módulo PILARES;

  (alert "Para inserir os pilares na estrutura, após pressionar OK digite a palavra 'pilares3D' no prompt de comando.")

  (setq a (findfile "Programa FORMAS_A_3D"))

  (setq b "\\Pilares3D.lsp")

  (setq arquivo2 (strcat a b))

  (load arquivo2)

  )

 

 

pilares3d.lsp

 

(defun c:pilares3D ()

  ;==Colocação dos pilares==

  (command "layer" "n" "pilares" "color" "5" "pilares" "s" "pilares" "")

  (command "linetype" "s" "continuous" "")

  (alert ">>Colocação dos pilares da estrutura (pressione OK).")

  (command "osnap" "end,int,cen")

  (setq padrao (open "Nome da obra.txt" "r"))

  (setq nome (read-line padrao))

  (close padrao)

  (setq numero3 "3")      ;Posicao do arquivo

  (setq extensao ".txt")

      (setq numero2 "2")

    (setq arqeixos1 (strcat nome numero2 extensao))

    (setq arqeixos (open arqeixos1 "r"))

    (while (setq leAl (read-line arqeixos))

    (setq Al1(read (substr leAl 43 15)))

    )

  (close arqeixos)

  (setq arquivo (strcat nome numero3 extensao))

  (setq arquivo1 (open arquivo "w"))

  (setq espaço "        ")

  (setq linha "\n")

   ;Carregamento do módulo Pilaresiso3d;

  (setq abre1 (findfile "Programa FORMAS_A_3D"))

  (setq abre2 "\\pilaresiso3D.lsp")

 (setq arquivo2 (strcat abre1 abre2))

  (load arquivo2)

  (alert " Neste módulo os pilares são inseridos continuamente com a altura total do Pórtico, para inserir pilares com diferentes alturas aperte [esc] até cancelar e digite 'Pilaresiso3d' no prompt")

  ;Definir a vista como sendo Topo (padrão)

  (alert ">>Pressione a tecla direita do mouse e escolha em Preset views a vista Top, em seguida de Enter")

  (command "3dorbit")

  (alert "Arranje os pilares na estrutura seguindo o sentido de CRESCIMENTO de X (esquerda para direita) e DECRESCIMENTO de Y (cima para baixo).")

  (setq condição 1)

  (setq cont2 1)

  (while (<= (- condição 2) 0)

    ;Definição dos comprimentos do pilar

    (if (<= (- condição 1) 0)

      (progn

            (command "osnap" "int")

            (initget 7); Permissao apenas para numeros maiores que zero

            (setq J1 (getreal "\nComprimento(cm) do lado em relação ao eixo x do pilar==> "))

            (setq U (getreal "\nComprimento(cm) do lado em relação ao eixo y do pilar==> "))

            (setq J2 (rtos J1 1 3))

            (setq U1 (rtos U 1 3))

            (setq J3 (rtos J1 2 1))

            (setq U2 (rtos U 2 1))

            )

      )

    ;Definição da posição do pilar

     (command "osnap" "end,int,cen")

     (setq B (getpoint "\nUtilize o Zoom na escolha o local para inserir o pilar, em qualquer intersecção dos eixos."))

      (setq coordX (car B))

      (setq coordY (cadr B))

      (setq coordZ 0) ; Assim só será possivel a inserção de 1 pilar continuo em cada intersecção de eixos

    ;Caso queira-se mudar os pilares seria necessario visualizar em SW e  definir coordZ como (caddr B)

      (setq coordXf1 (rtos coordX 1 3))

      (setq coordYf1 (rtos coordY 1 3))

      (setq coordZf1 (rtos coordZ 1 3)) ; igualmente

      (setq C (list coordX coordY coordZ)) ; igualmente

      (setq D (polar C (/ pi 2) (/ U 2)))

      (setq E (polar C (/ (* 3 pi) 2) (/ U 2)))

      (setq F (polar D (* 2 pi) (/ J1 2)))

      (setq G (polar E (* 3 pi) (/ J1 2)))

      (command "rectangle" F G "")

      (setq Rec (entlast))

      (setq condição 1)

      (command "extrude" Rec "" Al "" 0 "")

      (command "osnap" "off")

      ; Nomenclatura dos pilares

      (setq pilar "P")

      (setq numeropilar cont2)

      (princ pilar arquivo1)

      (princ numeropilar arquivo1)

      (princ espaço arquivo1)

      (princ J2 arquivo1)

      (princ espaço arquivo1)

      (princ U1 arquivo1)

      (princ espaço arquivo1)

      (princ coordXf1 arquivo1)

      (princ espaço arquivo1)

      (princ coordYf1 arquivo1)

      (princ espaço arquivo1)

      (princ linha arquivo1)

; Definição de continuação da dimensão do pilar

     (setq condi (getint "Para continuar com o mesmo pilar digite [2], para mudar a dimensão do pilar digite [1] e para encerrar digite [3]  "))

     (if (= condi 2)

       (progn

             (setq condição 2)

            )

       )

    (if (= condi 1)

      (progn

            (setq condição 1)

            )

      )

    (if (= condi 3)

      (progn

            (setq condição 3)

            )

      )

(setq cont2 (+ cont2 1))

    )

  (close arquivo1)

  (command "zoom" "extents")   

  (alert ">>Ajuste a órbita que melhor visualize sua obra, em seguida de Esc")

  (command "3dorbit")

   ;Carregamento do módulo VIGAS;

  (alert "Para inserir as vigas na estrutura, após pressionar OK digite a palavra 'vigas3D' no prompt de comando.")

  (setq abre1 (findfile "Programa FORMAS_A_3D"))

  (setq abre2 "\\Vigas3D.lsp")

  (setq arquivo3 (strcat abre1 abre2))

  (load arquivo3)

   )

 

pilaresiso3d.lsp

 

(defun c:pilaresiso3D ()

  ;==Colocação dos pilares==

  (command "layer" "n" "pilares" "color" "5" "pilares" "s" "pilares" "")

  (command "linetype" "s" "continuous" "")

  (alert ">>Colocação dos pilares da estrutura (pressione OK).")

  (command "osnap" "end,int,cen")

  (setq padrao (open "Nome da obra.txt" "r"))

  (setq nome (read-line padrao))

  (close padrao)

  (setq numero3 "3");Posicao do arquivo

  (setq extensao ".txt")

  (setq arquivo (strcat nome numero3 extensao))

  (setq arquivo1 (open arquivo "w"))

  (setq espaço "        ")

  (setq linha "\n")

  (alert "Arranje os pilares na estrutura seguindo o sentido de CRESCIMENTO de X (esquerda para direita) e DECRESCIMENTO de Y (cima para baixo).")

  (setq condição 1)

  (setq cont2 1)

  (while (<= (- condição 2) 0)

    ;Definição dos comprimentos do pilar

    (if (<= (- condição 1) 0)

      (progn

            (command "osnap" "int")

            (initget 7); Permissao apenas para numeros maiores que zero

            (setq J1 (getreal "\nComprimento(cm) do lado em relação ao eixo x do pilar==> "))

            (setq U (getreal "\nComprimento(cm) do lado em relação ao eixo y do pilar==> "))

            (setq J2 (rtos J1 1 3))

            (setq U1 (rtos U 1 3))

            (setq J3 (rtos J1 2 1))

            (setq U2 (rtos U 2 1))

            )

      )

    ;Definição da posição do pilar

     (command "osnap" "end,int,cen")

     (setq B (getpoint "\nUtilize o Zoom na escolha o local para inserir o pilar, em qualquer intersecção dos eixos."))

      (setq coordX (car B))

      (setq coordY (cadr B))

      (setq coordZ (caddr B)) ; Assim só será possivel a inserção de 1 pilar continuo em cada intersecção de eixos

    ;Caso queira-se mudar os pilares seria necessario visualizar em SW e  definir coordZ como (caddr B)

      (setq coordXf1 (rtos coordX 1 3))

      (setq coordYf1 (rtos coordY 1 3))

      (setq coordZf1 (rtos coordZ 1 3)) ; igualmente

      (setq C (list coordX coordY coordZ)) ; igualmente

      (setq D (polar C (/ pi 2) (/ U 2)))

      (setq E (polar C (/ (* 3 pi) 2) (/ U 2)))

      (setq F (polar D (* 2 pi) (/ J1 2)))

      (setq G (polar E (* 3 pi) (/ J1 2)))

      (command "rectangle" F G "")

      (setq Rec (entlast))

      (setq condição 1)

     ; Definir pilares com diferentes alturas

      (setq Altf (getpoint "\nAgora o ponto de final do pilar (intesecção de eixos)"))

      (setq coordX3 (car B))

      (setq coordY3 (cadr B))

      (setq coordZ3 (caddr Altf))

      (setq Altf1 (list coordX3 coordY3 coordZ3))

      (command "extrude" Rec "" "D" C  Altf1 "")

      (setq ALtpilar (distance C AltF1))

      (command "osnap" "off")

      ; Nomenclatura dos pilares

      (setq pilar "P")

      (setq numeropilar cont2)

      (princ pilar arquivo1)

      (princ numeropilar arquivo1)

      (princ espaço arquivo1)

      (princ J2 arquivo1)

      (princ espaço arquivo1)

      (princ U1 arquivo1)

      (princ espaço arquivo1)

      (princ coordXf1 arquivo1)

      (princ espaço arquivo1)

      (princ coordYf1 arquivo1)

      (princ espaço arquivo1)

      (princ coordZf1 arquivo1) ; em que nivel começa

      (princ espaço arquivo1)

      (princ Altpilar arquivo1) ; qual é a sua altura

      (princ espaço arquivo1)

      (princ linha arquivo1)

; Definição de continuação da dimensão do pilar

     (setq condi (getint "Para continuar com o mesmo pilar digite [2], para mudar a dimensão do pilar digite [1] e para encerrar digite [3]  "))

     (if (= condi 2)

       (progn

             (setq condição 2)

            )

       )

    (if (= condi 1)

      (progn

            (setq condição 1)

            )

      )

    (if (= condi 3)

      (progn

            (setq condição 3)

            )

      )

(setq cont2 (+ cont2 1))

    )

  (close arquivo1)

  (alert ">>Ajuste a órbita que melhor visualize sua obra, em seguida de Esc")

  (command "3dorbit")

   ;Carregamento do módulo VIGAS;

  (setq abre1 (findfile "Programa FORMAS_A_3D"))

  (setq abre2 "\\Vigas3D.lsp")

  (setq arquivo3 (strcat abre1 abre2))

  (load arquivo3)

  (alert "Para inserir as vigas na estrutura, após pressionar OK digite a palavra 'vigas3D' no prompt de comando.")

  )

 

vigas3d.lsp

 

(defun c:vigas3D ()

  ;Carregamento do módulo Vigasiso3d;

  (setq abre1 (findfile "Programa FORMAS_A_3D"))

  (setq abre2 "\\vigasiso3D.lsp")

  (setq arquivo2 (strcat abre1 abre2))

  (load arquivo2)

  (alert " Neste módulo as vigas são inseridas em vista top, para inserir em vista isométrica aperte [esc] até cancelar e digite 'vigasiso3d' no prompt." )

  ;Definir a vista como sendo Topo (padrão)

  (alert ">>Pressione a tecla direita do mouse e escolha em Preset views a vista Top, em seguida de Enter")

  (command "3dorbit")

    (setq padrao (open "Nome da obra.txt" "r"))

    (setq nome (read-line padrao))

    (close padrao)

    (setq numero4 "4");posicao do arquivo

    (setq extensao ".txt")

    (setq numero2 "2")

    (setq arqeixos1 (strcat nome numero2 extensao))

    (setq arqeixos (open arqeixos1 "r"))

    (while (setq leAn (read-line arqeixos))

    (setq An (read (substr leAn 24 15)))

    )

  (while (setq leNv (read-line arqeixos))

    (setq Nv (read (substr leNv 4 10)))

    )

  (close arqeixos)

  (setq Al 0 )

  (setq pav 0)

  (setq contnivel 1)

  (setq contnivel1 (itoa contnivel))

  (setq vig "Vigas")

  (setq lay1 (strcat vig contnivel1))

  (command "layer" "n" lay1 "color" "3" lay1 "s" lay1 "")

  (alert " Colocação das vigas pavimento por pavimento, iniciando pelos baldrames ")

  (while ( = pav 0)

    (setq det (getreal "\nPara inserir vigas horizontais(x) digite [1], para inserir vigas verticais(y) digite [2], para não inserir vigas nesse pavimento digite [3], para encerrar colocação no portico digite [4]==> "))

    (while (<= (- det 2) 0) 

; ============ Vigas horizontais ============

  (if (= det 1)

    (progn

    (alert ">>Colocação das vigas na direção do eixo X (horizontal) do UCS corrente (pressione OK).")

    (initget 7)

    (alert "Ao selecionar ponto inicial e final da viga comece da esquerda para direita (Crescimento de X).")

    (setq arquivo (strcat nome numero4 extensao))

    (setq arquivoviga (open arquivo "w"))

    (setq condicao 1)

    (setq cont1 1)

    (while (<= (- condicao 2) 0)

      ;Definicao da secao da viga

      (if (<= (- condicao 1) 0)

        (progn

        (command "osnap" "int")

        (setq L (getreal "\nLargura da viga(cm)==> "))

        (setq C4 (getreal "\nAltura da viga==> "))

        ;Conversao numerica para arquivo

        (setq C1 (rtos L 1 3))

        (setq C5 (rtos C4 1 3))

        ;Conversao numerica para impressao na tela

        (setq L1 (rtos L 2 1))

        (setq C41 (rtos C4 2 1))

         )

        )

       ;Definicao da posicao da viga

       (command "osnap" "int")

       (setq Ma (getpoint "\nSelecione o ponto de início da viga (intesecção de eixos)"))

       (setq coordX2 (car Ma))

       (setq coordY2 (cadr Ma))

       (setq coordZ2 Al)

       (setq M (list coordX2 coordY2 coordZ2))

       (setq extensao3 "3")

       (setq arquivo1 (strcat nome extensao3 extensao))

       (setq arqpilar (open arquivo1 "r"))

       (setq contador 1)

       (while (<= (- contador 1) 0)

         (setq linha (read-line arqpilar))

         (setq x (read (substr linha 41 15)))

         (setq y (read (substr linha 57 15)))

         (if (= coordX2 x)

               (progn

                 (if (= coordY2 y)

                   (progn

                     (setq ladoxm (read (substr linha 9 13)))

                     (setq contador (+ contador 1))

                   )

                 )

               )

             )

       )

     (close arqpilar)

     (setq Na (getpoint "\nSelecione o ponto final da viga (intersecção de eixos)"))

     (setq coordX3 (car Na))

     (setq coordY3 (cadr Na))

     (setq coordZ3 Al)

     (setq N (list coordX3 coordY3 coordZ3))

     (setq arqpilar (open arquivo1 "r"))

     (setq pula (read-line arqpilar))

     (setq contador 1)

     (while (<= (- contador 1) 0)

       (setq linha (read-line arqpilar))

       (setq x (read (substr linha 41 15)))

       (setq y (read (substr linha 57 15)))

       (if (= coordX3 x)

             (progn

               (if (= coordY3 y)

                 (progn

                   (setq ladoxn (read (substr linha 9 13)))

                   (setq contador (+ contador 1))

                   )

                 )

               )

             )

       )

    (close arqpilar)

     (command "osnap" "off")

     (setq coordXf2 (rtos coordX2 1 3))

     (setq coordYf2 (rtos coordY2 1 3))

     (setq coordXf3 (rtos coordX3 1 3))

     (setq coordYf3 (rtos coordY3 1 3))

    (setq ponto1 (polar M (* 2 pi) (+ (/ ladoxm 2))))

    (setq ponto2 (polar N (* 3 pi) (+ (/ ladoxn 2))))

    (setq ponto3 (polar ponto1 (/ (* 3 pi) 2) (/ L 2)))

    (setq ponto4 (polar ponto2 (/ pi 2) (/ L 2)))

    (command "rectangle" ponto3 ponto4 "")

    (setq Hrec (entlast))

      (setq C4a (* C4 -1))

    (command "extrude" Hrec "" C4a "" 0 "")

    (setq condicao 1)

    ; Nomenclatura

         (setq viga "V")

         (setq espaço "        ")

         (setq numeroviga cont1)

         (princ "V" arquivoviga)

         (princ contnivel arquivoviga)

         (princ cont1 arquivoviga)

         (princ espaço arquivoviga)

         (princ C1 arquivoviga)

         (princ espaço arquivoviga)

         (princ C5 arquivoviga)

         (princ espaço arquivoviga)

             (princ coordXf2 arquivoviga)

         (princ "          " arquivoviga)

         (princ coordYf2 arquivoviga)

         (princ "          " arquivoviga)

         (princ Al arquivoviga)

         (princ "          " arquivoviga)     

         (princ coordXf3 arquivoviga)

         (princ "          " arquivoviga)

             (princ coordYf3 arquivoviga)

         (princ "          " arquivoviga)

         (princ Al arquivoviga)

         (princ "\n" arquivoviga)

    ; Definição de continuação de viga

    (setq condi (getint "Para continuar com a mesma viga digite [2], para mudar a seção da viga [1], para encerrar vigas horizontais e inserir vigas verticais digite [3] e para encerrar vigas nesse pavimento [4]==  "))

     (if (= condi 2)

       (progn

             (setq condicao 2)

            )

       )

    (if (= condi 1)

      (progn

            (setq condicao 1)

            )

      )

    (if (= condi 3)

      (progn

            (setq condicao 3)

            (setq det 2)

            )

      )

         (if (= contnivel Nv)

      (progn

            (setq pav 1)

            )

      )

    (if (= condi 4)

      (progn

            (setq condicao 3)

            (setq det 3) ; portanto volta ao incio

            )

      )

(setq cont1 (+ cont1 1))

      )                       ; final da definição de vigas horizontais

     )

    )

  ;====================Vigas Verticais==================================

  (if (= det 2)

    (progn

    (alert ">>Colocação das vigas na direção do eixo Y (vertical) do UCS corrente (pressione OK).")

    (initget 7)

    (alert "Ao selecionar ponto inicial e final da viga comece da cima para baixo (Decrescimento de Y).")

    (setq condicao 1)

    (setq cont1 1)

    (while (<= (- condicao 2) 0)

     ;Definicao da secao da viga

    (if (<= (- condicao 1) 0)

      (progn

      (command "osnap" "int")

      (setq L (getreal "\nLargura da viga(cm)==> "))

      (setq C4 (getreal "\nAltura da viga==> "))

      (setq C1 (rtos L 1 3))

      (setq C5 (rtos C4 1 3))

      (setq L1 (rtos L 2 0))

      (setq C41 (rtos C4 2 0))

      )

      )

    ;Definicao da posicao da viga

     (command "osnap" "int")

     (setq Ma (getpoint "\nSelecione o ponto de início da viga (intesecção de eixos)"))

     (setq coordX2 (car Ma))

     (setq coordY2 (cadr Ma))

     (setq coordZ2 Al)

     (setq M (list coordX2 coordY2 coordZ2))

     (setq extensao3 "3")

     (setq arquivo1 (strcat nome extensao3 extensao))

     (setq arqpilar (open arquivo1 "r"))

     (setq contador 1)

     (while (<= (- contador 1) 0)

       (setq linha (read-line arqpilar))

       (setq x (read (substr linha 41 15)))

       (setq y (read (substr linha 57 15)))

       (if (= coordX2 x)

             (progn

               (if (= coordY2 y)

                 (progn

                   (setq ladoym (read (substr linha 26 13)))

                   (setq contador (+ contador 1))

                   )

                 )

               )

             )

       )

     (close arqpilar)

     (setq Na (getpoint "\nSelecione o ponto final da viga (intersecção de eixos)"))

     (setq coordX3 (car Na))

     (setq coordY3 (cadr Na))

     (setq coordZ3 Al)

     (setq N (list coordX3 coordY3 coordZ3))

     (setq extensao3 "3")

     (setq arquivo1 (strcat nome extensao3 extensao))

     (setq arqpilar (open arquivo1 "r"))

     (setq contador 1)

     (while (<= (- contador 1) 0)

       (setq linha (read-line arqpilar))

       (setq x (read (substr linha 41 15)))

       (setq y (read (substr linha 57 15)))

       (if (= coordX3 x)

             (progn

               (if (= coordY3 y)

                 (progn

                   (setq ladoyn (read (substr linha 26 13)))

                   (setq contador (+ contador 1))

                   )

                 )

               )

             )

       )

    (close arqpilar)

     (command "osnap" "off")

     (setq coordXf2 (rtos coordX2 1 3))

     (setq coordYf2 (rtos coordY2 1 3))

     (setq coordXf3 (rtos coordX3 1 3))

     (setq coordYf3 (rtos coordY3 1 3))

    (setq pontoa (polar M (/ (* 3 pi) 2)  (/ ladoym 2) ))

    (setq pontob (polar N (/ pi 2) (/ ladoyn 2) ))

    (setq pontoc (polar pontoa (* 3 pi) (/ L 2)))

    (setq pontod (polar pontob (* 2 pi) (/ L 2)))

    (command "rectangle" pontoc pontod "")

    (setq Vrec (entlast))

    (setq C4a (* -1 C4 ))

    (command "extrude" Vrec "" C4a "" 0 "")

    (setq Vbloco (entlast))

    (setq pontoh (polar pontoc (/ (* 3 pi) 2) C4a))

    (command "move" Hbloco "" pontoc pontoh "")

    (setq condicao 1)

    ; Nomenclatura das vigas: Pensar como fazer para desenhos 3D

         (setq viga "V")

         (setq espaço "        ")

         (setq numeroviga cont1)

         (princ "V" arquivoviga)

         (princ contnivel arquivoviga)

         (princ cont1 arquivoviga)

         (princ espaço arquivoviga)

         (princ C1 arquivoviga)

         (princ espaço arquivoviga)

         (princ C5 arquivoviga)

         (princ espaço arquivoviga)

             (princ coordXf2 arquivoviga)

         (princ "          " arquivoviga)

         (princ coordYf2 arquivoviga)

         (princ "          " arquivoviga)

         (princ Al arquivoviga)

         (princ "          " arquivoviga)

         (princ coordXf3 arquivoviga)

         (princ "          " arquivoviga)

         (princ coordYf3 arquivoviga)

         (princ "          " arquivoviga)

         (princ Al arquivoviga)

         (princ "\n" arquivoviga)

     ; Definição de continuação de viga

    (initget 7)

    (setq condi (getint "Para continuar com a mesma viga digite [2], para mudar a seção da viga [1], para inserir vigas horizontais digite [3] e encerra vigas nesse pavimento digite [4]  "))

     (if (= condi 2)

       (progn

             (setq condicao 2)

            )

       )

    (if (= condi 1)

      (progn

            (setq condicao 1)

            )

      )

      (if (= condi 3)

            (progn

              (setq condicao 3)

              (setq det 1)

              )

            )

    (if (= condi 4)

      (progn

            (setq condicao 3)

            (setq det 3) ; volta ao incio

            )

      )

(setq cont1 (+ cont1 1))

    )        ; os 3 final  da definição da seção de vigas verticais

    )                 

    )

)                    ; final do 2 while  da condição  menos 2 menor q 0

    (if (= contnivel Nv)

      (progn

            (setq pav 1)

            )

      )

           (if (= det 3)

    (progn

      (setq pav 0)

      (command "layer" "n" "auxiliar" "s" "auxiliar" "")

      (setq vig "Vigas")

      (setq lay1 (strcat vig contnivel1))

      (command "layer" "f" lay1 "")

      (setq contnivel (+ contnivel 1))

      (setq contnivel1 (itoa contnivel))

      (setq junta1 " Colocação das vigas no pavimento ")

      (setq junta2 ". (Pressione Ok)")

      (setq escrita1 (strcat junta1 contnivel1 junta2))

      (alert escrita1)

      (setq Al (+ Al An))    ; sobe um pavimento

      (setq vig "Vigas")

      (setq lay1 (strcat vig contnivel1))

      (command "layer" "n" lay1 "color" "3" lay1 "s" lay1 "")

         )

            )

 (if (= det 4)

    (progn

      (setq pav 1)

     )

   )

      )                                 ; final do 1 while

  (if (= pav 1)

    (progn

  (while (>= contnivel 1)

    (setq vig "Vigas")

    (setq contnivel1 (itoa contnivel))

    (setq lay1 (strcat vig contnivel1))

    (command "layer" "thaw" lay1 "")

    (setq contnivel (- contnivel 1))

    )

   (alert ">>Ajuste a órbita que melhor visualize sua obra, em seguida de Esc")

  (command "3dorbit")

  (close arquivoviga)

   ;Carregamento do módulo LAJES;

   (alert "Para inserir as lajes na estrutura, após pressionar OK digite a palavra 'lajes3D' no prompt de comando.")

  (setq abre3 (findfile "Programa FORMAS_A_3D"))

  (setq abre4 "\\Lajes3D.lsp")

  (setq arquivo3 (strcat abre3 abre4))

  (load arquivo3)

)

    )

 )

  

 

lajes3d.lsp

 

(defun c:lajes3D ()

  ;==Colocação das Lajes==

  (setq contnivel 1)

  (setq contnivel1 (itoa contnivel))

  (setq laj "Lajes")

  (setq lay1 (strcat laj contnivel1))

  (command "layer" "n" lay1 "color" "40" lay1 "s" lay1 "")

  (command "linetype" "s" "continuous" "")

  (alert ">>Colocação das lajes da estrutura começando pelo Pavimento Térreo(pressione OK).")

      (setq numero2 "2")

    (setq arqeixos1 (strcat nome numero2 extensao))

    (setq arqeixos (open arqeixos1 "r"))

    (while (setq leAn (read-line arqeixos))

    (setq An (read (substr leAn 24 15)))

    )

      (while (setq leAl (read-line arqeixos))

    (setq Al1(read (substr leAl 43 15)))

    )

   (while (setq leNv (read-line arqeixos))

    (setq Nv (read (substr leNv 4 10)))

    )

  (close arqeixos)

  (setq Al 0)

    (setq D1 (getint "\nNúmero de lajes nesse pavimento, caso não haja digite '0' ==>"))

  (setq D 0)

  (while (= D 0)

  (initget 1) 

   (if (= D1 0)

    (progn

    (setq Al (+ Al An))

      (setq contnivel (+ contnivel 1))

      (alert ">>Não haverá lajes neste pavimento, mudando para o próximo nível.(pressione OK).")

      (setq laj "Lajes")

      (setq contnivel1 (itoa contnivel))

      (setq lay1 (strcat laj contnivel1))

      (command "layer" "n" lay1 "color" "40" lay1 "s" lay1 "")

      (setq D1 (getint "\nNúmero de lajes nesse pavimento, caso não haja digite '0' ==>"))

    )

    )

   (if (> D1 0)

     (progn

  (setq padrao (open "Nome da obra.txt" "r"))

  (setq nome (read-line padrao))

  (close padrao)

  (setq numero5 "5")

  (setq extensao ".txt")

  (setq arquivol (strcat nome numero5 extensao))

  (setq arquivolaje (open arquivol "w"))

  (setq espaço "        ")

  (setq linha "\n")

  (setq numero38 "38")

  (setq arquivo38a (strcat nome numero38 extensao))

  (setq arquivo38 (open arquivo38a "w"))

  (repeat D1

    (command "osnap" "endpoint,int")

    (setq D2 (getpoint "\nDefina a locação do primeiro pilar da laje ,"))

    (setq D3 (getcorner D2 "\nagora defina um pilar oposto ao escolhido anteriormente"))

    (setq D2x (car D2))

    (setq D2y (cadr D2))

    (setq D2z Al)

    (setq P1 (list D2x D2y D2z))

    (setq D3x (car D3))

    (setq D3y (cadr D3))

    (setq D3z Al)

    (setq P2 (list D3x D3y D3z))            

    (setq Dx1 (list D2x 0))

    (setq Dx2 (list D3x 0))

    (setq Dy1 (list 0 D2y))

    (setq Dy2 (list 0 D3y))

    (setq D4 (distance Dx1 Dx2));distancia na horizontal

    (setq D5 (rtos D4 1 3))

    (setq D51 (rtos D4 2 1))

    (setq D8 (distance Dy1 Dy2));distancia na vertical

    (setq E9 (rtos D8 1 3))

    (setq E91 (rtos D8 2 1))

    (setq F1 (getdist "\nEspessura da laje(cm)==> "))

    (setq F2 (rtos F1 1 3))

    (setq F21 (rtos F1 2 1))

    (command "rectangle" P1 P2 "")

    (setq Rec (entlast))

    (setq F1a (* -1 F1 ))

    (command "extrude" Rec "" F1a "" 0 "")

    (setq Lbloco (entlast))

    (princ "L" arquivolaje)

    (princ cont3 arquivolaje)

    (princ espaço arquivolaje)

    (princ F2 arquivolaje)

    (princ espaço arquivolaje)

    (princ D5 arquivolaje)

    (princ espaço arquivolaje)

    (princ E9 arquivolaje)

    (princ espaço arquivolaje)

    (princ linha arquivolaje)

    (princ "L" arquivo38)

    (princ cont3 arquivo38)

    (princ espaço arquivo38)

    (princ D2 arquivo38)

    (princ "    " arquivo38)

    (princ D3 arquivo38)

    (princ "    " arquivo38)

    (princ D4 arquivo38)

    (princ "    " arquivo38)

    (princ D8 arquivo38)

    (princ "    " arquivo38)

    (princ Al arquivo38)   

    (princ "\n" arquivo38)

    )                            ; fim do repeat

     (setq Al (+ Al An))

  (command "layer" "n" "auxiliar" "s" "auxiliar" "")

  (setq laj "Lajes")

  (setq contnivel1 (itoa contnivel))

  (setq lay1 (strcat laj contnivel1))

  (command "layer" "f" lay1 "")

  (setq contnivel (+ contnivel 1))

  (setq laj "Lajes")

  (setq contnivel1 (itoa contnivel))

  (setq lay1 (strcat laj contnivel1))

  (command "layer" "n" lay1 "color" "40" lay1 "s" lay1 "")

  (setq D1 (getint "\nNúmero de lajes no próximo pavimento, caso não haja digite '0', para encerrar a colocação das lajes digite '-1'  ==>"))

          (if (= D1 0)

    (progn

    (setq Al (+ Al An))

      (setq contnivel (+ contnivel 1))

      (alert ">>Não haverá lajes neste pavimento, mudando para o próximo nível.(pressione OK).")

      (setq laj "Lajes")

      (setq contnivel1 (itoa contnivel))

      (setq lay1 (strcat laj contnivel1))

      (command "layer" "n" lay1 "color" "40" lay1 "s" lay1 "")

      (setq D1 (getint "\nNúmero de lajes nesse pavimento, caso não haja digite '0' ==>"))

    )

    )

    ) )                     ; fim do 1 if

    (command "osnap" "end,int,cen")

  (if (= D1 -1)

    (progn

   (close arquivo38)

  (close arquivolaje)

  (setq numero35 "35")

  (setq extensao ".txt")

  (setq arquivo35 (strcat nome numero35 extensao))

  (setq arquivolaje2 (open arquivo35 "w"))

  (princ D1 arquivolaje2)

  (princ "  Foi(ram) inserida(s) na estrutura" arquivolaje2)

  (close arquivolaje2)

    (while (>= contnivel 1)

    (setq laj "Lajes")

    (setq contnivel1 (itoa contnivel))

    (setq lay1 (strcat laj contnivel1))

    (command "layer" "thaw" lay1 "")

    (setq contnivel (- contnivel 1))

    )

    (alert ">>Ajuste a órbita que melhor visualize sua obra, em seguida de Esc")

  (command "3dorbit")

(setq D 1)

   )

 )

          ) ; fim do while do D

)


estrutura3d.lsp

 

(defun c:estrutura3d()

  ;==Procura da obra a ser desenha==

  (alert ">>A obra a ser desenhada deve ser digitada assim como fora no inicio do Programa Formas (pressione OK).")

  (setq numero5 "5")

  (setq numero2 "2")

  (setq nome (getstring T "\nInsira o nome da obra a ser executada==> "))

 ; (setq padrao (open "Obra atual.txt" "r"))

 ; (setq nome (read-line padrao))

 ; (close padrao)

  (setq extensao ".txt")

  ;==Colocação dos pilares==

  (alert ">>Colocação dos pilares da estrutura (pressione OK).")

  (command "layer" "n" "pilares" "color" "5" "pilares" "s" "pilares" "")

  (command "color" "bylayer")

  (setq altotal1 (strcat nome numero2 extensao))

  (setq altotal (open altotal1 "r"))

  (while (setq lecota (read-line altotal))

    (setq cota1 (read (substr lecota 82 5)))

    )

  (close altotal)

   (setq cota (* cota1 100))

   (setq pilares1 (strcat nome numero5 extensao))

  (setq pilares (open pilares1 "r"))

  (while (setq coord (read-line pilares))

    (setq coordx1 (read (substr coord 44 11)))

    (setq coordy1 (read (substr coord 61 11)))

    (setq X (substr coord 9 13))                ;Comprimento(cm) do lado em relação ao eixo x do pilar==>

    (setq Y (substr coord 26 13))    ;Comprimento(cm) do lado em relação ao eixo y do pilar==>

    (setq J1 (atof X))

    (setq U (atof Y))

 

    (setq C (list coordx1 coordy1 0))

    (setq D (polar C (/ pi 2) (/ U 2)))

    (setq E (polar C (/ (* 3 pi) 2) (/ U 2)))

    (setq F (polar D (* 2 pi) (/ J1 2)))

    (setq G (polar E (* 3 pi) (/ J1 2)))

    (command "rectangle" F G "")

    (setq Rec (entlast))

    (command "extrude" Rec "" cota "" 0 "")

    )       ; fim do while

    (close pilares)

 

;Desenho das vigas

      (alert ">>Colocação das vigas na estrutura (pressione OK).")

  (command "layer" "n" "vigas" "color" "3" "vigas" "s" "vigas" "")

  (command "color" "bylayer")

  (setq numero6 "6") 

  (setq padrao (open "Obra atual.txt" "r"))

  (setq nome (read-line padrao))

  (close padrao)

  (setq extensao ".txt")

    (setq vigas1 (strcat nome numero6 extensao))

    (setq vigas (open vigas1 "r"))

    (while (setq coord (read-line vigas))

    (setq larg1 (substr coord 11 13))           ; Largura da viga

    (setq alt1  (substr coord 29 13))             ; Altura da viga

    (setq coordix (read (substr coord 45 13)))             ;o ponto de INICIO da viga (intesecção de eixos)"))

    (setq coordiy (read (substr coord 62 13)))   

    (setq coordfx (read (substr coord 93 13)))             ;o ponto de FINAL da viga (intesecção de eixos)"))

    (setq coordfy (read (substr coord 113 13)))

    (setq nivel1 (read (substr coord 79 13)))

    (setq nivel (* nivel1 100))

    (setq larg (atof larg1))

    (setq C4 (atof alt1))

       (if (= coordiy coordfy)

      (progn

    (setq M (list coordix coordiy nivel))                  ; ponto inicial                X

    (setq N (list coordfx coordfy nivel))                       ; ponto final

    (setq A (polar M (/ pi 2) (/ larg 2)))

    (setq B (polar N (/ (* 3 pi) 2) (/ larg 2)))

    )

             )

       (if (= coordix coordfx)

      (progn      

    (setq M (list coordix coordiy nivel))                  ; ponto inicial

    (setq N (list coordfx coordfy nivel))                     ; ponto final        Y

      (setq A (polar M (* 3 pi) (/ larg 2)))

      (setq B (polar N (* 2 pi) (/ larg 2)))

   )

             )

    (command "rectangle" A B "")

    (setq Hrec (entlast))

    (setq C4a (* C4 -1))

    (command "extrude" Hrec "" C4a "" 0 "")

        )              ; fim do while

  (close vigas )

; desenho das lajes

   (alert ">>Colocação das lajes na estrutura (pressione OK).")

   (command "layer" "n" "lajes" "color" "40" "lajes" "s" "lajes" "")

   (command "color" "bylayer")

   (setq numero7 "7") 

   (setq padrao (open "Obra atual.txt" "r"))

   (setq nome (read-line padrao))

   (close padrao)

   (setq extensao ".txt")

    (setq lajes1 (strcat nome numero7 extensao))

    (setq lajes (open lajes1 "r"))

    (while (setq coord (read-line lajes))

    (setq esp  (substr coord 9 11))             ; espessura da laje

    (setq nivel1 (read (substr coord 56 11)))

    (setq nivel (* nivel1 100))

    (setq espessura (atof esp))             

    (setq x1laje (read (substr coord 74 13)))

    (setq y1laje (read (substr coord 90 13)))

    (setq P1 (list x1laje y1laje nivel))     

    (setq Lx1 (substr coord 25 11))

    (setq Ly1 (substr coord 41 11))

    (setq Lx (atof Lx1))

    (setq Ly (atof Ly1))

    (setq X2 (+ x1laje Lx))

    (setq Y2 (- y1laje Ly))

    (setq P2 (list X2 Y2 nivel))

    (command "rectangle" P1 P2 "")

    (setq Rec (entlast))

    (setq F1a (* -1 espessura ))

    (command "extrude" Rec "" F1a "" 0 "")

    (setq Lbloco (entlast))

      )

  (close lajes)

  ;Carregamento do módulo PAREDES;

  (alert "Para inserir as paredes na estrutura, após pressionar OK digite a palavra 'paredes3D' no prompt de comando.")

  (setq a (findfile "Programa FORMAS_A_3D"))

  (setq b "\\paredes3d.lsp")

  (setq arquivop (strcat a b))

  (load arquivop)

  )