Aller au contenu

créer un type de ligne avec forme


chachageo

Messages recommandés

Bonjour!

 

Je suis nouvelle sur ce forum, j'ai déjà trouvé pas mal de réponse à mes questions mais la je sèche!

N'ayant pas covadis, je souhaite crée des types de lignes 'complexes'. J'ai trouvé par l'onglet express tool comment créer des linéaires avec texte, que j'ai utilisé dans certains cas pour contourner mon problème, ex pour un mur j'ai utilisé une répétition de ZZZ mais cela n'est pas applicable à tous. Je souhaiterais par exemple créer un type de ligne 'ligne arbres' avec un trait un arbre un trait ... et également une ligne avec trait double (voir captures).

 

Merci pour votre aide!

post-76243-0-10708500-1591175710_thumb.jpg

post-76243-0-78793100-1591175716_thumb.jpg

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Il faut avoir les Express Tools d'installés.

Steven________________________________________

Pour le taf; Windows (et ses emmerdes) sinon pas d'AutoCAD.

Pour le perso Linux Mint et pas de problèmes. Mais pas d'AutoCAD.

En rêve; AutoCAD sous Linux.

Lien vers le commentaire
Partager sur d’autres sites

salut,

a la vue de tes formes complexes suivant tes captures, je te conseil de bien choisir la résolution de ta ligne. Pour ton exemple je pencherai plus vers une résolution de 256 voir 512.

Ce qui faut savoir aussi, c'est plus tu as de type de ligne complexe dans tes dwg plus tu alourdi ton dwg.

Lien vers le commentaire
Partager sur d’autres sites

salut,

a la vue de tes formes complexes suivant tes captures, je te conseil de bien choisir la résolution de ta ligne. Pour ton exemple je pencherai plus vers une résolution de 256 voir 512.

Ce qui faut savoir aussi, c'est plus tu as de type de ligne complexe dans tes dwg plus tu alourdi ton dwg.

 

en effet je n'avais pas pensé à cela! je vais certainement simplifié mais forme alors, un trait un rond un trait pour ma ligne d'arbre? et concernant la haie un simple rectangle vert suffit peut-être?

Lien vers le commentaire
Partager sur d’autres sites

concernant la haie un simple rectangle vert suffit peut-être?

 

Ca dépend de ta méthode de travail et du rendu souhaité. Chacun à ses petite habitudes.

Personnellement je ne passe pas par une polyligne de type complexe mais un bloc dynamique avec récupération des longueurs en attribut si j'ai besoin de les quantifier, quand je n'ai pas covadis sous la main.

Lien vers le commentaire
Partager sur d’autres sites

Ca dépend de ta méthode de travail et du rendu souhaité. Chacun à ses petite habitudes.

Personnellement je ne passe pas par une polyligne de type complexe mais un bloc dynamique avec récupération des longueurs en attribut si j'ai besoin de les quantifier, quand je n'ai pas covadis sous la main.

 

c'est à dire?

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

En copiant directement ce qui suit en ligne de commande, tu auras un type de ligne nommé "Haie" qui sera disponible dans ton dessin.

Ce code s'occupe de créer la forme SHP et de la compiler en SHX ainsi que d'écrire le fichier LIN utilisant cette forme.

Tu auras désormais les fichiers nécessaires et plus besoin d'utiliser le code proposé.

 

