<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>sujet Re: LISP: ssget + récupération nombre de bloc dans AutoCAD – tous produits - Forum Français</title>
    <link>https://forums.autodesk.com/t5/autocad-tous-produits-forum/lisp-ssget-recuperation-nombre-de-bloc/m-p/9441505#M25370</link>
    <description>&lt;P&gt;Si je lis bien le message d'erreur, il semble que soit simplement l'espace entre SETQ et SS qui a sauté, vérifie le code.&lt;/P&gt;</description>
    <pubDate>Tue, 14 Apr 2020 11:07:03 GMT</pubDate>
    <dc:creator>_gile</dc:creator>
    <dc:date>2020-04-14T11:07:03Z</dc:date>
    <item>
      <title>LISP: ssget + récupération nombre de bloc</title>
      <link>https://forums.autodesk.com/t5/autocad-tous-produits-forum/lisp-ssget-recuperation-nombre-de-bloc/m-p/9427011#M25361</link>
      <description>&lt;P&gt;Bonjour,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;J'ai besoin d'aide car je tente de créer un lisp permettant de créer une sélection, puis en cliquant sur un des blocs de la sélection, en récupérer la quantité, mais seulement dans la sélection de départ et&amp;nbsp; enfin d'écrire cette quantité dans une variable que j'utiliserai ensuite pour modifier un attribut d'un autre bloc.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Pour la sélection pas trop de problème:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;LI-CODE lang="markup"&gt;(defun C:FB()

(setq ss1 (ssget))

)&lt;/LI-CODE&gt;&lt;P&gt;Je sais qu'il est possible de filtrer mais pas vraiment d'utilité puisque je dois ensuite sélectionner un des blocs dans la sélection.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;J'ai ensuite ce bout de code permettant de récupérer le nom du bloc que l'on choisit, afin de s'en servir pour compter le nombre de bloc du même nom dans la sélection (je ne sais pas si c'est la meilleure façon de faire ?) :&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;LI-CODE lang="markup"&gt;(defun C:BN()
 
(setq blname (cdr(assoc 2 (entget (ssname (ssget (cadr(entsel"\nSelection du bloc:"))) 0)))))
  
)&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Une fois le bloc choisis, j'arrive bien à récupérer son nom en tapant !blname dans la barre de commande.&lt;/P&gt;&lt;P&gt;Le nom du bloc comporte des espaces.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Mais je n'arrive pas à l'utiliser avec sslength afin d'en connaitre le nombre présent dans la sélection.&lt;/P&gt;&lt;P&gt;Merci à vous pour votre aide !&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 07 Apr 2020 11:39:14 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/autocad-tous-produits-forum/lisp-ssget-recuperation-nombre-de-bloc/m-p/9427011#M25361</guid>
      <dc:creator>Anonymous</dc:creator>
      <dc:date>2020-04-07T11:39:14Z</dc:date>
    </item>
    <item>
      <title>Re: LISP: ssget + récupération nombre de bloc</title>
      <link>https://forums.autodesk.com/t5/autocad-tous-produits-forum/lisp-ssget-recuperation-nombre-de-bloc/m-p/9427534#M25362</link>
      <description>&lt;P&gt;Salut,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;En faisant les choses dans l'autre sens ça sera plus facile. Connaissant le nom du bloc, tu peux filtrer le jeu de sélection.&lt;/P&gt;
