Aller au contenu

Special sélection - Gile


marionsname

Messages recommandés

Salut Gile,

merci pour le code ssocl,

Encore quelques demandes si possible :

-Choisir eventuellement plusieurs calques au lieu d'un seul

-Taper le(s) nom(s) du calque (s) au lieu de sélectionner un objet.

-Utilisation de inv_sel après ssocl, le contour est egalement sélectionné, si possible l'extraire.

-Faire une autre routine ssexocl (combiner ssocl et inv_sel) pour sélectionner les objets d'un calque à l'extérieur d'un contour objet. Bien sur ça permettra de créer une autre routine ssexoc.

J'espère que ça va enrichir tes routines de sélection et servir à plus d'un :)

Merci infiniment gile

Lien vers le commentaire
Partager sur d’autres sites

Voilà pour que ssocl (de gile) s'applique à un calque donné, ici CALQTEST

 

 (defun c:ssocl (/ fr elst typ ss)
(and
(sssetfirst nil nil)
(setq fr (car (entsel "\nSélectionnez un objet pour la capture: ")))
(setq elst (entget fr))
(setq typ (cdr (assoc 0 elst)))
(or
(= typ "CIRCLE")
(and
(= typ "ELLIPSE")
(= (cdr (assoc 41 elst)) 0.0)
(= (cdr (assoc 42 elst)) (* 2 pi))
)
(and
(= typ "LWPOLYLINE")
(= 1 (logand 1 (cdr (assoc 70 elst))))
)
)
(setq ss (SelByObj fr "Cp" (list (cons 8 "CALQTEST"))))
(or (ssdel fr ss) T)
(sssetfirst nil ss)
)
(princ)
) 

J'espère ne pas looper quelque chose

Maintenant comment faire pour qu'elle s'applique à plusieurs calques?

 

[Edité le 15/11/2008 par marionsname]

Lien vers le commentaire
Partager sur d’autres sites

Et pour le faire avec ta routine initiale en sélectionant plusieurs objets?

Je ne comprends pas bien la demande.

 

Et comment rajouter le contour pour qu'avec inv_sel il ne soit plus sélectionné. J'ai fait des tests avec ssadd mais j'ai pas réussi.

En fait il suffit de ne pas le supprimer. Commente (;) ou supprime la ligne :

(or (ssdel fr ss) T) 

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

Lien vers le commentaire
Partager sur d’autres sites

Je ne comprends pas bien la demande.

 (setq ent (car (entsel "\nSélectionnez un objet sur le calque: ")))

 

ne permet de sélectionner qu'un seul objet, je veux sélectionner plusieurs qui se trouvent dans des calques différents.

 

