Aller au contenu

creer et Inserer bloc avec entmake


Messages recommandés

Posté(e)

Bonjour a tous, aujourd'hui je bloque sur la création et l'insertion d'un bloc seulement avec des lisp, sans dwg.

 

Dans un premier temps j'ai des lisp crées grâce au lisp "drawing to lisp" (dwgtolsp), auquel j'ai ajouté les instructions "entmake" pour créer les blocs dans mon dessin.

 

Block_SigneTorsade.lsp

 

(defun EntmakeSigneTorsade nil
(entmake 
	'(
		(0 . "block")
		(2 . "SigneTorsade")
		(10 0.0 0.0 0.0)
		(70 . 2)
	)
)
(entmakex
	'(
		(0 . "LINE")
		(5 . "163")
		(100 . "AcDbEntity")
		(67 . 0)
		(410 . "Model")
		(8 . "0")
		(100 . "AcDbLine")
		(10 0.0 1.42875 0.0)
		(11 0.0 2.95013 0.0)
		(210 0.0 0.0 1.0)
	)
)
(entmakex
	'(
		(0 . "ELLIPSE")
		(5 . "164")
		(100 . "AcDbEntity")
		(67 . 0)
		(410 . "Model")
		(8 . "0")
		(100 . "AcDbEllipse")
		(10 0.0 0.0 0.0)
			(11 0.0 1.42875 0.0)
		(210 0.0 0.0 1.0)
 			(40 . 0.6)
		(41 . 4.85944)
 			(42 . 7.70693)
	)
)
	(entmakex
	'(
			(0 . "POINT")
		(5 . "186")
 			(100 . "AcDbEntity")
 			(67 . 0)
  			(410 . "Model")
  			(8 . "0")
 			(100 . "AcDbPoint")
			(10 0.0 0.0 0.0)
		(210 0.0 0.0 1.0)
  			(50 . 0.0)
		)
)
(entmakex
	'(
   			(0 . "POINT")
  			(5 . "188")
  			(100 . "AcDbEntity")
   			(67 . 0)
 			(410 . "Model")
 			(8 . "0")
 			(100 . "AcDbPoint")
 			(10 0.0 0.0 0.0)
 			(210 0.0 0.0 1.0)
			(50 . 0.0)
	)
)
  (entmake '((0 . "endblk")))
 (princ)
)

 

 

Dans un second temps, je crée un lisp pour insérer les blocs précédemment crées.

 

BlockInsert.lsp

 

(defun c:InsertSigneTorsade ()
	(progn
		(cond
			((findfile "Block_SigneTorsade.lsp")
				(SetToDraw)
				(load "Block_SigneTorsade.lsp")
			)
		)
		(vl-cmdf "._-INSERT" "SigneTorsade" pause "1" "1" "0" "")
	(princ "\n--- Signe Torsade inséré ---\n")
	(princ)
	)
)

 

 

PS: (SetToDraw) = (setvar "SNAPMODE" 1) + (setvar "SNAPUNIT" '(1 1) + (setvar "OSMODE" 1024)

 

Le 1er problème est que le bloc ne se crée pas dans mon dessin a l'action du lisp entmake.

Le 2eme probleme est que l'instruction d'insertion cherche un fichier dwg et non pas dans la bibliotheque de bloc du dessin.

 

Message d'erreur d'autocad :

 

Commande: InsertSigneTorsade

Initialisation...

"SigneTorsade.dwg": Impossible de trouver le fichier dans le chemin de recherche

 

Un immense merci d'avance a la personne qui m'aidera a débloquer la situation, j'ai enormement de blocs a créer ainsi

Posté(e)

Et ben tous ça pour ça, je le voyais pas du tout !!!

 

Merci oh grand maitre programmeur Gile ^^, dont je suis voisin ^^, de m'avoir ouvert les yeux !!!

 

Le lisp modifié :

 

(defun c:InsertSigneTorsade ()
	(progn
		(cond
			((findfile "Block_SigneTorsade.lsp")
				(SetToDraw)
				(load "Block_SigneTorsade.lsp")
				(EntmakeSigneTorsade)
			)
		)
		(vl-cmdf "._-INSERT" "SigneTorsade" pause "1" "1" "0" "")
	(princ "\n--- Signe Torsade inséré ---\n")
	(princ)
	)
)

Posté(e)

Tu peux éviter de charger et exécuter systématiquement le LISP en vérifiant si le bloc n'est pas déjà présent dans la table des blocs.

 

(defun c:InsertSigneTorsade ()
 (if
   (or
     (tblsearch "BLOCK" "SigneTorsade")
     (and
(findfile "Block_SigneTorsade.lsp")
(load "Block_SigneTorsade.lsp")
(EntmakeSigneTorsade)
     )
   )
   (progn
     (vl-cmdf "._-INSERT" "SigneTorsade" pause "1" "1" "0" "")
     (princ "\n--- Signe Torsade inséré ---\n")
   )
   (princ "\n--- Le bloc'SigneTorsade' et le LISP 'Block_SigneTorsade.lsp' sont introuvables ---\n")
 )
 (princ)
)

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

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é