

;=====================================================================================================================================================
;																									
;	( PIEL-08 )	 		GRAFICA LOGARIZMICA (DISTANCIA INTERSECCION TANGENTES A CENTRO TRAZA)									
;																									
;																									
;					** SPLINES-PLANAS ** ABIERTAS ** en PLANOS NO PARALELOS **											
;																									
;					(SPLI-X)    Divide (NşDIVI) (SPLINE-A) (SPLINE-B) => Puntos ( LIS-PA ) ( LIS-PB )							
;																									
;					(TRAZA-AB)  INTERSECCION PLANOS SPLINE-A SPLINE-B => (TRAZ-1) (TRAZ-2)									
;																									
;					(P-LIMITE)  PUNTOS LIMITE DE TRAMOS ENTRE INFINITOS => Puntos (LIS-InfiA) (LIS-InfiB)						
;																									
;					(LIS-PARES) EMPAREJA PUNTOS LIMITE-INFINITO DE (A) y (B) PARA FORMAR TRAMOS FUERA DEL INFINITO => (LIS-PARES)		
;																									
;					FORMA LISTAS A y B de Nş de ORDEN ( LISTA-NşA  LISTA-NşB ) POR TRAMOS FUERA DEL INFINITO						
;																									
;					DETERMINA GENERATRICES POR TRAMO con (TANGENTE a CIRCULO OSCULADOR * 3P * desde INTER-TRAZA PPA22) ???			
;																									

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



;=====================================================================================================================================================
;									*** ***  SUB-PROGRAMAS  *** ***											
;=====================================================================================================================================================

;																									
;	SPLINE-X   DIVIDE (NşDIVI) => ( LIS-PX )  																	

	(DEFUN SPLI-X ( / )

		(SETQ ALIS  (ENTGET NX00))  									; lista Spline A
		(SETQ AELE  (ASSOC 10 ALIS))  								; 1ş Punto Asociado a 10 (10.punto)
		(SETQ AELES (MEMBER AELE ALIS)) 								; lista a partir del Alterior (10.punto)....(11.punto)
		(SETQ X-primer (CDR (NTH 0 AELES))) 							; primer elemento (10.punto)
		(SETQ X-ultimo (CDR (NTH (- (LENGTH AELES) 1) AELES)))				; ultimo elemento (11.punto)
		(COMMAND "COLOR" COLO "TEXTO" X-primer 0.2 90 TEX)					; TEXTO = A
		(COMMAND "PUNTO" X-primer)									; PINTA 1Ş punto A
		(SETQ N-enti-A1 (ENTLAST))									; nombre ultima entidad principal 1ş punto A
		(COMMAND "DIVIDE" NX00 NşDIVI)									; Divide SPLI-A
		(COMMAND "PUNTO" X-ultimo)									; PINTA Ultimo Punto A
	
		;	PUNTOS SECCION-A (PA1-PAn) =>   LIS-PX  Lon-LPA															
		(SETQ LIS-PX nil)											; LISTA  PUNTOS-A
		(SETQ LIS-PX (CONS (CDR (ASSOC 10 (ENTGET N-enti-A1))) LIS-PX))			; lista entidad -> (1ş Punto-A)
		(SETQ W1A T)
		(WHILE W1A
			(SETQ N-enti-A2 (ENTNEXT N-enti-A1))						; Nombre entidad siguiente
			(COMMAND "BORRA" N-enti-A1 "")
			(IF (= N-enti-A2 nil)  (SETQ W1A nil)
				(PROGN
					(SETQ LIS-PX (CONS (CDR (ASSOC 10 (ENTGET N-enti-A2))) LIS-PX))
					(SETQ N-enti-A1  N-enti-A2 )
				);progn
			);if
		) ;While W1A
		;	LISTA ( LIS-PX )																				
		(SETQ LIS-PX  (REVERSE LIS-PX))
		(SETQ NşPX (LENGTH LIS-PX))			; LIS-PX = 175+1 =

		;	LISTA ( LIS-PX )																				


		;	PINTA PUNTOS LIS-PX (COMPROVACION)																
	  
		(SETQ N1 -1 )
		(REPEAT (LENGTH LIS-PX)
			(SETQ N1 (+ N1 1))
			(SETQ PAAn (NTH N1 LIS-PX))
			(COMMAND "COLOR" COLO "PUNTO" PAAn  "TEXTO" PAAn 0.03 90 N1)
		) ; repeat

		;																							

	) ; Defun SPLI-X

