Aller au contenu

Appel au lispeur! Polyline to multiline


bono05

Messages recommandés

Salut les pros,

 

J'ai trouvé cela comme routine:

 

(defun c:po2ml ( / ent dxf_ent typent name_layer closed lst l_bub e_next dxf_next oldlayer oldosm key_mod scale_ml)

(while (null (setq ent (entsel "\nChoix de l'entité: "))))

(setq typent (cdr (assoc 0 (setq dxf_ent (entget (car ent))))) name_layer (cdr (assoc 8 dxf_ent)))

(cond

((eq typent "LWPOLYLINE")

(setq

closed (boole 1 (cdr (assoc 70 dxf_ent)) 1)

lst (mapcar '(lambda (x) (trans x (car ent) 1)) (mapcar 'cdr (vl-remove-if '(lambda (x) (/= (car x) 10)) dxf_ent)))

l_bub (mapcar 'cdr (vl-remove-if '(lambda (x) (/= (car x) 42)) dxf_ent))

)

)

((eq typent "POLYLINE")

(setq

closed (boole 1 (cdr (assoc 70 dxf_ent)) 1)

e_next (entnext (car ent))

)

(while (= "VERTEX" (cdr (assoc 0 (setq dxf_next (entget e_next)))))

(if (zerop (boole 1 223 (cdr (assoc 70 dxf_next))))

(setq

lst (cons (trans (cdr (assoc 10 dxf_next)) (car ent) 1) lst)

l_bub (cons (cdr (assoc 42 dxf_next)) l_bub)

)

)

(setq e_next (entnext e_next))

)

(setq

lst (reverse lst)

l_bub (reverse l_bub)

)

)

)

(cond

((and lst (apply 'and (mapcar 'zerop l_bub)))

(setq oldlayer (getvar "clayer") oldosm (getvar "osmode"))

(setvar "clayer" name_layer)

(setvar "osmode" 0)

(setvar "cmdecho" 0)

(initget "Dessus Nulle dEssous _Top Zero Bottom")

(setq key_mod

(getkword

(strcat

"\nEntrez le type de justification [Dessus/Nulle/dEssous] <"

(cond

((eq (getvar "cmljust") 0)

"Dessus"

)

((eq (getvar "cmljust") 1)

"Nulle"

)

((eq (getvar "cmljust") 2)

"dEssous"

)

)

">: "

)

)

)

(if key_mod

(cond

((eq key_mod "Top") (setvar "cmljust" 0))

((eq key_mod "Zero") (setvar "cmljust" 1))

((eq key_mod "Bottom") (setvar "cmljust" 2))

)

)

(setq scale_ml (getreal (strcat "\nEntrez l'échelle de la multiligne <" (rtos (getvar "cmlscale")) ">: ")))

(if scale_ml (setvar "cmlscale" scale_ml))

(command "_.mline")

(foreach n lst (command "_none" n))

(if closed (command "_close") (command ""))

(setvar "clayer" oldlayer)

(setvar "osmode" oldosm)

(setvar "cmdecho" 1)

(entdel (car ent))

)

(T (princ "\nN'est pas une polyligne, ou celle ci comporte des arrondis!"))

)

(prin1)

)

 

 

Mais voilà mon problème:

 

Ex: j'ai des Polylignes de 400, 800 et 1200....que je devrai modifier en multilignes mais tout en gardant l'épaisseur de chacune. Et comme j'ai 8 epaisseurs differentes pour plus de 67 segments dans un plan, vous comprendrez que je cherche à me simplifier la vie.

 

Deplus j'ai un tout petit message d'erreur à la fin de la commande...

 

Merci!!! :cool:

Lien vers le commentaire
Partager sur d’autres sites

  • 2 semaines après...

Salut,

 