&lt;LI-CODE lang="markup"&gt;(defun c:BN (/ ent elst ss)
  (if
    (and
      (setq ent (car (entsel "\nSélectionnez le bloc source: ")))
      (setq elst (entget ent))
      (= (cdr (assoc 0 elst)) "INSERT")
      (setq ss (ssget (list (cons 0 "INSERT") (assoc 2 elst))))
    )
     (alert (strcat (itoa (sslength ss)) " blocs sélectionnés"))
  )
  (princ)
)&lt;/LI-CODE&gt;</description>
      <pubDate>Tue, 07 Apr 2020 14:41:59 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/autocad-tous-produits-forum/lisp-ssget-recuperation-nombre-de-bloc/m-p/9427534#M25362</guid>
      <dc:creator>_gile</dc:creator>
      <dc:date>2020-04-07T14:41:59Z</dc:date>
    </item>
    <item>
      <title>Re: LISP: ssget + récupération nombre de bloc</title>
      <link>https://forums.autodesk.com/t5/autocad-tous-produits-forum/lisp-ssget-recuperation-nombre-de-bloc/m-p/9430079#M25363</link>
      <description>&lt;P&gt;Merci pour cette réponse rapide !&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Ça marche très bien en filtrant de cette manière, mais on est obligé de sélectionner à chaque fois le jeu de sélection "ss".&lt;/P&gt;&lt;P&gt;Ce que j'aimerais faire, c'est créer un jeu de sélection en amont, comportant plusieurs blocs différents et le garder en mémoire afin d'aller rechercher par après le nombre de blocs via une 2nd manipulation, en ne sélectionnant que le bloc source.&lt;/P&gt;</description>
      <pubDate>Wed, 08 Apr 2020 14:34:32 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/autocad-tous-produits-forum/lisp-ssget-recuperation-nombre-de-bloc/m-p/9430079#M25363</guid>
      <dc:creator>Anonymous</dc:creator>
      <dc:date>2020-04-08T14:34:32Z</dc:date>
    </item>
    <item>
      <title>Re: LISP: ssget + récupération nombre de bloc</title>
      <link>https://forums.autodesk.com/t5/autocad-tous-produits-forum/lisp-ssget-recuperation-nombre-de-bloc/m-p/9430181#M25364</link>
      <description>&lt;P&gt;Dans ce cas, autant compter directement les blocs dans la sélection :&lt;/P&gt;