;																									



;																									
;	Puntos ** TRAZA ** de PLANOS de Secciones (A) y (B) => (TRAZ-1) (TRAZ-2)												

	(DEFUN TRAZA-AB ( / )

		(COMMAND "SCP" "B" NA00 )		; PLANO S-a
 			(SETQ Sa0 (TRANS (LIST    0   0 0) 1 0))
 			(SETQ Sa1 (TRANS (LIST  100 100 0) 1 0))
 			(SETQ Sa2 (TRANS (LIST -100 100 0) 1 0))
		(COMMAND "SCP" "U")

		(COMMAND "SCP" "B" NB00 )		; PLANO S-b
 			(SETQ Sa0b (TRANS Sa0 0 1))
 			(SETQ Sa1b (TRANS Sa1 0 1))
 			(SETQ Sa2b (TRANS Sa2 0 1))
 			(SETQ Sb0 (TRANS (LIST (CAR Sa0b) (CADR Sa0b) 0) 1 0))
 			(SETQ Sb1 (TRANS (LIST (CAR Sa1b) (CADR Sa1b) 0) 1 0))
 			(SETQ Sb2 (TRANS (LIST (CAR Sa2b) (CADR Sa2b) 0) 1 0))
		(COMMAND "SCP" "U")


		(SETQ TRAZ-1  (INTERS Sa0 Sa1 Sb0 Sb1 nil))
		(SETQ TRAZ-2  (INTERS Sa0 Sa2 Sb0 Sb2 nil))

		(SETQ TRAZ-12 (LIST 	(+ (CAR   TRAZ-2) (/ (- (CAR   TRAZ-1) (CAR   TRAZ-2)) 2 ))
						(+ (CADR  TRAZ-2) (/ (- (CADR  TRAZ-1) (CADR  TRAZ-2)) 2 ))
						(+ (CADDR TRAZ-2) (/ (- (CADDR TRAZ-1) (CADDR TRAZ-2)) 2 )) ) )

		;	(COMMAND "COLOR" 7 "LINEA" TRAZ-1 TRAZ-2 "" )

	) ; Defun TRAZA-AB

;																									