En faisant juste une petite modif (mise en remarque de la demande de l'épaisseur) avec le semi-colon ";"

 

;			(setq scale_ml (getdist (strcat "\nEntrez l'échelle de la multiligne [b]<[/b]" (rtos (getvar "cmlscale")) "[b]>[/b]: ")))
;			(if scale_ml (setvar "cmlscale" scale_ml))

 

et insertion de la récupération de la largeur constante de la polyligne et assignation à la variable CMSCALE

 

				((and lst (apply 'and (mapcar 'zerop l_bub)))
           [surligneur] (setvar "cmlscale" (cdr (assoc 43 dxf_ent)))[/surligneur] 
					(setvar "clayer" name_layer)

 

Deplus j'ai un tout petit message d'erreur à la fin de la commande...

 

Possible, mais là je ne vois pas de quoi il s'agit sans plus d'explication...

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Lien vers le commentaire
Partager sur d’autres sites

Comme je ne suis pas sure que le code intégral que tu as mis n'a pas été modifié, je préfère reposter le code en entier.

 

(defun c:po2ml ( / jspl nbr ent dxf_ent typent name_layer closed lst l_bub e_next dxf_next oldlayer oldosm key_mod)
(princ "\nChoix des polylignes à transformer en multilignes: ")
(setq
	jspl (ssget '((0 . "*POLYLINE") (-4 . "[b]<[/b]NOT") (-4 . "&") (70 . 112) (-4 . "NOT[b]>[/b]")))
	nbr 0
)
(cond
	(jspl
		(initget "Dessus Nulle dEssous _Top Zero Bottom")
		(setq key_mod
			(getkword
				(strcat
					"\nEntrez le type de justification [Dessus/Nulle/dEssous] [b]<[/b]"
					(cond
						((eq (getvar "cmljust") 0)
							"Dessus"
						)
						((eq (getvar "cmljust") 1)
							"Nulle"
						)
						((eq (getvar "cmljust") 2)
							"dEssous"
						)
					)
					"[b]>[/b]: "
				)
			)
		)
		(if key_mod
			(cond
				((eq key_mod "Top") (setvar "cmljust" 0))
				((eq key_mod "Zero") (setvar "cmljust" 1))
				((eq key_mod "Bottom") (setvar "cmljust" 2))
			)
		)
		(setq oldlayer (getvar "clayer") oldosm (getvar "osmode"))
		(setvar "osmode" 0)
		(setvar "cmdecho" 0)
		(repeat (sslength jspl)
			(setq
				typent (cdr (assoc 0 (setq dxf_ent (entget (setq ent (ssname jspl nbr))))))
				name_layer (cdr (assoc 8 dxf_ent))
			)
			(cond
				((eq typent "LWPOLYLINE")
					(setq
						closed (boole 1 (cdr (assoc 70 dxf_ent)) 1)
						lst (mapcar '(lambda (x) (trans x ent 1)) (mapcar 'cdr (vl-remove-if '(lambda (x) (/= (car x) 10)) dxf_ent)))
						l_bub (mapcar 'cdr (vl-remove-if '(lambda (x) (/= (car x) 42)) dxf_ent))
					)
				)
				((eq typent "POLYLINE")
					(setq
						closed (boole 1 (cdr (assoc 70 dxf_ent)) 1)
						e_next (entnext ent)
					)
					(while (= "VERTEX" (cdr (assoc 0 (setq dxf_next (entget e_next)))))
						(if (zerop (boole 1 223 (cdr (assoc 70 dxf_next))))
							(setq
								lst (cons (trans (cdr (assoc 10 dxf_next)) ent 1) lst)
								l_bub (cons (cdr (assoc 42 dxf_next)) l_bub)
							)
						)
						(setq e_next (entnext e_next))
					)
					(setq
						lst (reverse lst)
						l_bub (reverse l_bub)
					)
				)
			)
			(cond
				((and lst (apply 'and (mapcar 'zerop l_bub)))
           (setvar "cmlscale" (cdr (assoc 43 dxf_ent)))
					(setvar "clayer" name_layer)
					(command "_.mline")
					(foreach n lst (command n))
					(if (not (zerop closed)) (command "_close") (command ""))
					(entdel ent)
				)
				(T (princ "\nLes polylignes comportant des arrondis n'ont pas été traitées!"))
			)
			(setq nbr (1+ nbr) lst nil l_bub nil)
		)
		(setvar "clayer" oldlayer)
		(setvar "osmode" oldosm)
		(setvar "cmdecho" 1)
	)
	(T (princ "\nSélection vide"))
)
(prin1)
)

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Lien vers le commentaire
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité