J aimerais apprendre a creer un lisp pour verifier s il n y a rien sur le calque 0 merci pour votre aide

Vues : 460

Y répondre

Réponses à cette discussion

Tu fais un (ssget "x" '((8 . "0"))) pour sélectionner ce qui est dans le calque zéro. Il suffit de vérifier que la taille de la sélection est supérieure à 0. (< 0 (sslength (ssget "x" '((8 . "0"))))) renvoie T si le calque contient un ou des élément(s), nil sinon.

Salut,

J'apporterais un bémol à ce que dit Carboleum.

La fonction LISP ssget retourne nil quand la sélection est vide et (sslength nil) provoque une erreur.

Donc, pour savoir s'il n'y a rien sur le calque "0" :

(not (ssget "_X" '((8 . "0"))))

Ou, pour connaitre le nombre d'entités sur le calque "0" :

(if (setq ss (ssget "_X" '((8 . "0")))) 
  (sslength ss)

  0
)

Merci à Carboleum et gile pour votre aide.

Un grand Merci.

Bonjour Gile,

Merci encore.

Je tiens à dire que je ne connais pas le lisp, je l'utilise mais j'espère avec vous progresser un peu et réussir

peut-être à déchiffrer les lips.

Voici mon souci:

Quand je créé le lisp et que je le charge cela me met commande inconnue quand je tape calq0 sur ma barre de commande.

Voici le lisp : je sais qu'il manque quelque chose pour qu'autocad puisse reconnaitre cette commande, peux tu me le corriger.

merci d'avance.

;;; calq0 (gile)

;;; vérifie le calque 0

(if (setq ss (ssget "_X" '((8 . "0"))))

(sslength ss) 0 )

(if (setq ss (ssget "_X" '((8 . "0")))) (sslength ss) 0 )

Il faut coller cette ligne sur la ligne de commande et faire eventuellement Entree

Mais j'ai toujours une entite de TROP !

SVP pourquoi Maitre Gilles ?

Merci Patrice,

ça marche.

Par contre, j'ai créé un bouton qui me donne le résultat et également le lisp (voir image jointe).

J'aimerais obtenir que le résultat sur la ligne de commande et sans trop abuser, serait-il possible qu'autocad me donne le résultat mais également sélectionne les objets contenus dans le calque 0.

Un grand merci à patrice et à tous les autres

Patrice,

Je pense savoir tu dois avoir une présentation qui a été activée et c'est la fenêtre de la présentation (pas une fenêtre flottante) qui est par défaut sur le calque 0.

Taif,

Tu peux essayer cette routine. Quand elle est chargée dans le dessin, il suffit d'entrer TAIF (en majuscules ou minuscules, peu importe) en ligne de commande pour la lancer. Tu peux remplacer TAIF par le nom que tu veux en laissant le préfixe c:

La routine corrige le problème soulevé par patrice.

(defun c:TAIF (/ ss)
  (if (setq ss (ssget "_X"
              '((8 . "0")
            (-4 . "<NOT")
            (-4 . "<AND")
            (0 . "VIEWPORT")
            (69 . 1)
            (-4 . "AND>")
            (-4 . "NOT>")
               )
           )
      )
    (progn
      (sssetfirst nil ss)
      (princ (strcat "\n" (itoa (sslength ss)) " objet(s) sélectionnné(s)."))
    )
    (princ "\nAucun objet sélectionné.")
  )
  (princ)
)

Merci Gile,

je vais l'essayer demain au travail.

j'ai quelques idées de lisp pour améliorer 

mes tâches au travail. J'aimerais te les soumettre si tu es d'accord?

Merci Gile.

Bonjour Gile,

J'ai essayé la routine, ça fonctionne très bien.

J'ai les objets sélectionnés sur le calque 0.

Par contre, j'aurais aimé qu'autocad m'indique également le nombre d'objets sur ce calque.

Merci par avance.

Hello

La routine fonctionne parfaitement et indique bien le nbr d'objet !

sur le calque ZERO dans l'onglet Objet ET DANS les Presentations

Pour Taif : SVP tu agrandis la zone "ligne de commande" ou bien F2 (pour voir l'ecran Texte)

Pour Gilles : SVP serait il possible d'avoir une variante qui ne compte et ne selectionne que dans l'Onglet Objet ?

Ou bien super variante : Une question au debut

- Dans onglet Objet OU dans les Presentations ?

Merci d'avance, Patrice

Trois variantes :

;; MS0 sélectionne les objets sur le calque 0 dans l'espace objet
(defun c:ms0 (/ ss)
  (if (setq ss (ssget "_X" '((8 . "0") (410 . "Model"))))
    (progn
      (sssetfirst nil ss)
      (princ
    (strcat    "\n"
        (itoa (sslength ss))
        " objet(s) sur le calque '0' dans l'espace objet."
    )
      )
    )
    (princ
      "\nAucun objet sur le calque '0' dans l'espace objet."
    )
  )
  (princ)
)

;; PS0 sélectionne les objets sur le calque 0 dans les présentations
(defun c:ps0 (/ ss)
  (if (setq ss (ssget "_X"
              '((8 . "0")
            (410 . "~Model")
            (-4 . "<NOT")
            (-4 . "<AND")
            (0 . "VIEWPORT")
            (69 . 1)
            (-4 . "AND>")
            (-4 . "NOT>")
               )
           )
      )
    (progn
      (sssetfirst nil ss)
      (princ
    (strcat    "\n"
        (itoa (sslength ss))
        " objet(s) sur le calque '0' dans les présentations."
    )
      )
    )
    (princ
      "\nAucun objet sur le calque '0' dans les présentations."
    )
  )
  (princ)
)

;; SS0 Sélectionne tous les objets sur le calque 0 et signale ceux qui ne sont pas dans l'espace courant
(defun c:ss0 (/ ss cs n i ent)
  (if (setq ss (ssget "_X"
              '((8 . "0")
            (-4 . "<NOT")
            (-4 . "<AND")
            (0 . "VIEWPORT")
            (69 . 1)
            (-4 . "AND>")
            (-4 . "NOT>")
               )
           )
      )
    (progn
      (setq cs (if
         (and
           (= (getvar 'tilemode) 0)
           (= (getvar 'cvport) 1)
         )
          (getvar 'ctab)
          "Model"
           )
        n  0
        i  0
      )
      (while (setq ent (ssname ss i))
    (setq own (cdr (assoc 410 (entget ent))))
    (if
      (or
        (and (= "Model" cs) (/= "Model" own))
        (and (/= "Model" cs) (/= cs own))
      )
       (setq n (1+ n))
    )
    (setq i (1+ i))
      )
      (sssetfirst nil ss)
      (princ
    (strcat    "\n"
        (itoa i)
        " objet(s) sur le calque '0' ("
        (itoa n)
        " ne sont pas dans l'espace courant)."
    )
      )
    )
    (princ
      "\nAucun objet sur le calque '0'."
    )
  )
  (princ)
)

Bonsoir Maitre Gilles

Comme toujours la grande classe

MERCI, A+, Patrice

RSS

Membres

Bibliothèque TraceParts - Fichiers 2D & 3D GRATUITS

© 2014   Créé par AUGIfr

Badges  |  Signaler un problème  |  Conditions d'utilisation