Aller au contenu

Messages recommandés

Posté(e)

Bonjour,

Voila mon cas : je voudrais reproduire (copier ou redessiner) des rectangles avec une zone de sélection, et en lisp afin d’éviter de sélectionner les objets un par un.

 

Cas n°1 : le rectangle à reproduire (sur un autre calque) et fait de ligne avec couleur et type de ligne du calque.

Attention, pour le cas 1 et 2 le rectangle peut avoir un angle différent de 0 avec le SCU.

 

Cas n°2 : le rectangle est délimité par 3 lignes avec couleur et type de ligne du calque, et une ligne forcée en couleur (9) et type de ligne forcée (Cache).

Les lignes à ne pas considérer sont en couleur forcées (9) , type de ligne forcée (Continuous) et une polyligne de couleur forcée (9) et type de ligne forcée (cache)

 

La grande difficulté et de faire « le tri » des lignes avec une seul sélection.

Alors possible ?

 

post-9715-0-83449200-1340456815_thumb.jpg

Posté(e)

Bon j'ai fait ca: Si qq'un à une autre idée

Et pourquoi ( = "9" ptcouleur) ne marche pas

 

(defun c:ss (/ cmdecho)

 

;selection des entités

 

(setq selection (ssget '((0 . "ARC,CIRCLE,line"))))

 

;nombre d'entitees dans la selection

 

(setq nb (sslength selection))

 

(setq nb1 0)

 

(while (< nb1 nb) ;boucle

 

(setq ptname (ssname selection nb1)) ;recuperation du nom

(setq ptcoord (cdr (assoc 10 (entget ptname)))) ;recuperation des coordonnées

(setq ptcalque (cdr (assoc 8 (entget ptname)))) ;recuperation du calque

(setq pttypeligne (cdr (assoc 6 (entget ptname)))) ;recuperation type de ligne

(setq ptrayon (cdr (assoc 40 (entget ptname)))) ;recuperation du rayon

(setq ptcouleur (cdr (assoc 62 (entget ptname)))) ;recuperation du rayon

 

; cas des cercle

(if (or (= (cdr (assoc 0 (entget ptname))) "CIRCLE") (= (cdr (assoc 0 (entget ptname))) "ARC"))

(progn

(if (or ( = nil pttypeligne) ( = "Continuous" pttypeligne)) (command "_circle" ptcoord "_d" 30))

) ;fin progn

) ;fin if cercle

 

; cas des lignes

(if (= (cdr (assoc 0 (entget ptname))) "LINE")

(progn

(if ( = nil ptcouleur) (command "_line" (cdr (assoc 10 (entget ptname))) (cdr (assoc 11 (entget ptname))) ""))

(if ( = "CACHE" pttypeligne) (command "_line" (cdr (assoc 10 (entget ptname))) (cdr (assoc 11 (entget ptname))) ""))

) ;fin progn

) ;fin if ligne

 

(setq nb1 (+ nb1 1))

 

); fin while

); fin defun

Posté(e)

Bonjour,

 

Tu peux filtrer un peu mieux la sélection des lignes, par exemple :

 

(ssget '( (0 . "LINE") (-4 . "<OR") (-4 . "<AND")(62 . 9) (6 . "CACHE")(-4 . "AND>") (-4 . "<AND")(62 . 256)(6 . "BYLAYER")(-4 . "AND>") (-4 . "OR>") ) )

 

sélectionnera uniquement des lignes qui sont soit en couleur 9 et tdl CACHE, soit en couleur et tdl DuCalque.

 

 

( = "9" ptcouleur)

renvoie toujours nil car la couleur est un numéro, et non une chaîne de caractères.

Il faut faire

( = 9 ptcouleur)

 

 

Dans ta boucle while, tu fais une 10aine de fois un entget sur le même objet.

Je pense que tu devrais créer une variable pour stocker cette liste

(setq ptlist (entget ptname))

et remplacer tous les (entget ptname) par cette variable ptlist.

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é