((lambda ( / f_shp f_lin doc)
(if (not (findfile "haie.shp"))
	(progn
		(setq f_shp (open (strcat (getvar "ROAMABLEROOTPREFIX") "support\\haie.shp") "w"))
		(write-line "*128,66,HAIE" f_shp)
		(write-line "1,12,(2,1,-54),2,018," f_shp)
		(write-line "1,12,(4,1,-91),2,018," f_shp)
		(write-line "1,12,(2,0,-126),2,01C," f_shp)
		(write-line "1,12,(3,-1,-127),2,025," f_shp)
		(write-line "1,12,(2,-2,-79),2,02C," f_shp)
		(write-line "1,12,(-3,1,-52),2,020," f_shp)
		(write-line "1,12,(-5,1,-76),2,02F," f_shp)
		(write-line "1,12,(-3,-1,-126),2,010," f_shp)
		(write-line "1,12,(-4,0,-78)," f_shp)
		(write-line "2,8,(10,2),0" f_shp)
		(close f_shp)
	)
)
(command "_.compile" (strcat (getvar "ROAMABLEROOTPREFIX") "support\\haie.shp"))
(if (not (tblsearch "STYLE" ""))
	(entmakex
		'(
			(0 . "STYLE")
			(100 . "AcDbSymbolTableRecord")
			(100 . "AcDbTextStyleTableRecord")
			(2 . "")
			(70 . 1)
			(40 . 0.0)
			(41 . 1.0)
			(50 . 0.0)
			(71 . 0)
			(42 . 2.5)
			(3 . "haie.shx")
			(4 . "")
	     )
	)
)
(entmake
	(list
		'(0 . "LTYPE")
		'(100 . "AcDbSymbolTableRecord")
		'(100 . "AcDbLinetypeTableRecord")
		'(2 . "HAIE")
		'(70 . 0)
		'(3 . "Haies-arbuste")
		'(72 . 65)
		'(73 . 2)
		'(40 . 1.0)
		'(49 . 0.0)
		'(74 . 0)
		'(49 . -1.0)
		'(74 . 4)
		'(75 . 128)
		(CONS 340 (TBLOBJNAME "STYLE" ""))
		'(46 . 0.1)
		'(50 . 0.0)
		'(44 . -1.0)
		'(45 . 0.0)
	)
)
(if (not (findfile "haie.lin"))
	(progn
		(setq f_lin (open (strcat (getvar "ROAMABLEROOTPREFIX") "support\\haie.lin") "w"))
		(write-line "*HAIE, Haies-arbuste" f_lin)
		(write-line "A,0,-1,[HAIE,haie.shx,x=-1,s=.1]" f_lin)
		(close f_lin)
	)
)
(setq doc (vla-get-activedocument (vlax-get-acad-object)))
(if
	(and
		(not
			(vlax-for item (vla-get-linetypes doc)
				(if (= (strcase (vla-get-name item)) (strcase "haie")) T)
			)
		)
		(vl-catch-all-error-p
			(vl-catch-all-apply
				'vla-load
				(list (vla-get-Linetypes doc) "haie" "haie.lin")
			)
		)
	)
	nil
	T
)
(princ "\nCréation de Type de Ligne \"haie\" effectué!")
(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

oui je les ai et je tap la commande au clavier mais il me renvoi vers MKSHAPE (la première que j'ai déjà effectué donc)

 

 

Si tu tapes la commande en français, il faut taper FORMES.

 

Si tu veux taper la commande en anglais, il faut mettre un underscore (_) devant shape. = _shape.

 

 

 

Steven________________________________________

Pour le taf; Windows (et ses emmerdes) sinon pas d'AutoCAD.

Pour le perso Linux Mint et pas de problèmes. Mais pas d'AutoCAD.

En rêve; AutoCAD sous Linux.

Lien vers le commentaire
Partager sur d’autres sites

salut!

c'est encore moi :)

 

je progresse dans la création de mes linéaires, cependant j'aimerais savoir si il y a moyen d'obtenir une ligne avec double trait (créer à partir d'un shape) qui n'ait jamais de trou au début et à la fin (cf image)

car je vois que le linéaire prend exactement le gabarit de mon shape sans le réadapter mais si ma ligne n'est pas un multiple exact de mon shape il y a un vide.

 

Merci! ;)

post-76243-0-52015000-1591711894_thumb.jpg

Lien vers le commentaire
Partager sur d’autres sites

salut!

c'est encore moi :)

 

je progresse dans la création de mes linéaires, cependant j'aimerais savoir si il y a moyen d'obtenir une ligne avec double trait (créer à partir d'un shape) qui n'ait jamais de trou au début et à la fin (cf image)

car je vois que le linéaire prend exactement le gabarit de mon shape sans le réadapter mais si ma ligne n'est pas un multiple exact de mon shape il y a un vide.

 

Merci! ;)

 

Salut,

 

A mon avis, il n'y a pas moyen de résoudre cd problème d'évidement en début et fin de ligne en utilisant une forme (shape), le type de ligne n'est qu'une répétition d'un motif et autocad ajuste celle-ci pour que les motif ne dépasse pas les points d'extrémitées

Autrement tu peut essayer de te tourner vers le multi-lignes.

Voici par exemple un lisp un peu ancien qui converti des objets curviligne en multi-ligne.

(defun def_bulg_pl (ls lb flag_closed / ls lb rad a l_new)
 (if (not (zerop flag_closed)) (setq ls (append ls (list (car ls)))))
 (while (cadr ls)
(if (zerop (car lb))
 	(setq l_new (append l_new (list (car ls))))
 	(progn
   	(setq
     	rad (/ (distance (car ls) (cadr ls)) (sin (* 2.0 (atan (abs (car lb))))) 2.0)
     	a (- (/ pi 2.0) (- pi (* 2.0 (atan (abs (car lb))))))
   	)
   	(if (< a 0.0) (setq a (- (* 2.0 pi) a)))
   	(if (or (and (< (car lb) 0.0) (> (car lb) -1.0)) (> (car lb) 1.0))
     	(setq l_new (append l_new (reverse (cdr (reverse (bulge_pts (polar (car ls) (- (angle (car ls) (cadr ls)) a) rad) (car ls) (cadr ls) rad (car lb)))))))
     	(setq l_new (append l_new (reverse (cdr (reverse (bulge_pts (polar (car ls) (+ (angle (car ls) (cadr ls)) a) rad) (car ls) (cadr ls) rad (car lb)))))))
   	)
 	)
)
(setq ls (cdr ls) lb (cdr lb))
 )
 (append l_new (list (car ls)))
)
(defun bulge_pts (pt_cen pt_begin pt_end rad sens / inc ang nm p1 p2 lst)
 (setq
inc (angle pt_cen (if (< sens 0.0) pt_end pt_begin))
ang (+ (* 2.0 pi) (angle pt_cen (if (< sens 0.0) pt_begin pt_end)))
nm (fix (/ (rem (- ang inc) (* 2.0 pi)) (/ (* pi 2.0) 36.0)))
 )
 (repeat nm
(setq
 	p1 (polar pt_cen inc rad)
 	inc (+ inc (/ (* pi 2.0) 36.0))
 	lst (append lst (list p1))
)
 )
 (setq
p2 (polar pt_cen ang rad)
lst (append lst (list p2))
 )
 (if (< sens 0.0) (reverse lst) lst)
)
(defun c:polyarc2ml ( / jspl nbr ent dxf_ent typent name_layer closed lst l_bulg e_next dxf_next oldlayer oldosm key_mod scale_ml)
 (princ "\nChoix des polylignes à transformer en multilignes: ")
 (setq
jspl (ssget '((0 . "*POLYLINE,LINE,CIRCLE,ARC") (-4 . "<NOT") (-4 . "&") (70 . 124) (-4 . "NOT>")))
nbr 0
 )
 (cond
(jspl
 	(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 (getdist (strcat "\nEntrez l'échelle de la multiligne <" (rtos (getvar "cmlscale")) ">: ")))
 	(if scale_ml (setvar "cmlscale" scale_ml))
 	(setq oldlayer (getvar "clayer") oldosm (getvar "osmode"))
 	(setvar "osmode" 0)
 	(setvar "cmdecho" 0)
 	(command "_.ucs" "_world")
 	(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_bulg (mapcar 'cdr (vl-remove-if '(lambda (x) (/= (car x) 42)) dxf_ent))
         	lst (def_bulg_pl lst l_bulg closed)
       	)
     	)
     	((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_bulg (cons (cdr (assoc 42 dxf_next)) l_bulg)
           	)
         	)
         	(setq e_next (entnext e_next))
       	)
       	(setq
         	lst (reverse lst)
         	l_bulg (reverse l_bulg)
         	lst (def_bulg_pl lst l_bulg closed)
       	)
     	)
     	((eq typent "LINE")
       	(setq
         	lst (list (trans (cdr (assoc 10 dxf_ent)) 0 1) (trans (cdr (assoc 11 dxf_ent)) 0 1))
         	closed 0
       	)
     	)
     	((eq typent "CIRCLE")
       	(setq
         	lst
           	(bulge_pts
             	(trans (cdr (assoc 10 dxf_ent)) ent 1)
             	(polar (trans (cdr (assoc 10 dxf_ent)) ent 1) 0.0 (cdr (assoc 40 dxf_ent)))
             	(polar (trans (cdr (assoc 10 dxf_ent)) ent 1) (- (* 2.0 pi) (/ (* pi 2.0) 36.0)) (cdr (assoc 40 dxf_ent)))
             	(cdr (assoc 40 dxf_ent))
             	1
           	)
         	lst (append lst (list (car lst)))
         	closed 1
       	)
     	)
     	((eq typent "ARC")
       	(setq
         	lst
           	(bulge_pts
             	(trans (cdr (assoc 10 dxf_ent)) ent 1)
             	(polar (trans (cdr (assoc 10 dxf_ent)) ent 1) (cdr (assoc 50 dxf_ent)) (cdr (assoc 40 dxf_ent)))
             	(polar (trans (cdr (assoc 10 dxf_ent)) ent 1) (cdr (assoc 51 dxf_ent)) (cdr (assoc 40 dxf_ent)))
             	(cdr (assoc 40 dxf_ent))
             	1
           	)
         	closed 0
       	)
     	)
   	)
   	(cond
     	(lst
       	(setvar "clayer" name_layer)
       	(command "_.mline")
       	(foreach n lst (command n))
       	(if (not (zerop closed)) (command "_close") (command ""))
       	(entdel ent)
     	)
   	)
   	(setq nbr (1+ nbr) lst nil l_bulg nil)
 	)
 	(command "_.ucs" "_previous")
 	(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

  • 2 semaines après...

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é