Aller au contenu

Sélection à l\'extérieur d\'une polyligne


Messages recommandés

Posté(e)

Bonjour à tous, et joyeux noel, et bonnes fêtes.

 

Est-il possible de sélectionner (parmi un ensemble d'objets) les objets qui se trouvent à l'extérieur d'une polyligne (entièrement à l'exterieur) en sélectionnat cette polyligne.

 

Merci

Posté(e)

bonsoir,

je ne connais pas ton niveau en Lisp,

donc je vais te donner le mode opératoire,

à toi de l'écrire,

si tu n'y arrives pas, reviens me voir, ou nous voir

on te guidera.

donc, en l'occurence,

il va falloir faire un jeu de sélection

avec choix de polyligne

et inverser la sélection ensuite.

(ssget "_WP" p1 p2 p3 etc...)

 

amicalement

 

Éternel débutant…
Mon site perso : Programmer dans AutoCAD

 

Posté(e)

Miamar,

 

Voici la réponse donnée à Badis sur le forum d'Autodesk (coïncidence : est-ce que tu es Badis?)

 

Voici un exemple. L'idée est d'utiliser une fonction qui retourne les sommets. Après on peut utiliser le mode _WP (Window Polygon) ou _CP (Crossing Polygon) et l'option Remove

 

(defun c:test ( / ename)

(setq ename (car (entsel "\nMontrez une polyligne: ")))

(command "_erase" "_all" "_remove" (ssget "_cp" (getVertices ename)) "")

(princ)

)

 

