Aller au contenu

Petit bug dans routine PNT2BLK


lecrabe

Messages recommandés

Salut,

 

Je reconnais ce LISP (du moins le style)

 

L'erreur vient de l'endroit où tu as mis :

(if lay

(command "_chprop" (entlast) "" "_Layer" lay "")

)

tu l'as mis l'intérieur de l'expression (vla-InsertBlock ...) à la place du nom du block d'où l'erreur stringp nil.

 

Tu as aussi placé

(if (setq ss (ssget "_X" (list '(0 . "INSERT") (cons 2 bname))))

(setq lay (cdr (assoc 8 (entget (ssname ss 0)))))

)

 

juste avant (vlax-for (vla-get-ActiveSelectionSet ...) qui traite le jeu de sélection actif qui du coup se trouve être les blocs insérés dans le dessin au lieu des polylignes.

 

Modifier un LISP, demande de comprendre comment il fonctionne, on ne peut pas toujours simplement remplacer une expression par une autre, d'autant plus qu'il s'agit ici de Visual LISP, un peu moins facile à comprendre.

 

J'ai aussi supprimé certains test inutiles : avec getblock on est sûr d'avoir un nom de bloc valide.

 

(defun c:ins-vtx (/ acdoc space bname ss lay 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 (ssget "_X" '((0 . "*POLYLINE")))
(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)
) 

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

Lien vers le commentaire
Partager sur d’autres sites

Re,

 

Merci encore (gile), tes remarques sont trés interessante pour apprendre.

Si maintenant, je voulais choisir le calque des polylignes à traiter (pour le moment le lisp met le bloc sur Toutes les polylignes même si le calque est gelé!) ou bien en selection graphique, ou même (le top du top) se servir de GETLAYERS ??

 

Evidemment, cet outil deviendrai tout de suite trés interessant, dans pas mal d'application même.

 

Merci d'avance si tu as (ou quelqu'un d'autres ?) le courage (j'en doute pas) de jeter un oeil.

 

Bon WE à tous,

 

Civil 3D 2025 - COVADIS_18.3b

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

Lien vers le commentaire
Partager sur d’autres sites

Re,

 

Modifier un LISP, demande de comprendre comment il fonctionne, on ne peut pas toujours simplement remplacer une expression par une autre, d'autant plus qu'il s'agit ici de Visual LISP, un peu moins facile à comprendre.

 

J'suis bien conscient de cela, mais chaque test, même stupide, me permet de mieux comprendre l'esprit du lisp et je sais que toi, ou quelques autres trouverons toujours un moment pour répondre, la preuve. Et on ne répond pas tous les jours qu'à des questions inteliigentes,....

Mais continuer d'oser les poser, je trouve ça mieux que de rester dans son coin à ne rien comprendre.(Dans la mesure ou c'est pas trop "gonflant", bien sûr!).

 

En tous cas, merci encore.

Civil 3D 2025 - COVADIS_18.3b

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

Lien vers le commentaire
Partager sur d’autres sites

(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)
) 

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

Lien vers le commentaire
Partager sur d’autres sites

Ouf,

 

Bientôt, on aura plus le temps de poster nos requêtes, super .

 

Quand je pense que j'ai quasiment passé la journée sur CADxp et que toi c'est tous les jours comme ça,...

 

C'est ce que je disais sur un autre post, cela va trés vite su ce site et il est bele et bien vivant.

 

Merci encore (gile) le résultat est terrible !!!

 

(Imaginons la pose de bornes sur un terrain de 500 lots ,,!!! Même covadis ne sais pas faire (heu, tout du moins à ma connaissance, à part en géocodification sur le terrain ou en "bidouillant" la géobase, c'est à dire en associant le code du symbole au point) Et pour l'habillage 3D, oh là là, il me tarde de tester sur un plan topo 3D !!!.

 

[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

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é