;	PUNTOS LIMITE DE TRAMOS ENTRE INFINITOS																		

	(DEFUN P-LIMITE ( / )

		(COMMAND "SCP" "3P" TRAZ-12 TRAZ-1 (NTH 0 LIS-Po) )								; PLANO TRAZ-SPLINE-X

			(SETQ LIS-InfiX nil)
			(SETQ Nff -1 )
			(REPEAT (LENGTH LIS-Po)											; *** REPEAT LIS-Po

				(SETQ Nff (+ Nff 1))
				(SETQ Pf0 (NTH (REM (+ Nff 0) (LENGTH LIS-Po)) LIS-Po))					; PUNTO Nff+0
				(SETQ Pf1 (NTH (REM (+ Nff 1) (LENGTH LIS-Po)) LIS-Po))					;   "   Nff+1
				(SETQ Pf2 (NTH (REM (+ Nff 2) (LENGTH LIS-Po)) LIS-Po))					;   "   Nff+2

				(SETQ Pf0t (TRANS Pf0 0 1))										; PUNTO Nff+0 PLANO TRAZ-A 
				(SETQ Pf1t (TRANS Pf1 0 1))										;   "   Nff+1   "     "    
				(SETQ Pf2t (TRANS Pf2 0 1))										;   "   Nff+2   "     "    

				(SETQ Ag01 (ANGLE Pf0t Pf1t ))
				(SETQ Ag12 (ANGLE Pf1t Pf2t ))

				(COND
					( (AND (< 0  Ag01      PI ) 	(< PI Ag12 (* 2 PI)))

					 	(COMMAND "COLOR" 7 "CIRCULO" Pf1t 0.05)  (SETQ LIS-InfiX (CONS (LIST (+ Nff 1) 'ARR  Pf1 ) LIS-InfiX)) )

					( (AND (< PI Ag01 (* 2 PI)) 	(< 0  Ag12      PI ))

					 	(COMMAND "COLOR" 9 "CIRCULO" Pf1t 0.05)  (SETQ LIS-InfiX (CONS (LIST (+ Nff 1) 'ABA  Pf1 ) LIS-InfiX)) )
				) ;cond

			  
			) ; repeat
 
		(COMMAND "SCP" "U")
 
		(SETQ LIS-InfiX (REVERSE LIS-InfiX))				;  (LENGTH LIS-InfiX)

	) ; Defun P-LIMITE

;																									





;=====================================================================================================================================================
;=====================================================================================================================================================
;																									
;	  *** PROGRAMA *** PROGRAMA *** PROGRAMA *** PROGRAMA *** PROGRAMA *** PROGRAMA *** PROGRAMA *** PROGRAMA *** PROGRAMA *** PROGRAMA ***		
;																									
;=====================================================================================================================================================
;=====================================================================================================================================================

(DEFUN C:PIEL-08 (/ )
  
	;	ARRANCANDO																						
	(SETVAR "blipmode" 0) (SETVAR "cmdecho" 0) (GRAPHSCR) (COMMAND "-REFENT" "DES"  "SCP" "U"  "ORTO" "DES")

	;	NOMBRE DE CAPAS																					

	;(SETQ NşCapa  (GETINT " NOMBRE de CAPA (461 ?) = ")) (TERPRI)		; Nş NOMBRE DE 1Ş CAPA
	;(SETQ NşCapa (- NşCapa 1))
	;(SETQ Wca T)

	;(WHILE Wca

		;(SETQ NşCapa (+ NşCapa 1))
		;(COMMAND "CAPA" "E" NşCapa "") 										; crea y activa capa NşCapa

		;	SELECCCION DE SECCIONES																			
  
		(TERPRI) (SETQ NA00  (CAR (ENTSEL" MARCA --- SPLINE ABIERTA-3D --- SECCION-A ? "))) 	; nombre Spline A 
		(TERPRI) (SETQ NB00  (CAR (ENTSEL" MARCA --- SPLINE ABIERTA-3D --- SECCION-B ? "))) 	; nombre Spline B 

		;-----------------------------------------------------------------------------------------------------------------------------------------
		;	FIJA PARAMETROS																				

		(SETQ NşDIVI   (FIX (/ 35.0  0.2)) )						; Nş de Partes de DIVIDE ( Long-Spline / 0.2 ) = 175 

		;-----------------------------------------------------------------------------------------------------------------------------------------


		;																							
		;	CALCULOS																					

		(TERPRI) (SETQ NX00 NA00  COLO 1 TEX "A" )  (SPLI-X)  (SETQ LIS-PA LIS-PX)	; Divide (SPLINE-A) => Puntos ( LIS-PA )
		(TERPRI) (SETQ NX00 NB00  COLO 5 TEX "B" )  (SPLI-X)  (SETQ LIS-PB LIS-PX)	; Divide (SPLINE-B) => Puntos ( LIS-PB )

		(TRAZA-AB)											; INTERSECCION PLANOS SPLINE-A SPLINE-B => (TRAZ-1) (TRAZ-2)

		(SETQ LIS-Po LIS-PA) (P-LIMITE) (SETQ LIS-InfiA LIS-InfiX)			; PUNTOS LIMITE DE TRAMOS ENTRE INFINITOS => Puntos ( LIS-InfiA )
		(SETQ LIS-Po LIS-PB) (P-LIMITE) (SETQ LIS-InfiB LIS-InfiX)			; PUNTOS LIMITE DE TRAMOS ENTRE INFINITOS => Puntos ( LIS-InfiB )

		;																							

			; REFERENCIA (COMPROVACION)

			;'LIS-InfiA (QUOTE ((50 ABA ) (85 ARR ) (88 ABA ) (90 ARR ) (125 ABA ) (176 ARR )))

					;	 ((50 ABA (0.131434 10.6669 1.80599)) (85 ARR (7.0101 11.0884 2.85939))   ( 88 ABA (7.60126 11.0016 2.91552))
  					;	  (90 ARR (7.99579 10.9475 2.95404))  (125 ABA (14.5411 8.55525 3.17514)) (176 ARR (7.90276 15.2309 4.13942)))

			;'LIS-InfiB (QUOTE ((51 ABA )                     (91 ARR ) (124 ABA ) (175 ARR )))

					;	 ((51 ABA (0.915224 10.4775 2.50797))
					;	  (91 ARR (8.0589   10.7252 3.71956)) (124 ABA (13.7125 8.71969 3.76464)) (175 ARR (7.88988 14.6987 5.34252)))

			;'LIS-PARES (QUOTE ((50 51)   (85 nil)  (88 nil)  (90 91)   (125 124)  (176 175)))

				  ;((176 175) (50 51)   (85 nil)  (88 nil)  (90 91)   (125 124)  (176 175))

  

		;	EMPAREJA PUNTOS LIMITE-INFINITO DE (A) y (B) PARA FORMAR TRAMOS FUERA DEL INFINITO => (LIS-PARES)						

  		(SETQ LIS-PARES nil)
		(SETQ N6 -1)
		(REPEAT (LENGTH LIS-InfiA)
			(SETQ N6 (+ N6 1))

			(SETQ PfA (NTH N6 LIS-InfiA))				;  ( (+ Nff 1) 'ABA  Pf1 )
			(SETQ QA1 (CAR   PfA))
			(SETQ QA2 (CADR  PfA))
			(SETQ QA3 (CADDR PfA))

			(SETQ DIS-Q 10000)
			(SETQ QA1m nil)
			(SETQ QB1m nil)
			(SETQ N7 -1)
			(REPEAT (LENGTH LIS-InfiB)
				(SETQ N7 (+ N7 1))

				(SETQ PfB (NTH N7 LIS-InfiB))			;  ( (+ Nff 1) 'ABA  Pf1 )
				(SETQ QB1 (CAR   PfB))
				(SETQ QB2 (CADR  PfB))
				(SETQ QB3 (CADDR PfB))

				(COND
					( (AND (< (DISTANCE QA3 QB3) DIS-Q ) (= QA2 QB2) )  (SETQ  DIS-Q (DISTANCE QA3 QB3)  QA1m QA1  QB1m QB1) )
				) ;cond
			) ;repeat

			(COND
				( (> (ABS (- QA1m QB1m)) 3)  (SETQ LIS-PARES (CONS (LIST QA1m  nil ) LIS-PARES)) )
				( (< (ABS (- QA1m QB1m)) 3)  (SETQ LIS-PARES (CONS (LIST QA1m QB1m ) LIS-PARES)) )
			) ;cond
		) ;repeat
  
		(SETQ LIS-PARES (REVERSE LIS-PARES))						    ; ( (50 51) (85 nil) (88 nil) (90 91) (125 124) (176 175) )

		(SETQ LIS-PARES (CONS (NTH (- (LENGTH LIS-PARES) 1) LIS-PARES) LIS-PARES))	; AÑADE AL PRINCIPIO EL ULTIMO ( LIS-PARES )

													; ( (176 175) (50 51) (85 nil) (88 nil) (90 91) (125 124) (176 175) )

		;	PINTA LINEA ENTRE PARES (COMPROVACION)																
		(SETQ N7 -1)
		(REPEAT (LENGTH LIS-PARES)
			(SETQ N7 (+ N7 1))
			(SETQ P7 (NTH N7 LIS-PARES))				;  ( QA1m QB1m )
			(SETQ P7A (CAR   P7))
			(SETQ P7B (CADR  P7))
			(IF (AND (/= P7A nil) (/= P7B nil))

				(COMMAND "COLOR" 7 "LINEA" (NTH (REM P7A (LENGTH LIS-PA)) LIS-PA) (NTH (REM P7B (LENGTH LIS-PB)) LIS-PB) "")

			) ;if
		) ;repeat
		;																							

		;	FORMA LISTA DE PARAS SIN (nil)  => 	(LIS-PARE*1)														


		; A ( (176) ( 50) ( 85) ( 88) ( 90) (125) (176) )
		; B ( (175) ( 51) (nil) (nil) ( 91) (124) (175) )

		(SETQ LIS-PARE*1 nil)

  		(SETQ Wpa T)
		(SETQ Ne -1)

		(WHILE Wpa		

			(SETQ Ne (+ Ne 1))
			(SETQ ParAe (CAR  (NTH Ne LIS-PARES)) )
			(SETQ ParBe (CADR (NTH Ne LIS-PARES)) )

			(IF (AND (= ParAe nil) (= ParBe nil))  (SETQ Wpa nil)
			(PROGN

				(COND
					; Cond-1																			

					((AND (/= ParAe nil) (/= ParBe nil))  (SETQ LIS-PARE*1 (CONS (LIST ParAe ParBe) LIS-PARE*1)))

					; Cond-2																			

					((AND (/= ParAe nil) ( = ParBe nil))

						(SETQ ParAA ParAe) ; 85 

						(SETQ NeB Ne)      ; 2 
						(WHILE (= ParBe nil)

							(SETQ NeB (+ NeB 1))
							(SETQ ParBe (CADR (NTH NeB LIS-PARES)))
							(SETQ ParBB ParBe)
							(SETQ ParAe (CAR  (NTH NeB LIS-PARES)))
							(SETQ ParAA* ParAe)
						) ;while

						(SETQ LIS-PARE*1 (CONS (LIST ParAA  ParBB) LIS-PARE*1))  ; ((90 91) (85 91))
						(SETQ LIS-PARE*1 (CONS (LIST ParAA* ParBB) LIS-PARE*1))

						(SETQ Ne NeB )
					)

					; Cond-3																			

					((AND ( = ParAe nil) ( = ParBe nil))  (PROMPT "    *** LOS DOS SON (nil) en Ne= ") (PRIN1 Ne) (TERPRI))

					; Cond-4																			

					((AND ( = ParAe nil) (/= ParBe nil))

						(SETQ ParBB ParBe)

						(SETQ NeA Ne)
						(WHILE (= ParAe nil)

							(SETQ NeA (+ NeA 1))
							(SETQ ParAe (CAR  (NTH NeA LIS-PARES)))
							(SETQ ParAA ParAe)
							(SETQ ParBe (CADR (NTH NeA LIS-PARES)))
							(SETQ ParBB* ParBe)
						) ;while

						(SETQ LIS-PARE*1 (CONS (LIST ParAA ParBB ) LIS-PARE*1))
						(SETQ LIS-PARE*1 (CONS (LIST ParAA ParBB*) LIS-PARE*1))

						(SETQ Ne NeA )
					)

					;																				

				) ;cond

			) ;progn
			) ;if nil
		) ;While

		(SETQ LIS-PARE*1 (REVERSE LIS-PARE*1))

		;																							


		;	LIS-PARES	((176 175) (50 51) (85 nil) (88 nil) (90  91) (125 124) (176 175)) 
		;	LIS-PARE*1	((176 175) (50 51) (85  91) 		 (90  91) (125 124) (176 175)) 


		;LIS-PARES  (A) 	( (176) ( 50) ( 85) ( 88) ( 90) (125) (176) )
		;LIS-PARES  (B) 	( (175) ( 51) (nil) (nil) ( 91) (124) (175) )

		;LIS-PARE*1 (A)	( (176) ( 50) ( 85) 	  ( 90) (125) (176) )
		;LIS-PARE*1 (B)	( (175) ( 51) ( 91) 	  ( 91) (124) (175) )


		;	FORMA LISTAS A y B de Nş de ORDEN ( LISTA-NşA  LISTA-NşB ) POR TRAMOS FUERA DEL INFINITO								


		(SETQ LIS-NşAA nil) 
		(SETQ LIS-NşBB nil) 


		; (SETQ Np 0)

		(SETQ Np -1)
		(REPEAT (- (LENGTH LIS-PARE*1) 1)		;(- (LENGTH LIS-PARE*1) 1)

			(SETQ Np (+ Np 1))
															; 	  |-------|-------|-------|-------|-------|
															; Np  = | 0 ->1 | 1 ->2 | 2 ->3 | 3 ->4 | 4 ->5 |
															;	  |-------|-------|-------|-------|-------|
			(SETQ ParA1  (REM (CAR  (NTH    Np    LIS-PARE*1)) (+ NşDIVI 1)) )	; LIS-A | 0     | 50    | 85    | 90    | 125   |
			(SETQ ParA2  (REM (CAR  (NTH (+ Np 1) LIS-PARE*1)) (+ NşDIVI 1)) )	;	  |    50 |    85 |    90 |   125 |     0 |
															;	  |-------|-------|-------|-------|-------|
															; 	  |-------|-------|-------|-------|-------|
															; Np  = | 0 ->1 | 1 ->2 | 2 ->3 | 3 ->4 | 4 ->5 |
															;	  |-------|-------|-------|-------|-------|
			(SETQ ParB1  (REM (CADR (NTH    Np    LIS-PARE*1)) (+ NşDIVI 1)) )	; LIS-B | 175   | 51    | 91    | 91    | 124   |
			(SETQ ParB2  (REM (CADR (NTH (+ Np 1) LIS-PARE*1)) (+ NşDIVI 1)) )	;	  |    51 |    91 |    91 |   124 |   175 |
															;	  |-------|-------|-------|-------|-------|
			; LIS-PARE*1   ((176 175) (50 51) (85 91) (90 91) (125 124) (176 175))


			(SETQ LIS-NşA nil) 
		  	(SETQ Na (- ParA1 1))

			(REPEAT (REM (+ (+ (- (+ NşDIVI 1) ParA1) ParA2) 1) (+ NşDIVI 1))

				(SETQ Na (+ Na 1))

				(SETQ LIS-NşA (CONS (REM Na (+ NşDIVI 1)) LIS-NşA))
	
			) ;repeat

			(SETQ LIS-NşA (REVERSE LIS-NşA))   	; (0 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)


			(SETQ LIS-NşB nil) 

		  	(SETQ Nb (- ParB1 1))

			(REPEAT (REM (+ (+ (- (+ NşDIVI 1) ParB1) ParB2) 1) (+ NşDIVI 1))

				(SETQ Nb (+ Nb 1))

				(SETQ LIS-NşB (CONS (REM Nb (+ NşDIVI 1)) LIS-NşB))

			) ;repeat

			(SETQ LIS-NşB (REVERSE LIS-NşB))	; (175 0 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)


			(SETQ LIS-NşAA (CONS LIS-NşA LIS-NşAA))
			(SETQ LIS-NşBB (CONS LIS-NşB LIS-NşBB))

		) ;repeat

		(SETQ LIS-NşAA (REVERSE LIS-NşAA))
		(SETQ LIS-NşBB (REVERSE LIS-NşBB))

		;																							


	;																								
	;	DETERMINA GENERATRICES POR TRAMO con (TANGENTE a CIRCULO OSCULADOR desde INTER-TRAZA)									
	;																								


	(COMMAND "SCP" "B" NB00 )											; PLANO SPLINE-B 

	(COMMAND "CAPA" "DES" (CDR (ASSOC 8 ALIS)) "") 								; DESCONECTA CAPA SPLINES por "LINEA" "TAN"



	(SETQ NNşR -1 )

	(REPEAT (LENGTH LIS-NşAA)

		(SETQ NNşR (+ NNşR 1))

		(SETQ LIS-NşA-1 (NTH NNşR LIS-NşAA))
		(SETQ LIS-NşB-1 (NTH NNşR LIS-NşBB))

		(IF ( AND (> (LENGTH LIS-NşA-1) 2) (> (LENGTH LIS-NşB-1) 2) )
		(PROGN

		;																	

		(SETQ NNşa  0 )
		(SETQ NNşb  0 )
  		(SETQ NNBB  0 )
		(SETQ Waa   T )

		(WHILE Waa

			(SETQ NNşa (+ NNşa 1))

			(IF (= (NTH (+ NNşa 1) LIS-NşA-1) nil)  (SETQ Waa nil)
			(PROGN

				(SETQ PPA1  (NTH (NTH (- NNşa 1) LIS-NşA-1) LIS-PA))  				; LIS-NşA-1 = 51 
				(SETQ PPA2  (NTH (NTH (+ NNşa 0) LIS-NşA-1) LIS-PA))
				(SETQ PPA3  (NTH (NTH (+ NNşa 1) LIS-NşA-1) LIS-PA))


				;	TAGGENTE-SPLINE-A en PPA2 = ( PPA2 PPA22 ) Paralela a ( PPA1 PPA3 )									

				(SETQ PPA22 (LIST
						 	(+ (CAR   PPA2) (- (CAR   PPA3) (CAR   PPA1) ))
						 	(+ (CADR  PPA2) (- (CADR  PPA3) (CADR  PPA1) ))
						 	(+ (CADDR PPA2) (- (CADDR PPA3) (CADDR PPA1) )) ))

				(SETQ IN-TraA nil)

				(SETQ IN-TraA (INTERS PPA2 PPA22  TRAZ-1 TRAZ-2 nil))				; SCU 

				(IF (/= IN-TraA nil)
				(PROGN

 					(SETQ PPA2-b    (TRANS PPA2    0 1))						; Puntos TAG-A
 					(SETQ IN-TraA-b (TRANS IN-TraA 0 1))						; SCP 

					(SETQ TTAA nil )
					(SETQ TTBB nil )

					(SETQ CUENTA 0)
					;(SETQ DISm 100000.0)
					(SETQ Wbb  T )

					(WHILE Wbb

						(SETQ NNşb (+ NNşb 1))

						(SETQ CUENTA (+ CUENTA 1))

						(IF (OR (= (NTH (+ NNşb 1) LIS-NşB-1) nil) (> CUENTA 1000 ) )  (SETQ Wbb nil)	; *********** LIMITE ( CUENTA )
						(PROGN

							(SETQ PPB1  (NTH (NTH (- NNşb 1) LIS-NşB-1) LIS-PB))		; LIS-NşB-1 = 53 
							(SETQ PPB2  (NTH (NTH (+ NNşb 0) LIS-NşB-1) LIS-PB))
							(SETQ PPB3  (NTH (NTH (+ NNşb 1) LIS-NşB-1) LIS-PB))

 							(SETQ PPB1-b  (TRANS PPB1 0 1))
 							(SETQ PPB2-b  (TRANS PPB2 0 1))
 							(SETQ PPB3-b  (TRANS PPB3 0 1))

							;	PUNTOS MEDIOS entre PPB1-b PPB2-b PPB3-b => ( PB12Mb PB23Mb )							

							(SETQ PB12Mb  (LIST	(+ (CAR   PPB1-b) (/ (- (CAR   PPB2-b) (CAR   PPB1-b)) 2))
											(+ (CADR  PPB1-b) (/ (- (CADR  PPB2-b) (CADR  PPB1-b)) 2)) 0))
							(SETQ PB23Mb  (LIST	(+ (CAR   PPB2-b) (/ (- (CAR   PPB3-b) (CAR   PPB2-b)) 2))
											(+ (CADR  PPB2-b) (/ (- (CADR  PPB3-b) (CADR  PPB2-B)) 2)) 0))

							;	PERPENDICULAR AL PUNTO MEDIO ** ( PB12Pb PB23Pb )									

							(SETQ PB12Pb (LIST
								(+ (CAR  PB12Mb) (- (CADR PPB2-b) (CADR PB12Mb)) )
								(- (CADR PB12Mb) (- (CAR  PPB2-b) (CAR  PB12Mb)) ) 0))

							(SETQ PB23Pb (LIST
								(+ (CAR  PB23Mb) (- (CADR PPB3-b) (CADR PB23Mb)) )
								(- (CADR PB23Mb) (- (CAR  PPB3-b) (CAR  PB23Mb)) ) 0))

							;	INTERSECCION PERPENDICULARES Medias (CENTRO CIRCULO OSCULADOR) ( IN-B123*b )					

							(SETQ IN-B123*b (INTERS PB12Mb PB12Pb  PB23Mb PB23Pb nil))	; SCP


							(IF (/= IN-B123*b nil)
							(PROGN

								;	PUNTO MEDIO	DE PUNTOS MEDIOS ( PB1223MMb ) = Centro Cuerda (PB12Mb PB23Mb)				

								(SETQ PB1223MMb  (LIST	(+ (CAR   PB12Mb) (/ (- (CAR   PB23Mb) (CAR   PB12Mb)) 2))
												(+ (CADR  PB12Mb) (/ (- (CADR  PB23Mb) (CADR  PB12Mb)) 2)) 0))


								;	CIRCULOS TANGENTES													

								(SETQ Ncirculo nil )

								(COMMAND "COLOR" 255 "CIRCULO"  IN-B123*b PB12Mb ) (SETQ Ncirculo  (ENTLAST))

								(IF (/= Ncirculo nil)			; (ENTGET Ncirculo) Comprovacion
								(PROGN

									(SETQ RADIO         (CDR (ASSOC 40 (ENTGET Ncirculo)))             )
									(SETQ CENTR  (TRANS (CDR (ASSOC 10 (ENTGET Ncirculo))) Ncirculo 1) )

									;	*** TANGENTE POSIBLE:  PUNTO ( IN-TraA-b ) FUERA del CIRCULO					

									(IF (> (DISTANCE IN-TraA-b CENTR) RADIO)	
									(PROGN

										(SETQ NlineaT nil )

										(COMMAND "COLOR" 255 "LINEA" "TAN" PB12Mb IN-TraA-b "") (SETQ NlineaT (ENTLAST))

										(IF (/= NlineaT nil)
										(PROGN

											(SETQ P-TaG-b  (TRANS (CDR (ASSOC 10 (ENTGET NlineaT))) 0 1)) ; SCP 



											;	*** (DIS Centro-Cuerda P-Tag) <= (Semi-Cuerda)						

											(IF (<= (DISTANCE PB1223MMb P-TaG-b) (DISTANCE PB1223MMb PB12Mb) )
											(PROGN

												;(SETQ DISab (DISTANCE PPA2 PPB2))

												;(IF (< DISab DISm)
												;(PROGN

													;(SETQ DISm  DISab    )
													;(SETQ TT00  IN-TraA-b)
													(SETQ TTAA  PPA2-b   )
													(SETQ TTBB  P-TaG-b  )
													(SETQ NNBB  NNşb     )

													(SETQ Wbb nil)

												;) ;progn
												;) ;if DISab

											) ;progn
											) ;if PB1223MMb

											(COMMAND "BORRA" NlineaT "")

										) ;progn
										) ;if NlineaT
									) ;progn
									) ;if RADIO

									(COMMAND "BORRA" Ncirculo   "")

								) ;progn
								) ;if Ncirculo
							) ;progn
							) ;if IN-B123*U
						) ;progn
						) ;if NNşb
					) ;while wbb

					(IF (AND (/= TTAA nil) (/= TTBB nil) )

						(PROGN
							;(COMMAND "COLOR" 8 "LINEA" TTAA TTBB "")

							(COND 
								(  (= NNşa 1 )
									(SETQ   TTAA1 TTAA  TTBB1 TTBB )  )

								(  (> NNşa 1 )
									(SETQ   TTAA2 TTAA   TTBB2 TTBB  )
									(COMMAND "COLOR" 2 "3DCARA" TTBB1 TTAA1 TTAA2 TTBB2 "")
									(SETQ   TTAA1 TTAA2  TTBB1 TTBB2 )
								)
							) ;cond

							(SETQ NNşb NNBB)

						) ;progn

							(SETQ NNşb NNBB)

					) ;if TTAA
				) ;progn
				) ;if IN-TraA
			) ;progn
			) ;if NNşa
		) ;while Waa

		) ;progn
		) ;if LENGTH
	) ;Repeat LIS-NşAA
	(COMMAND "SCP" "U")

	;																								


	;	(TERPRI) (TERPRI) 
	;	(SETQ NW1 (GETSTRING "QUIERE SEGUIR (S) o N : "))
	;	(IF (EQUAL NW1 "N") (SETQ Wca nil) (SETQ Wca T))

	;) ;CIERRE WHILE Wca
  
	;																								

	;	PARANDO																						
	(SETVAR "blipmode" 1) (SETVAR "cmdecho" 1)

) ;CIERRE DEFUN PIEL-08

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



