Aller au contenu

Comment créer un lisp pour mettre un bloc dans un autre calque


Messages recommandés

Posté(e)

Bonjour à vous,

 

J'aimerais faire un lisp de façon à pouvoir dire tel ou tel bloc qui ont été insérer dans un claque a

soit déplacer dans un calque b.

 

:(

Posté(e)

Coucou, si je ne me trompe pas, tu trouveras ça ici

<IMG SRC=http://peronfrederic.free.fr/banniere.jpg></IMG>

 

<a href=www.formu-lan.net>www.FormuLan.net

</a>

Posté(e)

Salut,

 

Edit_bloc permet de changer les propriétés des composant d'une définition de bloc, pas les propriétés des références.

 

Pour changer les références insérées de calque, pas besoin de LISP, une Sélection rapide (SELECTRAP ou _QSELECT) des blocs d'après leur nom devrait suffire.

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

en fait j'essai de modifier un programme qui permet d'inserer des blocs

Ces blocs se trouvent dans un fichier $elec.dwg

Dans le programme les fichiers sont inserer par defaut dans un calque elec

 

(defun insertum (nombloc typebloc echelle ori suite / e cour acrob ort)

(setq *error* PV_error)

(command "_undo" "_be")

(setq cour (getvar "clayer"))

(setvar "clayer" "ELECTRICITE")

(command "_ucs" "_w")

(setq acrob (getvar "osmode"))

(setq ort (getvar "orthomode"))

(setvar "orthomode" 0)

(setvar "osmode" 0)

(setvar "attdia" 0)

(if ori

(command "_insert" nombloc pause echelle echelle pause (strcase typebloc)) ;_ end of command

(command "_insert" nombloc pause echelle echelle 0.0 (strcase typebloc)) ;_ end of command

) ;_ end of if

(setq e (entlast))

(setq pcentre (cdr (assoc 10 (entget e))))

(command "_move" e "" pcentre pause) ;_ end of command

(if suite

(progn (entmake (list (cons 0 "TEXT")

(cons 100 "AcDbEntity")

(cons 67 0)

(cons 8 "ELECTRICITE")

(cons 62 256)

(cons 100 "AcDbText")

(cons 10 (list 0.0 0.0 0.0))

(cons 40 (* 3 omega))

(cons 1 (strcase suite))

(cons 50 0.0)

(cons 41 0.7)

(cons 51 0.0)

(cons 7 "STANDARD")

(cons 71 0)

(cons 72 1)

(list 11 0.0 0.0 0.0)

(list 210 0.0 0.0 1.0)

(cons 100 "AcDbText")

(cons 73 2)

) ;_ end of list

) ;_ end of entmake

(setq e (entlast))

(command "_move" e "" (list 0.0 0.0 0.0) pause)

) ;_ end of progn

) ;_ end of if

(command "_ucs" "_P")

(setvar "osmode" acrob)

(setvar "orthomode" ort)

(setvar "clayer" cour)

(command "_undo" "_E")

) ;_ end of defun

 

j'ai créer un fichier $ssi.elec et j'aimerais que les blocs soient insérer dans un calque ssi

j'ai reussi a ce que le calque ssi soit créer et les blocs $.ssi.dwg soit charger

mais comment faire en sorte pour que tel bloc aille dans ce calque et un autre bloc dans un autre calque....

Posté(e)

Boujour,

 

Dans le programme d'origine ton bloc est inséré dans le calque elec ou ELECTRICITE?

 

Car si c'est dans le calque ELECTRICITE tu change dans ton lisp

 (setq cour (getvar "clayer"))
(setvar "clayer" " [surligneur] ELECTRICITE[/surligneur]")
(command "_ucs" "_w")

 

par

 

(setq cour (getvar "clayer"))
(setvar "clayer" " [surligneur] ssi[/surligneur]")
(command "_ucs" "_w") 

 

et

 (cons 67 0)
(cons 8 " [surligneur] ELECTRICITE[/surligneur]")
(cons 62 256)

 

par

 

(cons 67 0)
(cons 8 " [surligneur] ssi[/surligneur]")
(cons 62 256) 

 

@+

MDSV31

Dessinateur Indépendant

Posté(e)

les blocs sont insérer dans le calques electricité

Mais j'aimerais que certains blocs aillent dans le calque electricité et d'autres dans le calque ssi

Posté(e)

Salut

Comme le précise (gile), pas besoin de lisp. Les filtres permettent de le faire facilement.

Maintenant, si tu veux automatiser la tâche, je peux te donner les grandes lignes.

 

1) tu crées une liste pour définir quel bloc sur quel calque.

(setq lst '(("bloc1" "calque1") ("bloc2" "calque2") ("bloc3" "calque3") ("bloc4" "calque4")))

 

2) tu crées un jeu de sélection sur les blocs.

(setq js (ssget "x" '((0 . "INSERT"))))

 

3) tu crées une boucle pour parcourir le jeu de sélection.

(setq n 0)
(while (setq ent (ssname js n))
 ...
 (setq n (1+ n))
)

 

4) Dans ta boucle, tu fais le changement de calque du bloc concerné.

a) Tester si le bloc est dans la liste.

(if (setq res (assoc (cdr (assoc 2 (setq bl (entget (ssname js n))))) lst))
(progn
...
)
)

b1) Oui, on le change de calque

(setq bl (subst (cons 8 (cadr res)) (assoc 8 bl) bl))
(entmod bl)

b2) Et on met à jour graphiquement le bloc dans le dessin

(entupd (cdr (assoc -1 bl)))

 

On peut aussi faire quelque chose de beaucoup plus pointu comme de forcer lors que chaque copier, insérer, réseau, etc... les blocs définis dans la liste sur les bons calques. Mais c'est plus ardu à mettre en place, et on abandonne l'autolisp pour le vlisp.

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

oula suis une grosse quiche....... Pas évident le lisp....

 

Ca ne fait rien quand je lance le prog......

J'ai mis le nom d'un bloc et ca ne fait rien ....

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é