En fait il suffit de ne pas le supprimer. Commente ( ou supprime la ligne :

 

ça marche pas, le contour n'est tjs pas sélectionné ;) . je crois qu'il y a quelque chose du coté de SelByObj.

 

 

[Edité le 15/11/2008 par marionsname]

Lien vers le commentaire
Partager sur d’autres sites

ça marche pas, le contour n'est tjs pas sélectionné . je crois qu'il y a quelque chose du coté de SelByObj

Ça n'a rien à voir avec SelByObj, avec ssoc "standard" il faut retirer le cadre du jeu de sélection pour qu'il ne soit pas sélectionné d'où le (ssdel ...).

Si on supprime cette ligne, il sera sélectionné, donc dé sélectionné avec inv_sel.

À ceci près qu'avec le filtre de calque, il n'est plus forcément sélectionné avant l'inversion de la sélection, il faut donc l'ajouter au jeu de sélection au cas où il n'y soit pas pour qu'il ne soit jamais sélectionné après l'inversion.

 

Si j'ai bien compris la demande :

 

(defun c:inv_ssocl (/ fr elst typ ss n ent fltr)
 (and
   (or
     (and
(princ
  "\nSélectionner les objets sur les calques à filtrer."
)
(setq ss (ssget))
(setq fltr "")
(repeat	(setq n (sslength ss))
  (setq	ent  (ssname ss (setq n (1- n)))
	fltr (strcat fltr (cdr (assoc 8 (entget ent))) ",")
  )
)
(setq fltr (list (cons 8 fltr)))
     )
     (not (setq fltr nil))
   )
   (sssetfirst nil nil)
   (setq
     fr (car (entsel "\nSélectionnez un objet pour la capture: "))
   )
   (setq elst (entget fr))
   (setq typ (cdr (assoc 0 elst)))
   (or
     (= typ "CIRCLE")
     (and
(= typ "ELLIPSE")
(= (cdr (assoc 41 elst)) 0.0)
(= (cdr (assoc 42 elst)) (* 2 pi))
     )
     (and
(= typ "LWPOLYLINE")
(= 1 (logand 1 (cdr (assoc 70 elst))))
     )
   )
   (setq ss (SelByObj fr "Cp" fltr))
   (ssadd fr ss)
   (sssetfirst nil ss)
   (c:inv_sel)
 )
 (princ)
) 

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

Lien vers le commentaire
Partager sur d’autres sites

Bonjour gile,

et merci pour ce code

 

Si j'ai bien compris la demande :

 

Pas tout à fait ça, je me suis pas bien expliqué.

Ma demande est de sélectionner les objets d'un calque (ou des calques) donné qui sont entièrement à l'extérieur du contour, soit en choisissant les objets à filtrer soit en tapant les noms des calques (calque1, calque2...).

 

 Sélectionner les objets sur les calques à filtrer.

 

Je choisis un cercle bleu et un autre rouge

 

 Sélectionnez un objet pour la capture:

Je choisis le rectangle

 

et voilà le résultat que je veux avoir

 

http://www.cijoint.fr/cjlink.php?file=cj200811/cij9bQ6cDk.jpg

 

J'espère que vous voyer l'image, moi je ne la vois pas

Merci

 

[Edité le 16/11/2008 par marionsname]

Lien vers le commentaire
Partager sur d’autres sites

Merci lili2006,

Je ne vois pas pourquoi cette image ne s'affiche pas, j'ai verifié du coté du registre, paramètres de confidentialité, autoriser les cookies, et même rajouter le site ci-joint pour tjs accepter les cookies de ce site, et tjs rien.

Est-ce un problème au niveau du site cadxp ou à mon niveau, les images jpeg je les vois bien sur tous les sites, y compris celui de ci-joint.

 

Ça n'a rien à voir avec SelByObj, avec ssoc "standard" il faut retirer le cadre du jeu de sélection pour qu'il ne soit pas sélectionné d'où le (ssdel ...).

Si on supprime cette ligne, il sera sélectionné, donc dé sélectionné avec inv_sel.

 

tjs le contour n'est pas sélectionné :casstet: .

 

voilà je l'ai commenté

 

 (defun c:ssoclf (/ ent fr elst typ ss)
(and
(sssetfirst nil nil)
(setq fr (car (entsel "\nSélectionnez un objet pour la capture: ")))
(setq elst (entget fr))
(setq typ (cdr (assoc 0 elst)))
(or
(= typ "CIRCLE")
(and
(= typ "ELLIPSE")
(= (cdr (assoc 41 elst)) 0.0)
(= (cdr (assoc 42 elst)) (* 2 pi))
)
(and
(= typ "LWPOLYLINE")
(= 1 (logand 1 (cdr (assoc 70 elst))))
)
)
(setq ss (SelByObj fr "Cp" (list (cons 8 "Calque1,Calque3"))))
;;;(or (ssdel fr ss) T)
(sssetfirst nil ss)
)
(princ)
) 

 

hmmm :question:

 

[Edité le 16/11/2008 par marionsname]

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

C'est donc un peu plus subtil qu'une simple inversion.

 

(defun c:inv_ssocl (/ fr elst typ ss n ent fltr ss1 ss2)
 (and
   (sssetfirst nil nil)
   (or
     (and
(princ
  "\nSélectionner les objets sur les calques à filtrer."
)
(setq ss (ssget))
(setq fltr "")
(repeat	(setq n (sslength ss))
  (setq	ent  (ssname ss (setq n (1- n)))
	fltr (strcat fltr (cdr (assoc 8 (entget ent))) ",")
  )
)
(setq fltr (cons 8 fltr))
     )
     (not (setq fltr nil))
   )
   (sssetfirst nil nil)
   (setq
     fr (car (entsel "\nSélectionnez un objet pour la capture: "))
   )
   (setq elst (entget fr))
   (setq typ (cdr (assoc 0 elst)))
   (or
     (= typ "CIRCLE")
     (and
(= typ "ELLIPSE")
(= (cdr (assoc 41 elst)) 0.0)
(= (cdr (assoc 42 elst)) (* 2 pi))
     )
     (and
(= typ "LWPOLYLINE")
(= 1 (logand 1 (cdr (assoc 70 elst))))
     )
   )
   (setq ss1 (SelByObj fr "Cp" nil))
   (ssadd fr ss1)
   (setq
     ss2 (ssget
    "_X"
    (list '(0 . "~VIEWPORT") (cons 410 (getvar "CTAB")) fltr)
  )
   )
   (repeat (setq n (sslength ss1))
     (ssdel (ssname ss1 (setq n (1- n))) ss2)
     T
   )
   (not (sssetfirst))
   (sssetfirst nil ss2)
 )
 (princ)
) 

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

Lien vers le commentaire
Partager sur d’autres sites

voilà, c'est ça :)

que dire gile t'es joilment sympa.

une dernière chose : si je veux avoir le choix entre taper les noms des calques et sélectionner les objets?

Sinon si je veux intérger les calques à filter directement dans le lsip à quel niveau je dois intervenir.

ici

 (setq fltr (cons 8 fltr))

Une dernière chose et j'ai fini avec ça, si je ne veux appliquer inv_ssocl que sur un jeux de sélection au lieu de l'appliquer à tous les objets du dessin?

d'avoir ça

Capture

Merci

 

[Edité le 16/11/2008 par marionsname]

Lien vers le commentaire
Partager sur d’autres sites

J'espère ne pas avoir supprimer de ligne importante, ça marche, mais ta vérification gile est nécessaire. Tjs en attente de la solution du jeu de sélection

 

 (defun c:inv_ssocl (/ fr elst typ ss n ent fltr ss1 ss2)
   (sssetfirst nil nil)
   (setq fltr (cons 8 "Calque1,Calque2"))
   (sssetfirst nil nil)
   (setq
     fr (car (entsel "\nSélectionnez un objet pour la capture: "))
   )
   (setq elst (entget fr))
   (setq typ (cdr (assoc 0 elst)))
   (or
     (= typ "CIRCLE")
     (and
(= typ "ELLIPSE")
(= (cdr (assoc 41 elst)) 0.0)
(= (cdr (assoc 42 elst)) (* 2 pi))
     )
     (and
(= typ "LWPOLYLINE")
(= 1 (logand 1 (cdr (assoc 70 elst))))
     )
   )
   (setq ss1 (SelByObj fr "Cp" nil))
   (ssadd fr ss1)
   (setq
     ss2 (ssget
    "_X"
    (list '(0 . "~VIEWPORT") (cons 410 (getvar "CTAB")) fltr)
  )
   )
   (repeat (setq n (sslength ss1))
     (ssdel (ssname ss1 (setq n (1- n))) ss2)
     T
   )
   (not (sssetfirst))
   (sssetfirst nil ss2)
 (princ)
)

 

Je ne sais pas faire pour répondre à ça

 

si je veux avoir le choix entre taper les noms des calques et sélectionner les objets?

ni à ça

si je ne veux appliquer inv_ssocl que sur un jeux de sélection au lieu de l'appliquer à tous les objets du dessin?

 

Merci

 

[Edité le 16/11/2008 par marionsname]

Lien vers le commentaire
Partager sur d’autres sites

Re,

 

Ta demande est vraiment tordue, pour preuve, tu as du mal à l'exprimer.

Elle est aussi très particulière et va à l'inverse de la philosophie des routines de spécial_sélections qui se veulent simples dans leur conception et leur utilisation.

Je ne suis pas sûr que le temps qu'elle te fera gagner par rapport à l'utilisation de commandes natives (FILTER ou SELECTRAP) et de la touche MAJ enfoncée (pour supprimer des objets de la sélection) soit beaucoup plus important que le temps que j'ai passé à l'écrire.

 

J'ai commencé, alors je vais essayer de finir, mais je ne pense pas recommencer

 

(defun c:inv_ssocl (/ fr elst typ ss n ent fstr fstr fltr ss1 ss2)
 (and
   (or (setq ss2 (cadr (ssgetfirst)))
(setq ss2 (ssget "_X" (list '(0 . "~VIEWPORT") (cons 410 (getvar "CTAB")))))
)
   (sssetfirst nil nil)
   (or
     (and
(setq fstr
       (getstring
	 "\nEntrez les noms de calques (séparés par des virgules) ou : "
       )
)
(/= "" fstr)
(setq flst (str2lst fstr ","))
     )
     (and
(princ
  "\nSélectionner les objets sur les calques à filtrer."
)
(setq ss (ssget))
(repeat	(setq n (sslength ss))
  (setq	ent  (ssname ss (setq n (1- n)))
	flst (cons (cdr (assoc 8 (entget ent))) flst)
  )
)
     )
   )
   (sssetfirst nil nil)
   (setq
     fr (car (entsel "\nSélectionnez un objet pour la capture: "))
   )
   (setq elst (entget fr))
   (setq typ (cdr (assoc 0 elst)))
   (or
     (= typ "CIRCLE")
     (and
(= typ "ELLIPSE")
(= (cdr (assoc 41 elst)) 0.0)
(= (cdr (assoc 42 elst)) (* 2 pi))
     )
     (and
(= typ "LWPOLYLINE")
(= 1 (logand 1 (cdr (assoc 70 elst))))
     )
   )
   (setq ss1 (SelByObj fr "Cp" nil))
   (ssadd fr ss1)
   (setq n 0)
   (or
     (not flst)
     (while (setq ent (ssname ss2 n))
(if (member (cdr (assoc 8 (entget ent))) flst)
  (setq n (1+ n))
  (ssdel ent ss2)
)
     )
     T
   )
   (repeat (setq n (sslength ss1))
     (ssdel (ssname ss1 (setq n (1- n))) ss2)
     T
   )
   (sssetfirst nil ss2)
 )
 (princ)
) 

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

Lien vers le commentaire
Partager sur d’autres sites

Elle est aussi très particulière et va à l'inverse de la philosophie des routines

 

J'ai essayé de lui faire comprendre que sa demande était très spécifique dans un autre sujet.

Mais il est resté persuadé que sa demande pourrait servir à d'autre... :casstet:

 

Il a le mérite d'être têtu et d'essayer de résoudre son problème en mettant les mains dans le cambouis, mais il est vite bloqué et relance facilement... :exclam:

 

J'ai commencé, alors je vais essayer de finir, mais je ne pense pas recommencer

 

Oh comme je te comprends... ;)

 

Pour résumer son problème... La décomposition des hachures créé par les Superhachures des express lui pose problème.

 

Ceux qui utilise ce mode hachurage ne cherchent pas forcément à les exploser :casstet:

 

Pour exporter dans corel draw utiliser le modèle de hachures que je lui ai proposé à mon avis aurait suffit (il faut vraiment zoomer très fort pour voir les défaut si snapbase est bien défini pour v2000) car à l'impression rien ne se serait vu.

 

Il préfère une solution complexe .... :P

 

[Edité le 16/11/2008 par bonuscad]

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Lien vers le commentaire
Partager sur d’autres sites

marionsname

 

Je reviens à ton problème de départ, si c'est bien celui-ci que tu essayes de résoudre.

 

Est ce que ce mode opératoire ne serait pas mieux?

 

Tu ne décompose pas tes superhachures

Tu crée un traceur DXB

Tu fais une sortie (sur fichier) de ton dessin contenant tes super hachures.

Tu ouvre un nouveau dessin et tu importe ta sortie avec la commande "_DXBIN"

 

Tu auras ton dessin avec tes hachures décomposées ET parfaitement ajustées

 

Le seul inconvénient et que tout se retrouve sur un calque unique, mais pour faire un export vers un autre logiciel cela n'est pas être pas gênant.

 

L'avantage ! Ton fichier DWG original conserve les superhachures intacte.

 

Désolé, si çà convient, de ne pas y avoir songé plus tôt

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Lien vers le commentaire
Partager sur d’autres sites

J'ai commencé, alors je vais essayer de finir, mais je ne pense pas recommencer

 

Ok, merci beaucoup gile :) . Je crois que j'ai pas le choix là, je vais devoir arrêter et me contenter de ça ici. En tous cas j'ai appris pas mal de choses ces derniers jours.

 

J'ai essayé de lui faire comprendre que sa demande était très spécifique dans un autre sujet.

Mais il est resté persuadé que sa demande pourrait servir à d'autre...

 

Le problème n'est pas essentiellement là. En parcourant ce forum, oh! combien de demandes spécifiques.

 

Il a le mérite d'être têtu et d'essayer de résoudre son problème en mettant les mains dans le cambouis, mais il est vite bloqué et relance facilement...

 

mettre la main dans la patte pour apprendre n'a jamais été reprochable , encore moins avoir des lacunes en cours de route :casstet: . J'aurais plutot parler à la troisième personne dans un message privé :cool: .

 

Il préfère une solution complexe ....

 

c'est un point de vue

 

Tu ne décompose pas tes superhachures

Tu crée un traceur DXB

Tu fais une sortie (sur fichier) de ton dessin contenant tes super hachures.

Tu ouvre un nouveau dessin et tu importe ta sortie avec la commande "_DXBIN"

Tu auras ton dessin avec tes hachures décomposées ET parfaitement ajustées

 

Merci beaucoup Bonuscad, t'a été très sympat, je vais tester ça plutard.

 

Toutes mes excuses, sincèrement toutes mes excuses à toi et à gile.

 

A bientot

 

[Edité le 16/11/2008 par marionsname]

Lien vers le commentaire
Partager sur d’autres sites

Le problème n'est pas essentiellement là. En parcourant ce forum, oh! combien de demandes spécifiques.

 

Je reconnais que tu n'as pas tort...

 

mettre la main dans la patte pour apprendre n'a jamais été reprochable

Tout à fait et je t'en félicite.

 

encore moins avoir des lacunes en cours de route

Disons que tu t'es engagé dans une voie assez complexe qui nécessite de pas avoir trop de lacunes pour pouvoir avancer.

 

j'aurais plutot parler à la troisième personne dans un message privé

Tu as peut être raison, je ne voulais pas te froisser , excuse moi !

 

Des fois je manque un peu de tact :(

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

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é