Aller au contenu

Insertion Bloc sur Pts dans calques


lili2006

Messages recommandés

Bonsoir à toutes et tous,

 

Le post que j'ai suivi aujourd'hui m'a donné une nouvelle idée. Tout comme le Lisp "(PNT2BLK)" revu par (gile) en fonction de mes diverses demandes (merci encore à lui),est-il possible de faire la même chose sur le Lisp (également mentionné sur le post donné en lien) "ins-vtx " (rappel ci-dessous). Je m'explique, au lieu de selectionner des points graphiquement, pouvoir les saisir en ne désignant que le calque ou les points figurent ??? Je pense bien que c'est possible, vu la rapidité de réponse de (Gile) sur le même problème,...

 

Merci d'avance.

 

Rappel Lisp " ins-vtx " revu par (gile) =>

 

(defun c:ins-vtx (/ acdoc space bname ss lay layf n ins)
(vl-load-com)
(setq acdoc (vla-get-activeDocument (vlax-get-acad-object))
space (if (= (getvar "CVPORT") 1)
(vla-get-PaperSpace acdoc)
(vla-get-ModelSpace acdoc)
)
)
(if (setq bname (getblock "Nom du bloc"))
(progn
(if (setq ss (ssget "_X" (list '(0 . "INSERT") (cons 2 bname))))
(setq lay (cdr (assoc 8 (entget (ssname ss 0)))))
)
(if (setq layf (getlayer "Choisir le calque filtre de polylignes"))
(if (ssget "_X" (list '(0 . "*POLYLINE") (cons 8 layf)))
(progn
(vla-startUndoMark acdoc)
(vlax-for pl (vla-get-ActiveSelectionSet acdoc)
(setq n (fix (vlax-curve-getEndParam pl)))
(or (= (vla-get-Closed pl) :vlax-false)
(setq n (1- n))
)
(repeat (1+ n)
(setq ins
(vla-InsertBlock
space
(vlax-3d-point (vlax-curve-getPointAtParam pl n))
bname
1.0
1.0
1.0
0.0
)
)
(if lay
(vla-put-layer ins lay)
)
(setq n (1- n))
)
)
(vla-EndUndoMark acdoc)
)
)
)
)
)
(princ)
)  

Civil 3D 2025 - COVADIS_18.3b

https://www.linkedin...3%ABt-95313341/

Lien vers le commentaire
Partager sur d’autres sites

NOTA : les routines getblock et getlayer (ici) doivent être chargées

 

(defun c:ins-pts (/ acdoc space bl ss lay layf n ins)
 (vl-load-com)
 (setq	acdoc (vla-get-activeDocument (vlax-get-acad-object))
space (if (= (getvar "CVPORT") 1)
	(vla-get-PaperSpace acdoc)
	(vla-get-ModelSpace acdoc)
      )
 )
 (if (setq bl (getblock "Nom du bloc"))
   (progn
     (if (setq ss (ssget "_X" (list '(0 . "INSERT") (cons 2 bl))))
(setq lay (cdr (assoc 8 (entget (ssname ss 0)))))
     )
     (if (setq layf (getlayer "Calque filtre des points"))
(if (ssget "_X" (list '(0 . "POINT") (cons 8 layf)))
  (progn
    (vla-startUndoMark acdoc)
    (vlax-for pt (vla-get-ActiveSelectionSet acdoc)
      (setq ins
	     (vla-InsertBlock
	       space
	       (vla-get-coordinates pt)
	       bl
	       1.0
	       1.0
	       1.0
	       0.0
	     )
      )
      (if lay
	(vla-put-layer ins lay)
      )
    )
    (vla-EndUndoMark acdoc)
  )
)
     )
   )
 )
 (princ)
) 

 

[Edité le 9/11/2007 par (gile)]

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

Lien vers le commentaire
Partager sur d’autres sites

Re,

 

Il n'y a vraiment rien d'extraordinaire, il s'agit justes de modifications mineures dans un micro LISP que j'avais écrit et sur lequel je bidouille des modifs depuis tout à l'heure.

Vraiment rien de comparable avec LXL !

 

Pour toi, certes, mais pas pour grand monde sur ce forum et c'est ce genre de manips qui nous font avancer. Je commence à regarder de plus en plus les modifs que tu fais en essayant de comprendre pourquoi, mais seul, c'est vraiment trés dur, et il faut y passer du temps. C'est encore loin d'être de mon niveau. Par exemple LXL, je ne peux que essayer de l'utiliser convenablement,( et je n'en suis même pas encore sur, alors,...).

 

En tous cas, moi je te remercie beaucoup (je sais, une fois de plus) pour ce que tu fais sur ce site. Aujourd'hui, je me suis dis, tiens, je n'ai pas énormément de travail ce WE, je passe mon vendredi sur CADxp, et bin,.. Même comme ça, j'ai du mal à suivre ta cadence. J'ai à peine fini de tester que toi, tu as déjà revu les écritures su un autre problème, c'est balaise !

 

Comment fais-tu pour avoir des journée de 48h00 ???

Civil 3D 2025 - COVADIS_18.3b

https://www.linkedin...3%ABt-95313341/

Lien vers le commentaire
Partager sur d’autres sites

 

Bonsoir

 

Je sors un vieux programme Lisp qui a qq limitations (PNT2BLK), je sollicite les Pros du Dev (par exemple Gilles ou autres) et BOUM Gilles me corrige / ameliore la routine vite fait bien fait en quelques instants ! :)

 

Et en plus cela donne des idees a lili2006 qui va generer un peu plus de boulot pour GIlles

dont les journees font sans doute 72h ! :D

 

Encore merci à tous, Le Decapode

 

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Re,

 

J'ai testé et bien sûr, pas de surprises.

 

Une question : Je n'arrive pas à choisir un bloc en fichier externe (bouton parcourir de la boite "Choisir un bloc). Je peux choisir le plan mais ensuite, je suis renvoyé sur la boite de dialogue de départ (à savoir, "Choisir un bloc"). Suis-je le seul ?

 

Merci d'avance.

Civil 3D 2025 - COVADIS_18.3b

https://www.linkedin...3%ABt-95313341/

Lien vers le commentaire
Partager sur d’autres sites

Je n'arrive pas à choisir un bloc en fichier externe (bouton parcourir de la boite "Choisir un bloc). Je peux choisir le plan mais ensuite, je suis renvoyé sur la boite de dialogue de départ (à savoir, "Choisir un bloc")
:casstet:

 

Tu as bien la version de getblock donnée ici ?

 

si tu entres l'expression suivante à la ligne de commande, et que tu choisis un fichier, que se passe-t-il ?

 

(getblock nil)

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

Lien vers le commentaire
Partager sur d’autres sites

Re,

 

J'ai "Getblock (version 2)" :

 

;;; Getblock (version 2)
;;; Retourne le nom du bloc sélectionné à l'écran, entré ou choisi
;;; par l'utilisateur dans une liste déroulante de la boite de dialogue ou
;;; depuis la boite de dialogue standard d'AutoCAD
;;; Argument : le titre (string) ou nil (défaut : "Choisir un bloc")

(defun c:ssb (/ ss name)
(and
(or
(and
(setq ss (cadr (ssgetfirst)))
(= 1 (sslength ss))
(= "INSERT" (cdr (assoc 0 (entget (ssname ss 0)))))
(setq name (cdr (assoc 2 (entget (ssname ss 0)))))
)
(and
(sssetfirst nil nil)
(setq name (getblock nil))
)
)
(sssetfirst nil (ssget "_X" (list '(0 . "INSERT") (cons 2 name))))
)
(princ)
)

;;; Getblock Retourne le nom du bloc entré ou choisi par l'utilisateur 
;;; dans une liste déroulante de la boite de dialogue ou depuis la boite
;;; de dialogue standard d'AutoCAD
;;; Argument : le titre (string) ou nil (défaut : "Choisir un bloc")

(defun getblock (titre / bloc n lst what_next dcl_id nom)
(while (setq bloc (tblnext "BLOCK" (not bloc)))
(setq lst (cons (cdr (assoc 2 bloc)) lst)
)
)
(setq lst (acad_strlsort
(vl-remove-if '(lambda (n) (= (substr n 1 1) "*")) lst)
)
)
(setq dcl_id (load_dialog "Getblock.dcl"))
(setq what_next 2)
(while (>= what_next 2)
(if (not (new_dialog "getblock" dcl_id))
(exit)
)
(start_list "bl")
(mapcar 'add_list lst)
(end_list)
(if titre
(set_tile "box" titre)
)
(if (setq n (vl-position
(strcase (getvar "INSNAME"))
(mapcar 'strcase lst)
)
)
(setq nom (nth n lst))
(setq nom (car lst)
n 0
)
)
(set_tile "bl" (itoa n))
(action_tile "bl" "(setq nom (nth (atoi $value) lst))")
(action_tile "wbl" "(done_dialog 3)")
(action_tile "tp" "(setq nom $value) (done_dialog 4)")
(action_tile
"accept"
"(setq nom (nth (atoi (get_tile \"bl\")) lst)) (done_dialog 1)"
)
(setq what_next (start_dialog))
(cond
((= what_next 3)
(if (setq nom (getfiled "Sélectionner un fichier" "" "dwg" 0))
(setq what_next 1)
(setq what_next 2)
)
)
((= what_next 4)
(cond
((not (read nom))
(setq what_next 2)
)
((tblsearch "BLOCK" nom)
(setq what_next 1)
)
((findfile (setq nom (strcat nom ".dwg")))
(setq what_next 1)
)
(T
(alert (strcat "Le fichier \"" nom "\" est introuvable."))
(setq nom nil
what_next 2
)
)
)
)
((= what_next 0)
(setq nom nil)
)
)
)
(unload_dialog dcl_id)
nom
) 
(defun getblock (titre / bloc n lst what_next dcl_id nom)
(while (setq bloc (tblnext "BLOCK" (not bloc)))
(setq lst (cons (cdr (assoc 2 bloc)) lst)
)
)
(setq lst (acad_strlsort
(vl-remove-if '(lambda (n) (= (substr n 1 1) "*")) lst)
)
)
(setq dcl_id (load_dialog "Getblock_2.dcl"))
(setq what_next 2)
(while (>= what_next 2)
(if (not (new_dialog "getblock_2" dcl_id))
(exit)
)
(start_list "bl")
(mapcar 'add_list lst)
(end_list)
(if titre
(set_tile "box" titre)
)
(if (setq n (vl-position
(strcase (getvar "INSNAME"))
(mapcar 'strcase lst)
)
)
(setq nom (nth n lst))
(setq nom (car lst)
n 0
)
)
(set_tile "bl" (itoa n))
(action_tile "sel" "(done_dialog 5)")
(action_tile "bl" "(setq nom (nth (atoi $value) lst))")
(action_tile "wbl" "(done_dialog 3)")
(action_tile "tp" "(setq nom $value) (done_dialog 4)")
(action_tile
"accept"
"(setq nom (nth (atoi (get_tile \"bl\")) lst)) (done_dialog 1)"
)
(setq what_next (start_dialog))
(cond
((= what_next 3)
(if (setq nom (getfiled "Sélectionner un fichier" "" "dwg" 0))
(setq what_next 1)
(setq what_next 2)
)
)
((= what_next 4)
(cond
((not (read nom))
(setq what_next 2)
)
((tblsearch "BLOCK" nom)
(setq what_next 1)
)
((findfile (setq nom (strcat nom ".dwg")))
(setq what_next 1)
)
(T
(alert (strcat "Le fichier \"" nom "\" est introuvable."))
(setq nom nil
what_next 2
)
)
)
)
((= what_next 5)
(if (and (setq ent (car (entsel)))
(= "INSERT" (cdr (assoc 0 (entget ent))))
)
(setq nom (cdr (assoc 2 (entget ent)))
what_next 1
)
(setq what_next 2)
)
)
((= what_next 0)
(setq nom nil)
)
)
)
(unload_dialog dcl_id)
nom
)  

 

Ce qui donne en mettant en ligne de commande : (getblock nil) =>

 

<!--url{0}-->

 

si tu entres l'expression suivante à la ligne de commande, et que tu choisis un fichier, que se passe-t-il ?

 

AutoCAD me renvoi :

 

Commande: (getblock nil)

"D:\\BA Conception TRAVAIL\\PROJETS\\COMMESPACE\\BA DCE\\Historique BA

DCE\\BATIMENT A\\3-LA PRUNELLE BAT.A- PLHT RDC 22-10-07.dwg"

 

C'est bien le chemin du fichier que je suis allez chercher, et puis après plus rien, la boite de dialogue s'efface et je reprend la main sur les commandes.

 

Merci.

 

 

 

Civil 3D 2025 - COVADIS_18.3b

https://www.linkedin...3%ABt-95313341/

Lien vers le commentaire
Partager sur d’autres sites

Donc ça marche, tu es sûr que ce n'est pas la boite de getlayer qui s'ouvre quand tu as choisi ton fichier ?

 

Bonne nuit...

 

PS : la dernière version (sans fichier DCL) est plus polyvalente : on peut aussi sélectionner le bloc à l'écran

 

http://img210.imageshack.us/img210/8451/getblockoj5.png

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

Lien vers le commentaire
Partager sur d’autres sites

Re,

 

Je viens de charger "Getblock" depuis le lien que tu donnes.

 

Voilà la BD qui s'ouvre ( Nom du bloc et non Choisir un bloc).

J'ai du me tromper quelque part,...

 

<!--url{0}-->

 

Ensuite, j'essaie l'option "parcourir",et aprés la saisie du fichier, je me retrouve avec cette BD =>

 

<!--url{1}--> .

 

Et bien sûr, je n'ai pas accés au fichier choisi auparavent.

 

J'tavouerai que j'suis un peu perdu, mais vu l'heure tardive et la journée passée,.....

 

Bonne nuit.

 

[Edité le 9/11/2007 par lili2006]

Civil 3D 2025 - COVADIS_18.3b

https://www.linkedin...3%ABt-95313341/

Lien vers le commentaire
Partager sur d’autres sites

Rere et Bonjour à toutes et tous,

 

Aprés plusieurs test et sur plusieurs lisps qui font appel à la même BD, voici les retours AutoCAD (toujours pour selectionner un bloc d'un fichier extérieur):

 

1)

Commande: PNT2BLK

Utilisation: (acad_strlsort )

Invalid, block not defined in drawing.

Commande:

Commande: Spécifiez le coin opposé:

Commande:

Commande:

Commande: SSB

Utilisation: (acad_strlsort )

Commande:

 

2)

Commande: ins-ptsUtilisation: (acad_strlsort )

Choix de l'objet: *Annuler*

; erreur: Fonction annulée

Commande:

Commande:

Commande:

Commande: ins-pts

Utilisation: (acad_strlsort )

Commande:

 

3)

Commande: PNT2BLKUtilisation: (acad_strlsort )

Invalid, block not defined in drawing.

Commande:

 

4)

Commande: ins-vtxUtilisation: (acad_strlsort )

Commande:

 

5)

Commande: INS3D

Spécifiez le point d'insertion ou :

Spécifiez un point dans la zone positive de l'axe X du Bloc ou :

Spécifiez un point dans la zone des Y positifs ou :

Commande:

 

Et sur ce Lisp, ça marche !

 

Du coup, une fois les blocs chargés du dessin de référence, je peux à nouveau utiliser les autres Lisp, puisque c'est la même boite de dialogue (je veux dire que les blocs restent chargés !).

 

Une idée ?

Civil 3D 2025 - COVADIS_18.3b

https://www.linkedin...3%ABt-95313341/

Lien vers le commentaire
Partager sur d’autres sites

Je ne comprends pas ce que tu fais, tu testes plusieurs routines à la fois : pnt2blk, ssb, ins-pts, ins-vtx, ins3d, mais il me semble qu'avec la dernière postée par exemple ins-pts tu ne vas pas au bout de la procédure.

 

Tu lance ins-pts,

la boite de getBlock s'ouvre,

tu fais parcourrir,

la boite getFiled s'ouvre,

tu sélectionnes ton dwg,

la boite getLayer s'ouvre,

tu sélectionnes le calque pour filtrer les points

la boite getLayer se ferme,

les blocs sont insérés.

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

Lien vers le commentaire
Partager sur d’autres sites

Bonjour à toutes et tous,

 

(gile), la nuit porte conseil, c'est sûr !

 

Cela fonctionne parfaitement, c'était donc moi le Beug.

 

En fait, sur le dessin que je voulais importer, il n'y avit rien !!! (Oublie d'enregistrement ou je ne sais quoi,...). Il m'a encore fallu 1 heure ce matin avant de m'en apercevoir, Pfuuuuuuu.

 

Merci encore et désolé pour le dérangement,....

Civil 3D 2025 - COVADIS_18.3b

https://www.linkedin...3%ABt-95313341/

Lien vers le commentaire
Partager sur d’autres sites

Matt666, aurais-tu écrit le Lisp comme cela également ?

Mon problème est que je ne connais pas du tout le Vlisp, parce qu'il n'est pas disponible sur BricsCAD...

 

Enfin bon il paraitrait qu'ils les ont implémentés dans la nouvelle verison 8... Pleine de bugs pour l'instant

 

Je ne désespère pas (trop)...

 

A bientot !

Matt.

"Chacun compte pour un, et nul ne compte pour plus d'un."

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é