(defun getVertices (

ename

/ plineGet return vertex vertexGet

)

(setq return nil)

(cond

((or (/= (type ename) 'ENAME) (not (setq plineGet (entget ename)))) (setq return nil))

((= "POLYLINE" (cdr (assoc 0 plineGet)))

(setq vertex (entnext ename))

(while (= "VERTEX" (cdr (assoc 0 (setq vertexGet (entget vertex)))))

(setq return (cons (cdr (assoc 10 vertexGet)) return))

(setq vertex (entnext vertex))

)

(setq return (reverse return))

)

((= "LWPOLYLINE" (cdr (assoc 0 plineGet)))

(setq return (mapcar 'cdr (vl-remove-if '(lambda (x) (/= (car x) 10)) plineGet)))

)

(t (setq return nil))

)

return

)

 

Serge

Posté(e)

Bonjour,

 

Non je ne suis pas badis.

J'ai consulté le forum d'autodesk, le problème est quelque peu différents par rapport au mien mais il y a quelques similitudes.

 

Merci beaucoup pour vos réponses, je vais tester et te dirai si j'ai d'autres problèmes.

Merci infiniment à tout le monde

 

@+

Posté(e)

Bonjour Serge,

 

Ta routine marche impécablement seulement elle me supprime tous les objets qui se trouve à l'extérieur de la polyligne, moi je voudrais pouvoir l'appliquer seulement sur une sélection d'objets (cf mon premier message). Deuxième chose je l'ai appliqué sur une polyligne qui contient un arc, elle génère une erreur, elle n'est pas faite pour les courbes c'est bien ça? est-ce que pour les polylignes courbes c'est plus complexes?

 

Merci infiniment.

Posté(e)

Au fait, ce que je veux ce n'est pas spécialement supprimer (mais d'abord sélectionner, ensuite appliquer toute sorte de commande), mais là c'est pas grave il suffit juste de changer la commande _erase par la commande que je veux.

 

Bonne année 2005 pour tous, pleine de bonheur et santé.

Posté(e)

bonjour,

il faut faire attention au fait que le mode de sélection _ALL

prend en compte TOUTES les entités du fichier,

même celles qui sont dans calques inactifs, voire gelés

il va falloir mettre un filtre sur l'état du calque si tu veux les exclure.

amicalement

 

 

[Edité le 1/1/2005 par didier]

Éternel débutant…
Mon site perso : Programmer dans AutoCAD

 

  • 1 mois après...
Posté(e)

salut

un jour j'ai trouve cette routine sur le net et qui marche mais je n el'ai pas analisée

 

(defun C:REV (/ olderr cmde blip ltsc cclr snap pwid pgenen1 nam ent p obj ltp

clr lts wid flgs first final next spl cur vert a clos zoomit clyr lyr)

(setq olderr *error*)

(defun *error* (x)

(setvar "cmdecho" cmde)

(setvar "blipmode" blip)

(setvar "osmode" snap)

(setvar "celtscale" ltsc)

(setvar "cecolor" cclr)

(setvar "plinewid" pwid)

(setvar "plinegen" pgen)

(setq *error* olderr)

(princ)

) ;; end of *error* function

(setq cmde (getvar "cmdecho")

blip (getvar "blipmode")

ltsc (getvar "celtscale")

cclr (getvar "cecolor")

snap (getvar "osmode")

pwid (getvar "plinewid")

clyr (getvar "clayer")

pgen (getvar "plinegen"))

(setvar "cmdecho" 0)

(setvar "blipmode" 0)

(setvar "osmode" 0)

(setvar "plinewid" 0)

(setvar "plinegen" 1)

(command "_.undo" "_be")

(while (null (setq en1 (entsel "\nPick an object to reverse: "))))

(setq nam (car en1)

ent (entget nam)

p (cadr en1)

obj (cdr (assoc 0 ent)))

(cond

((= obj "CIRCLE")

(setq ctr (cdr (assoc 10 ent))

dia (* 2.0 (cdr (assoc 40 ent)))

a (angle p ctr))

(command "_.break" p (polar p (/ pi 4) 0.001)

"_.pedit" p "_y" "_c" "_x")

(carc))

((= obj "ARC")

(command "_.break" p "@"

"_.pedit" p "_y" "_j" nam (entlast) "" "_x")

(carc))

(T nil))

(setq ltp (cdr (assoc 6 ent))

lyr (cdr (assoc 8 ent))

clr (cdr (assoc 62 ent))

lts (cdr (assoc 48 ent))

wid (cdr (assoc 40 ent))

flgs (cdr (assoc 70 ent)))

(if (not ltp)(setq ltp "bylayer"))

(cond

((= obj "LINE")

(setq first (assoc 10 ent)

final (assoc 11 ent)

ent (subst (cons 10 (cdr final)) first ent)

ent (subst (cons 11 (cdr first)) final ent))

(entmod ent))

((= obj "LWPOLYLINE")

(setq final (cdr (assoc 10 (setq ent (reverse ent))))

next (cdr (assoc 10 (cdr (member (assoc 10 ent) ent)))))

(prev))

((= obj "POLYLINE")

(setq spl (= (logand flgs 4) 4)

cur (= (logand flgs 2) 2)

vert (entnext nam))

(if cur

(command "_.pedit" p "_s" ""))

(while (= (cdr (assoc 0 (entget (setq vert (entnext vert))))) "VERTEX")

(setq next final

final (cdr (assoc 10 (entget vert)))))

(prev))

(T (alert "Not a REVersible object.")))

(command "_.undo" "_e")

(setvar "cmdecho" cmde)

(setvar "blipmode" blip)

(setvar "osmode" snap)

(setvar "celtscale" ltsc)

(setvar "cecolor" cclr)

(setvar "plinewid" pwid)

(setvar "plinegen" pgen)

(setvar "clayer" clyr)

(setq *error* olderr)

(princ)

)

(defun carc ()

(setq ent (entget (entlast))

nam (cdr (assoc -1 ent))

obj (cdr (assoc 0 ent)))

)

(defun prev ()

(setq a (angle next final)

clos (= (logand flgs 1) 1))

(if clos (command "_.pedit" nam "_o" ""))

(setq zoomit (null (ssget "c" final final)))

(if zoomit (command "_.zoom" "_c" final ""))

(if clr (command "_.color" clr))

(if lts (setvar "celtscale" lts))

(setvar "clayer" lyr)

; (setvar "celtype" ltp)

(command "_.pline" (polar final a 0.0001) final ""

"_.chprop" (entlast) "" "_lt" ltp ""

"_.pedit" (entlast) "_j" nam "" ""

"_.break" final (polar final a 0.001))

(if cur (command "_.pedit" (entlast) "_f" ""))

(if spl (command "_.pedit" (entlast) "_s" ""))

(if clos (command "_.pedit" (entlast) "_c" ""))

(if wid (command "_.pedit" (entlast) "_w" wid ""))

(if zoomit (command "_.zoom" "_p"))

)

(alert (strcat "REV.LSP © 1999-2001 Tee Square Graphics\n\n"

" Type REV to begin."))

(princ)

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é