(defun sgnerr (ch / )
	(cond
		((eq ch "Function cancelled") nil)
		((eq ch "quit / exit abort") nil)
		((eq ch "console break") nil)
		(T (princ ch))
	)
	(setq *error* olderr)
	(setvar "cmdecho" oldcmd)
	(princ)
)
(defun c:hzoff ( / oldcmd)
	(setq oldcmd (getvar "cmdecho"))
	(setvar "cmdecho" 0)
	(setvar "plinewid" 0.0)
	(setvar "celtype" "BYLAYER")
	(command "_.redefine" "polylign")
	(command "_.redefine" "_pline")
	(prompt "\nCommande POLYLIGN redéfinie en standard")
	(setvar "cmdecho" oldcmd)
	(prin1)
)
(defun c:hzon ( / oldcmd)
	(setq oldcmd (getvar "cmdecho"))
	(setvar "cmdecho" 0)
	(command "_.undefine" "polylign")
	(command "_.undefine" "pline")
	(prompt "\nCommande POLYLIGN redéfinie en mode signalisation horizontale")
	(setvar "cmdecho" oldcmd)
	(prin1)
)
(defun c:pline ()
	(c:polylign)
)
(defun c:polylign ( / oldcmd entry wid_pl mod_tl)
	(setq oldcmd (getvar "cmdecho"))
	(setq olderr *error* *error* sgnerr)	
	(setvar "cmdecho" 0)
	(while (not wid_pl)
		(setq entry
			(getstring
				(strcat
					"\nDonner le type de U à tracer ou largeur de en cm [2U/3U/5U/50/25/15/10] <"
					(getvar "users1")
					"> : "
				)
			)
		)
		(if (= entry "")
			(setq entry (getvar "users1"))
		) 
		(cond
			((or (= entry "2U")(= entry "2u"))
				(setq wid_pl (* 2.0 (getvar "userr1")))
				(setvar "users1" "2U")
			)
			((or (= entry "3U")(= entry "3u"))
				(setq wid_pl (* 3.0 (getvar "userr1")))
				(setvar "users1" "3U")
			)
			((or (= entry "5U")(= entry "5u"))
				(setq wid_pl (* 5.0 (getvar "userr1")))
				(setvar "users1" "5U")
			)
			((or
				(eq (atof entry) 50)
				(eq (atof entry) 25)
				(eq (atof entry) 15)
				(eq (atof entry) 10)
			 )
				(setq wid_pl (* 0.01 (atof entry)))
				(setvar "users1" (rtos (atof entry) 2 0))
			)
			(T
				(prompt "\nLa valeur doit être 2U, 3U, 5U, 50cm, 25cm, 15cm ou 10cm")
				(setq wid_pl nil)
			)
		)
	)
	(setvar "plinewid" wid_pl)
	(if (= (getvar "users2") "") (setvar "users2" "CONTINU"))
	(initget "T1 TP1 T2 TP2 T3 TP3 Continu")
	(setq mod_tl
		(getkword
			(strcat
				"\nType de modulation [T1/TP1/T2/TP2/T3/TP3/Continu] <"
				(getvar "users2")
				">: "
			)
		)
	)
	(if (not mod_tl)
		(setq mod_tl (getvar "users2"))
	)
	(cond
		((eq mod_tl "T1")
			(setvar "celtype" "T1")
		)
		((eq mod_tl "TP1")
			(setvar "celtype" "T-PRIM1")
		)
		((eq mod_tl "T2")
			(setvar "celtype" "T2")
		)
		((eq mod_tl "TP2")
			(setvar "celtype" "T-PRIM2")
		)
		((eq mod_tl "T3")
			(setvar "celtype" "T3")
		)
		((eq mod_tl "TP3")
			(setvar "celtype" "T-PRIM3")
		)
		((eq mod_tl "Continu")
			(setvar "celtype" "CONTINUOUS")
		)
	)
	(setvar "users2" mod_tl)
	(alert
		(strcat
			"\n    - Utilisez la commande HZOFF"
			"\npour activer la commande POLYLIGN standard."
			"\n    - Utilisez la commande HZON"
			"\npour activer la commande POLYLIGN modifiée."
		)
	)
	(setq *error* olderr)	
	(setvar "cmdecho" 1)
	(command "_.PLINE")
	(prin1)
)
(defun c:signhz ( / oldcmd oldexp maj fac_tl val_tl nam_tl nam_fic fil_out val_u entry)
	(setq val_u nil)
	(setq oldcmd (getvar "cmdecho") oldexp (getvar "expert"))
	(setq olderr *error* *error* sgnerr)
	(setvar "cmdecho" 0)
	(setvar "expert" 3)
	(if (tblsearch "LTYPE" "T1") (setq maj T) (setq maj nil))
	(setq fac_tl (getvar "ltscale"))
	(setq val_tl
		'(
			(3.0 -10.0)
			(1.5 -5.0)
			(3.0 -3.5)
			(0.5 -0.5)
			(3.0 -1.33)
			(20.0 -6.0)
		)
	)
	(setq nam_tl
		'(
			"*T1,longitudinale axial"
			"*T-PRIM1,longitudinale axial"
			"*T2,longitudinale de rive"
			"*T-PRIM2,transversale"
			"*T3,longitudinale axial"
			"*T-PRIM3,longitudinale de rive"
		)
	)
	(if (zerop (getvar "dwgtitled"))
		(setq nam_fic (strcat (getvar "dwgprefix") (getvar "dwgname") ".LIN"))
		(setq nam_fic (strcat (getvar "dwgname") ".LIN"))
	)
	(setq fil_out (open nam_fic "w"))
	(while val_tl
		(write-line (car nam_tl) fil_out)
		(write-line
			(strcat
				"A,"
				(rtos (/ (caar val_tl) fac_tl) 2 4)
				","
				(rtos (/ (cadar val_tl) fac_tl) 2 4)
			)
			fil_out
		)
		(setq nam_tl (cdr nam_tl) val_tl (cdr val_tl))
	)
	(close fil_out)
	(command "_.LINETYPE" "_LOAD" "*" nam_fic "")
	(prompt
		(strcat
			"\nLes types de lignes T1 T'1 T2 T'2 T3 et T'3 sont définies et chargées"
			"\npour un facteur d'échelle de : "
			(rtos fac_tl 2 2)
		)
	)
	(while (not val_u)
		(initget 6)
		(setq entry (getreal "\nDonner la valeur de U en centimètres [7.5/6/5/3] <6>: "))
		(cond
			((or
				(eq entry 7.5)
				(eq entry 6)
				(eq entry 5)
				(eq entry 3)
			 )
				(setq val_u entry)
			)
			((not entry)
				(setq val_u 6.0)
			)
			(T
				(prompt "\nLa valeur de U doit être de 7.5cm, 6cm, 5cm ou 3cm")
				(setq val_u nil)
			)
		)
	)
	(setq val_u (* 0.01 val_u))
	(setvar "userr1" val_u)
	(setvar "fillmode" 1)
	(setvar "plinegen" 1)
	(command "_.undefine" "polylign")
	(command "_.undefine" "_pline")
	(if maj
		(progn
			(prompt "\nMise à jour des entitées avec la nouvelle définition par un REGEN")
			(command "_.regenall")
		)
		(prompt 
			(strcat
				"\nSi vous voulez changez l'échelle du type de ligne, ou la valeur de U"
				"\nrelancez la commande SIGNHZ"
				"\nNB: Les polylignes tracées auparavant garderont l'ancienne valeur de U."
			)
		)
	)
	(setvar "expert" oldexp)
	(setvar "cmdecho" oldcmd)
	(setq *error* olderr)
	(prin1)
)