Aller au contenu

Aller plus loin avec ENTMAKE


Tramber

Messages recommandés

Je viens de découvrir l'Amérique !

 

Je lispe seulement avec des command

 

Mais depuis qqes temps, j'ai (enfin) (re-)découvert ENTMAKE et notamment la facilité de création d'un bloc :

 

(setq pt (getpoint))
(SETQ	tube      (LIST (CONS 0 "CIRCLE")
		   (CONS 10 pt)
		   (CONS 40 100)
		   (CONS 8 "tube"))
externe	     (LIST (CONS 0 "CIRCLE")
		   (CONS 10 pt)
		   (CONS 40 500)
		   (CONS 8 "ext"))
mili     (LIST (CONS 0 "CIRCLE")
		   (CONS 10 pt)
		   (CONS 40 200)
		   (CONS 8 "mili")))
(ENTMAKE (list   (cons 0 "block")
	 (CONS 2 "dessus")
	 (cons 10 pt)
	 (cons 70 64)))

 (ENTMAKE tube)
 (ENTMAKE externe)
 (ENTMAKE mili)

 (ENTMAKE (list (cons 0 "endblk")))
 (ENTMAKE (list (CONS 0 "INSERT")
	 (cons 2 "dessus")
	 (cons 10 pt)))

 

Seulement je n'arrive pas à aller + loin.

La question est comment ajouter une entité que j'aurais créé avec un command au milieu de tout ca, c'est à dire au même niveau que :

(ENTMAKE tube)

(ENTMAKE externe)

(ENTMAKE mili)

 

?

 

La réponse est peut-être bête (et pas vous) mais je bloque.

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Lien vers le commentaire
Partager sur d’autres sites

Tramber,

 

Il faut que les calques existent..

 

Exemple:

(defun faites_du_lisp ( / pt tube ext mili blkend)

(command "_-layer" "_new" "tube,mili,ext" "")

(setq pt (getpoint "\nPoint: "))

(setq tube (list

(cons 0 "circle") (cons 10 pt)

(cons 40 100) (cons 8 "tube")

))

(setq externe (list

(cons 0 "circle") (cons 10 pt)

(cons 40 500) (cons 8 "ext")

))

(setq mili (list

(cons 0 "circle") (cons 10 pt)

(cons 40 200) (cons 8 "mili")

))

(entmake (list

(cons 0 "block") (cons 2 "dessus")

(cons 10 pt) (cons 70 64)

))

 

(entmake tube)

(entmake externe)

(entmake mili)

 

(entmake '((0 . "endblk")))

(entmake (list (cons 0 "insert")

(cons 2 "dessus")

(cons 10 pt)))

)

 

Serge

Lien vers le commentaire
Partager sur d’autres sites

Serge,

 

Une particularité de ENTMAKE et qu'il peut créer le calque même si celui ci n'existe pas.

Ex. cette instruction va créer une ligne sur le plan TOTO même si celui ci est inexistant.

 

(entmake '((0 . "LINE") (5 . "2B") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "TOTO") (100 . "AcDbLine") (10 118.753 129.067 0.0) (11 264.238 186.718 0.0) (210 0.0 0.0 1.0)))

 

Ce qu'il faut c'est que le nom du calque soit valide.

 

Voilà pour la petite rectification. ;)

 

Bruno

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

Tramber,

 

Il n'est pas possible de mixer les 2 mode de création (entmake) et (command).

Entmake crée un fichier de définition tamporaire qui sera validé lors de l'instruction (entmake '((0 . "ENDBLK"))). Donc durant cette période, seul entmake est abilité pour ajouter des définitions.

 

La seule astuce possible est de récupérer l'entité crée par un (entget) de la supprimer par un (entdel) et de la recréer par (entmake) à l'aide de la liste retourné par enget, ceci au bon endroit bien sur.

 

 

 

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

Ok, je vais faire l'essai.

 

On en revient à une question qui me chatouille.

 

C'est très dur de connaitre les codes de groupes strictement nécessaires à un ENTMAKE.

 

Pour ligne, cercles, et qqes autres, ca va.

Mais là je me demande si je ne vais pas devoir faire le ménage de "groupes parasites" genre le groupe 100.

 

Si vous avez plus d'infos.

 

Merci en tous cas.

 

Je confirme que tout se passe bien qd on spécifie un nom de calque inexistant, ce que je trouve tout à fait intéressant.

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Lien vers le commentaire
Partager sur d’autres sites

Tramber,

 

Question de te faire la main, dessine un objet puis tape (entget (entlast)). Tu verras rapidement les codes de l'objet. Parmi les codes dxf inutiles, et c'est l'expérience qui te guideras: -1, 5, 100, 300 à 500. Inclure ces codes n'est pas fatal mais peu nuire à la lecture ou à la vitesse à laquelle tu chemine. À titre d'exemple, tu peux cloner le dernier objet tout simplement comme suit:

(entmake (entget (entlast)))

 

 

Bonuscad,

 

En fait, j'avais testé le code avant de créer les calques et ça bloquait. Je revérifierai plus tard.

Par rapport au mixage de méthodes, j'ajouterai qu'il ne faut pas utiliser simultannément les (command ...) (entmake ...) et (vla-add ...)

 

Et en passant, les Bonus sont devenus des Express ;-)

 

Serge

Lien vers le commentaire
Partager sur d’autres sites

Tout marche super bien.

 

(setq fait (entget(entlast)))
(entdel (cdr(car fait)))

(setq pt (getpoint))
(SETQ tube (LIST (CONS 0 "CIRCLE")
(CONS 10 pt)
(CONS 40 100)
(CONS 8 "tube"))
externe (LIST (CONS 0 "CIRCLE")
(CONS 10 pt)
(CONS 40 500)
(CONS 8 "ext"))
mili (LIST (CONS 0 "CIRCLE")
(CONS 10 pt)
(CONS 40 200)
(CONS 8 "mili")))
(ENTMAKE (list (cons 0 "block")
(CONS 2 "dessus")
(cons 10 pt)
(cons 70 64)))

(ENTMAKE tube)
(ENTMAKE externe)
(ENTMAKE mili)
(ENTMAKE fait);;;			 that's the trick

(ENTMAKE (list (cons 0 "endblk")))
(ENTMAKE (list (CONS 0 "INSERT")
(cons 2 "dessus")
(cons 10 pt)))

 

Sachant que entmake doit renvoyer du DXF.

Peut-on imaginer glisser carrément un jeu de selection ?

 

[Edité le 24/9/2004 par Tramber]

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Lien vers le commentaire
Partager sur d’autres sites

Tramber,

 

Pourquoi un jeu de sélection? Pour constituer le bloc? Si c'est cela, c'est non. D'ailleurs Bruno et moi t'avons signaler le danger de mélanger des techniques de création telles que entmake, command et vla

 

Par contre, il y a un work-around:

(setq ss (ssget)) ; Sélection

(setq i 0)

(setq n (if ss (sslength ss) 0)) ; Nombre d'éléments

(while (< i n)

(setq element (ssname ss i)) ; ssname extrait l'élément de la sélection, l'index initial = 0

(setq elementGet (entget element))

(entmake elementGet)

(setq i (1+ i))

)

 

Serge

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é