&lt;LI-CODE lang="general"&gt;(defun c:BN (/ ss i n l p)
  (if (setq ss (ssget '((0 . "INSERT"))))
    (repeat (setq i (sslength ss))
      (setq n (getpropertyvalue
		(getpropertyvalue
		  (ssname ss (setq i (1- i)))
		  "BlockTableRecord"
		)
		"Name"
	      )
	    l
	      (if (setq p (assoc n l))
		(subst (cons n (1+ (cdr p))) p l)
		(cons (cons n 1) l)
	      )
      )
    )
  )
  (if l
    (foreach p l
      (prompt (strcat "\n" (car p) " : " (itoa (cdr p))))
    )
  )
  (princ)
)&lt;/LI-CODE&gt;</description>
      <pubDate>Wed, 08 Apr 2020 15:05:52 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/autocad-tous-produits-forum/lisp-ssget-recuperation-nombre-de-bloc/m-p/9430181#M25364</guid>
      <dc:creator>_gile</dc:creator>
      <dc:date>2020-04-08T15:05:52Z</dc:date>
    </item>
    <item>
      <title>Re: LISP: ssget + récupération nombre de bloc</title>
      <link>https://forums.autodesk.com/t5/autocad-tous-produits-forum/lisp-ssget-recuperation-nombre-de-bloc/m-p/9431073#M25365</link>
      <description>&lt;P&gt;Oui en effet, comme un lisp de comptage de bloc. Mais en faisant cela comment fait on pour transmettre la quantité de blocs à un attribut d'un autre?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;En y réfléchissant plus, le but principal serait en fait de se servir du lisp existant "cat" de Patrick_35, afin de copier les attributs d'un bloc A vers un bloc B, et d'écrire la quantité de blocs A présent dans la sélection de départ SS à un attribut "quantité" du bloc B. Et on répéterai cette opération autant de fois que nécessaire.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Pour résumé:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;- création d'une sélection, via un (setq ss (ssget))&lt;/P&gt;&lt;P&gt;- lisp cat&lt;/P&gt;&lt;P&gt;- sélection bloc A d'origine&lt;/P&gt;&lt;P&gt;- sélection bloc B destinataire&lt;/P&gt;&lt;P&gt;- les attributs identiques se copient de A vers B&lt;/P&gt;&lt;P&gt;- SI une sélection SS existe, le nombre de blocs A dans SS est transmis à l'attribut "quantité" du bloc B&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Je ne sais pas si on peut modifier le lisp CAT pour arriver à ce résultat ?&lt;/P&gt;</description>
      <pubDate>Wed, 08 Apr 2020 21:02:20 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/autocad-tous-produits-forum/lisp-ssget-recuperation-nombre-de-bloc/m-p/9431073#M25365</guid>
      <dc:creator>Anonymous</dc:creator>
      <dc:date>2020-04-08T21:02:20Z</dc:date>
    </item>
    <item>
      <title>Re: LISP: ssget + récupération nombre de bloc</title>
      <link>https://forums.autodesk.com/t5/autocad-tous-produits-forum/lisp-ssget-recuperation-nombre-de-bloc/m-p/9431560#M25366</link>
      <description>&lt;P&gt;C'est difficile de suivre ce genre de discussion où la demande évolue (elle n'est plus la même que celle de départ).&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;D'après la dernière demande, tu voudrais :&lt;/P&gt;
&lt;P&gt;1. stocker le décompte de blocs sélectionnés&lt;/P&gt;
&lt;P&gt;2. sélectionner un bloc cible contenant un attribut "QUANTITE" pour y écrire la valeur dans le décompte correspondant à un bloc source sélectionné ensuite.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Pour la première commande, tu peux reprendre la commande c:BN ci dessus en écrivant la liste d'association contenant le décompte des blocs dans un dictionnaire (ldata).&lt;/P&gt;
&lt;P&gt;Pour la seconde, il suffit d'inviter l'utilisateur à sélectionner le bloc cible puis le bloc source et d'écrire dans l'attribut "QUANTITE" du bloc cible la valeur correspondant au bloc source dans le décompte.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;LI-CODE lang="markup"&gt;(defun c:BN (/ ss i n l p)
  (if (setq ss (ssget '((0 . "INSERT"))))
    (repeat (setq i (sslength ss))
      (setq n (getpropertyvalue
		(getpropertyvalue
		  (ssname ss (setq i (1- i)))
		  "BlockTableRecord"
		)
		"Name"
	      )
	    l (if (setq p (assoc n l))
		(subst (cons n (1+ (cdr p))) p l)
		(cons (cons n 1) l)
	      )
      )
    )
  )
  (vlax-ldata-put "romano_brice" "compte_blocs" l)
  (princ)
)

(defun c:EA (/ s c n i)
  (and
    (setq c (car (entsel "\nSélectionnez le bloc cible: ")))
    (= (cdr (assoc 0 (entget c))) "INSERT")
    (setq s (car (entsel "\nSélectionnez le bloc source: ")))
    (= (cdr (assoc 0 (entget s))) "INSERT")
    (setq n (getpropertyvalue (getpropertyvalue s "BlockTableRecord") "Name"))
    (setq i (cond
	      ((cdr (assoc n (vlax-ldata-get "romano_brice" "compte_blocs"))))
	      (T 0)
	    )
    )
    (setpropertyvalue c "QUANTITE" (itoa i))
  )
  (princ)
)&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 09 Apr 2020 06:08:49 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/autocad-tous-produits-forum/lisp-ssget-recuperation-nombre-de-bloc/m-p/9431560#M25366</guid>
      <dc:creator>_gile</dc:creator>
      <dc:date>2020-04-09T06:08:49Z</dc:date>
    </item>
    <item>
      <title>Re: LISP: ssget + récupération nombre de bloc</title>
      <link>https://forums.autodesk.com/t5/autocad-tous-produits-forum/lisp-ssget-recuperation-nombre-de-bloc/m-p/9432814#M25367</link>
      <description>&lt;P&gt;Ça marche parfaitement sur Autocad, un grand merci.&lt;/P&gt;&lt;P&gt;Des collègues utilisant d'autres logiciels de DAO ont le message " Erreur : fonction indéfinie - GETPROPERTYVALUE ". Je suppose que cette fonction est propre à Autocad ??&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 09 Apr 2020 16:23:19 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/autocad-tous-produits-forum/lisp-ssget-recuperation-nombre-de-bloc/m-p/9432814#M25367</guid>
      <dc:creator>Anonymous</dc:creator>
      <dc:date>2020-04-09T16:23:19Z</dc:date>
    </item>
    <item>
      <title>Re: LISP: ssget + récupération nombre de bloc</title>
      <link>https://forums.autodesk.com/t5/autocad-tous-produits-forum/lisp-ssget-recuperation-nombre-de-bloc/m-p/9432924#M25368</link>
      <description>&lt;P&gt;Les versions ci-dessous devraient fonctionner sur tous les logiciels qui supportent Visual LISP.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;LI-CODE lang="markup"&gt;(vl-load-com)
(defun c:BN (/ ss i n l p)
  (if (ssget '((0 . "INSERT")))
    (progn
      (vlax-for	b (setq	ss (vla-get-ActiveSelectionSet
			     (vla-get-ActiveDocument
			       (vlax-get-acad-object)
			     )
			   )
		  )
	(setq n	(vla-get-EffectiveName b)
	      l	(if (setq p (assoc n l))
		  (subst (cons n (1+ (cdr p))) p l)
		  (cons (cons n 1) l)
		)
	)
      )
      (vla-Delete ss)
    )
  )
  (vlax-ldata-put "romano_brice" "compte_blocs" l)
  (princ)
)

(defun c:EA (/ s c n i)
  (and
    (setq c (car (entsel "\nSélectionnez le bloc cible: ")))
    (= (cdr (assoc 0 (entget c))) "INSERT")
    (setq s (car (entsel "\nSélectionnez le bloc source: ")))
    (= (cdr (assoc 0 (entget s))) "INSERT")
    (setq n (vla-get-EffectiveName (vlax-ename-&amp;gt;vla-object s))
	  i (cond
	      ((cdr (assoc n (vlax-ldata-get "romano_brice" "compte_blocs"))))
	      (T 0)
	    )
    )
    (foreach a (vlax-invoke (vlax-ename-&amp;gt;vla-object c) 'GetAttributes)
      (if (= (vla-get-TagString a) "QUANTITE")
	(vla-put-TextString a (itoa i))
      )
    )
  )
  (princ)
)&lt;/LI-CODE&gt;</description>
      <pubDate>Thu, 09 Apr 2020 17:10:23 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/autocad-tous-produits-forum/lisp-ssget-recuperation-nombre-de-bloc/m-p/9432924#M25368</guid>
      <dc:creator>_gile</dc:creator>
      <dc:date>2020-04-09T17:10:23Z</dc:date>
    </item>
    <item>
      <title>Re: LISP: ssget + récupération nombre de bloc</title>
      <link>https://forums.autodesk.com/t5/autocad-tous-produits-forum/lisp-ssget-recuperation-nombre-de-bloc/m-p/9441454#M25369</link>
      <description>&lt;P&gt;Bonjour,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;En effet on utilise plusieurs LISP se servant de Visual Lisp.&lt;/P&gt;&lt;P&gt;La partie EA fonctionne bien sur tous les software mais la partie BN me renvoie:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Erreur : fonction indéfinie - SETQSS&lt;/P&gt;</description>
      <pubDate>Tue, 14 Apr 2020 10:34:21 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/autocad-tous-produits-forum/lisp-ssget-recuperation-nombre-de-bloc/m-p/9441454#M25369</guid>
      <dc:creator>Anonymous</dc:creator>
      <dc:date>2020-04-14T10:34:21Z</dc:date>
    </item>
    <item>
      <title>Re: LISP: ssget + récupération nombre de bloc</title>
      <link>https://forums.autodesk.com/t5/autocad-tous-produits-forum/lisp-ssget-recuperation-nombre-de-bloc/m-p/9441505#M25370</link>
      <description>&lt;P&gt;Si je lis bien le message d'erreur, il semble que soit simplement l'espace entre SETQ et SS qui a sauté, vérifie le code.&lt;/P&gt;</description>
      <pubDate>Tue, 14 Apr 2020 11:07:03 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/autocad-tous-produits-forum/lisp-ssget-recuperation-nombre-de-bloc/m-p/9441505#M25370</guid>
      <dc:creator>_gile</dc:creator>
      <dc:date>2020-04-14T11:07:03Z</dc:date>
    </item>
    <item>
      <title>Re: LISP: ssget + récupération nombre de bloc</title>
      <link>https://forums.autodesk.com/t5/autocad-tous-produits-forum/lisp-ssget-recuperation-nombre-de-bloc/m-p/9441881#M25371</link>
      <description>&lt;P&gt;De base ça fonctionne sur Autocad, une maj vers la SP3 de Zwcad 2019 a résolu le problème pour ce soft.&lt;/P&gt;&lt;P&gt;Un grand merci !&lt;/P&gt;</description>
      <pubDate>Tue, 14 Apr 2020 13:31:21 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/autocad-tous-produits-forum/lisp-ssget-recuperation-nombre-de-bloc/m-p/9441881#M25371</guid>
      <dc:creator>Anonymous</dc:creator>
      <dc:date>2020-04-14T13:31:21Z</dc:date>
    </item>
  </channel>
</rss>

