-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathDesenha corte - Terminar.LSP
338 lines (232 loc) · 6.96 KB
/
Desenha corte - Terminar.LSP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
;;Objetvo: Desenhar paredes, laje, portas e janelas de um corte.
;;Autor: Guilherme Alves Araujo
;;Data: 01/05/19
;função principal
(defun c:desenhaCorte(/ pontos targets target )
(load "VerificaLayer.lsp")
(setq cont 1
cont1 1
linhaCorte nil
opcao (list "Parede" "POrta" "Janela")
opAtual (nth 0 opcao)
)
;Não está repetindo.
(while (= cont1 1)
(setq linhaCorte (entget (car (entsel "\nSelecione a linha de corte: "))))
(setq testeLinha linhaCorte)
(if testeLinha
(setq cont1 0)
)
)
(while (/= cont 0)
(initget 128)
(setq ponto (getpoint "\nSelecione as interseções das paredes com a linha de corte: "))
(if (= 'LIST (type ponto))
(progn
(setq pontos (cons ponto pontos))
;Desenha os pontos de referência, para não selecionar repetido.
(setvar "pdmode" 35)
(setq target (entmake (list (cons 0 "point") (cons 62 1) (cons 10 ponto))))
(setq targets (cons (entlast) targets))
(setq cont (1+ cont))
(princ)
)
(if (= ponto nil)
(progn
(foreach n targets
(entdel n) ;Para esse comando funcionar devemos usar o "name" da entidade.
)
(setq cont 0)
(setvar "pdmode" 0)
(derivaDistancia)
)
)
)
)
)
;;;-----------------------------------------------------------------------------------------------------------------------------------------------;;
(defun derivaDistancia(/ vetorXY )
;Testa a posição do corte.
(setq xi (cadr (assoc 10 linhaCorte))
yi (caddr (assoc 10 linhaCorte))
xf (cadr (assoc 11 linhaCorte))
yf (caddr (assoc 11 linhaCorte))
)
;Vertical
;;; (if (= yi yf)
;;; (progn
;;; (foreach n pontos
;;; (setq vetorXY (cons (car n) vetorXY))
;;; )
;;; )
;;; (progn
;;; (if (/= yi yf)
;;; (progn
;;; (foreach n pontos
;;; (setq vetorXY (cons (cadr n) vetorXY))
;;; )
;;; )
;;; (prompt "Erro na seleção da linha de corte!")
;;; )
;;; )
;;; )
(cond
(
(/= yi yf)
(foreach n pontos
(setq vetorXY (cons (cadr n) vetorXY))
)
)
(
(= yi yf)
(foreach n pontos
(setq vetorXY (cons (car n) vetorXY))
)
)
(t (princ "Erro na seleção da linha de corte! - 2"))
)
;Setar as distancias
(setq aux (nth 0 vetorXY)
distancias nil
)
(foreach n vetorXY
(setq distancias (cons (- aux n) distancias))
(setq aux n)
)
(setq distancias (cons 0 distancias))
;inverte a lista
;(setq dist nil)
;;; (foreach n distancias
;;; (setq dist (cons n dist))
;;; )
;(princ distancias)
(desenhaParede)
)
;;;-----------------------------------------------------------------------------------------------------------------------------------------------;;
(defun desenhaParede(/ pSup pInf )
;Pé Direito
(setq pDirPadrao "2.70")
(setq pDireito (getreal (strcat "Digite o pé direito <" pDirPadrao ">: ")))
(if (not pDireito) (setq pDireito (atof pDirPadrao)))
;Questiona laje, forro ou nada.
(setq Teto (list "Laje" "Forro" "Nada")) ;Vetor do opAtual1.
(if (not opAtual1)
(progn
(setq opAtual1 (nth 0 Teto))
;(setq opTeto "L")
)
;Se existir.
)
(initget 128)
(setq opTeto (getkword (strcat "Especifique o tipo de teto [Laje/Forro/Nada] <" opAtual1 ">: ")))
;;Condicional que funciona apenas se o valor de opTeto for nil, ou seja, apertei ENTER.
(if (not opTeto)
(progn
(cond
((= opAtual1 "Laje") (setq opTeto "L"))
((= opAtual1 "Forro") (setq opTeto "F"))
((= opAtual1 "Nada") (setq opTeto "N"))
(t (princ "Opção Inválida!"))
)
)
)
(cond
(
(= (strcase opTeto) "L")
(setq opAtual1 (nth 0 Teto))
(setq esp (getreal (strcat "Informe a espessura da Laje <" (setq LajPadrao "0.10") ">: ")))
(if (not esp) (setq esp (atof LajPadrao)))
)
(
(= (strcase opTeto) "F")
(setq opAtual1 (nth 1 Teto))
(setq esp (getreal (strcat "Informe a espessura do Forro <" (setq ForrPadrao "0.03") ">: ")))
(if (not esp) (setq esp (atof ForrPadrao)))
)
(
(= (strcase opTeto) "N")
(setq opAtual1 (nth 2 Teto))
)
(t (princ "Opção Inválida!"))
)
(setq pontoIn (getpoint "Clique no ponto de inserção: "))
;Desenha linhas das paredes.
(verificaLayer "Parede" "6")
(setq pSup1 (polar pontoIn (/ pi 2) pDireito) ;Ponto final da primeira linha desenhada.
pInf1 pontoIn
)
(setq linhas nil)
(foreach n distancias
(if (/= n 0)
(setq pInf (polar pInf1 0 n)
pSup (polar pSup1 0 n)
)
(setq pInf pInf1
pSup pSup1
)
)
(setq linhas (cons (entmake (list (cons 0 "line") (cons 8 "Parede") (cons 10 pInf) (cons 11 pSup))) linhas))
(setq pSup1 pSup
pInf1 pInf
)
)
;Desenha base e laje (ou forro)
(setq xTeste1 (cadr (assoc 10 (nth 0 linhas)))
xTeste2 (cadr (assoc 10 (nth 0 linhas)))
entExterna1 (nth 0 linhas)
entExterna2 (nth 0 linhas)
)
(foreach n linhas
(setq xAux (cadr (assoc 10 n)))
;Analisa e seta a entidade externa 1.
(if (> xTeste1 xAux)
(setq entExterna1 n
xTeste1 xAux
)
)
;Analisa e seta a entidade externa 2.
(if (< xTeste2 xAux)
(setq entExterna2 n
xTeste2 xAux
)
)
)
;Base
(setq pBase1 (cdr (assoc 10 entExterna1))
pBase2 (cdr (assoc 10 entExterna2))
)
(setq pBaseIni (polar pBase1 pi 0.5)
pBaseFim (polar pBase2 0 0.5)
)
(entmake (list (cons 0 "line") (cons 8 "Parede") (cons 10 pBaseIni) (cons 11 pBaseFim)))
(setq baseOff (polar pBase1 (/ (* 3 pi) 2) 1))
(command "._offset" 0.03 (entlast) baseOff "")
;Laje ou Forro
(setq pLaje1 (cdr (assoc 11 entExterna1))
pLaje2 (cdr (assoc 11 entExterna2))
pLajeTR1 (polar pLaje1 0 0.02)
pLajeTR2 (polar pLaje2 pi 0.02)
)
;pergunta se é laje ou forro ou nada.
(cond
(
(= (strcase opTeto) "L")
(entmake (list (cons 0 "line") (cons 8 "Parede") (cons 10 pLaje1) (cons 11 pLaje2)))
(command "._offset" esp "_non" (entlast) "_non" "@0,-1" "")
(command "._trim" "" "f" pLajeTR1 pLajeTR2 "" "")
)
(
(= (strcase opTeto) "F")
(entmake (list (cons 0 "line") (cons 8 "Parede") (cons 10 pLaje1) (cons 11 pLaje2)))
(command "._offset" esp "_non" (entlast) "_non" "@0,-1" "")
;(command "._trim" "" "f" pLajeTR1 pLajeTR2 "" "")
)
(
(= (strcase opTeto) "N")
(entmake (list (cons 0 "line") (cons 8 "Parede") (cons 10 pLaje1) (cons 11 pLaje2)))
)
(t (princ "Opção Inválida!"))
)
(setvar "clayer" "0")
(princ)
)