IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Lisp Discussion :

(Autolisp] Suppression des points dans les blocs


Sujet :

Lisp

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Architecte
    Inscrit en
    Décembre 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte
    Secteur : Bâtiment

    Informations forums :
    Inscription : Décembre 2015
    Messages : 2
    Points : 1
    Points
    1
    Par défaut (Autolisp] Suppression des points dans les blocs
    Bonjour,

    Je débute sur Autolisp et j'ai une petite question.
    J'aimerais supprimer tous les points du dessin qui sont dans les blocs.
    Quand j'en ai un seul et que je connais le nom ça marche très bien (ici le bloc "test") :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    (defun c:DELPOINT () 
     
    (command "-modifbloc" "test")
     
    (setq dp (ssget "_X" '((0 . "POINT"))))
    (command "_ERASE" dp "")
     
     
    (command "fermerbloc" "E")
     
    (princ)
     
     )
    Par contre, j'aimerais faire ça pour tous les blocs contenu dans le dessin sachant que j'ignore leur nom.
    Je pense pour récupérer le nom des blocs il faut faire qqch comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    (setq sm (ssget "_x" '((0 . "BLOCK"))))
    (setq s1 (ssname sm 0))
    Sauf que j'ai déjà de la peine...
    En fait j'aimerais arriver à une boucle qui trouve le nom des blocs ce qui permet de rentrer dans le bloc, supprimer les points, le fermer pour passer au suivant.

    Est-ce que vous auriez une idée pour arriver à mon but ?

    Je vous remercie d'avance pour votre aide

    David

  2. #2
    Nouveau Candidat au Club
    Homme Profil pro
    Architecte
    Inscrit en
    Décembre 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte
    Secteur : Bâtiment

    Informations forums :
    Inscription : Décembre 2015
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    J'ai réussi !
    J'ai juste un problème, je n'arrive pas à exclure les xrefs de la sélection, sauriez-vous comment faire ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    (defun c:DELPOINTS () 
     
    (setq points (ssget "_x" '((0 . "POINT"))))
    (command "_ERASE" points "")
     
     
    (vl-load-com) ; chargement vl
    (setq blocs (ssget "_x" '((0 . "INSERT")))) ; sélection de tous les blocs dans le dessin
    (setq nblocs (sslength blocs)) ; calcul du nombre de blocs
     
    (repeat nblocs ; boucle d'itération
      (setq nblocs (1- nblocs)) ; incrémentation
     
       (setq name (ssname blocs nblocs)) ; récupération du Ename du bloc à l'indice spécifique        
       (setq sbn (vla-get-effectivename (vlax-ename->vla-object name))) ; obtention du nom réel
       (command "-modifbloc" sbn) ; ouverture du bloc à l'indice spécifique
       (if (setq dp (ssget "_X" '((0 . "POINT")))) ; s'il y a des points suppresion de ceux ci
        (command "_ERASE" dp "" "fermerbloc" "E") ; suppresion et fermeture du blocs quand il y a des points
        (command "fermerbloc") ; fermeture du bloc s'il n'a pas de points
       )
     
    )
     
     
    )

  3. #3
    Membre du Club
    Inscrit en
    Juillet 2010
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 33
    Points : 42
    Points
    42
    Par défaut
    Salut

    Regarde le code dxf 70 dans la table des blocs

    ps : c'est bien de poster sur plusieurs forums, mais mieux de l'indiquer

    @+

  4. #4
    Membre habitué
    Inscrit en
    Juin 2002
    Messages
    198
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 198
    Points : 139
    Points
    139
    Par défaut
    Bonjour,
    Supprimer les points dans des blocs peut aller contre le bon fonctionnement d'autres routines.
    Par ex. dans les blocs que j'utilise pour le P&ID, des points sont utilises pour couper un morceau de ligne.

    Si tu ne veux pas voir les points, pourquoi ne pas utiliser (setvar "pdmode" 1)?

    Pour sélectionner les blocs, le mieux est de modifier leur définition
    Code Lisp : Sélectionner tout - Visualiser dans une fenêtre à part
    (setq AllBlocks (vla-get-blocks(vla-get-activedocument(vlax-get-acad-object))))

    avec ssget tu sélectionne tous les blocs dans ton dessin, même les copies.

    A+

    Citation Envoyé par david32viry Voir le message
    Bonjour,

    Je débute sur Autolisp et j'ai une petite question.
    J'aimerais supprimer tous les points du dessin qui sont dans les blocs.
    Quand j'en ai un seul et que je connais le nom ça marche très bien (ici le bloc "test") :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    (defun c:DELPOINT () 
     
    (command "-modifbloc" "test")
     
    (setq dp (ssget "_X" '((0 . "POINT"))))
    (command "_ERASE" dp "")
     
     
    (command "fermerbloc" "E")
     
    (princ)
     
     )
    Par contre, j'aimerais faire ça pour tous les blocs contenu dans le dessin sachant que j'ignore leur nom.
    Je pense pour récupérer le nom des blocs il faut faire qqch comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    (setq sm (ssget "_x" '((0 . "BLOCK"))))
    (setq s1 (ssname sm 0))
    Sauf que j'ai déjà de la peine...
    En fait j'aimerais arriver à une boucle qui trouve le nom des blocs ce qui permet de rentrer dans le bloc, supprimer les points, le fermer pour passer au suivant.

    Est-ce que vous auriez une idée pour arriver à mon but ?

    Je vous remercie d'avance pour votre aide

    David

Discussions similaires

  1. Réponses: 3
    Dernier message: 25/05/2015, 18h55
  2. [VxiR2] Suppression des '0' dans les cellules
    Par sopra_mpo dans le forum Deski
    Réponses: 2
    Dernier message: 27/10/2010, 15h15
  3. Réponses: 0
    Dernier message: 06/02/2008, 17h05
  4. suppression des Points dans N°Tel
    Par LeXo dans le forum Requêtes
    Réponses: 2
    Dernier message: 20/08/2007, 15h29
  5. suppression des espaces dans les noms de fichiers
    Par menuge dans le forum Général Python
    Réponses: 8
    Dernier message: 22/10/2006, 12h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo