ASTERIXII Posté(e) le 23 juin 2012 Posté(e) le 23 juin 2012 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 ?
ASTERIXII Posté(e) le 23 juin 2012 Auteur Posté(e) le 23 juin 2012 Bon j'ai fait ca: Si qq'un à une autre idéeEt 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
bryce Posté(e) le 24 juin 2012 Posté(e) le 24 juin 2012 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. Brice, formateur AutoCAD - Inventor - SolidWorks - ZWCad - DraftSight - SketchUp indépendant
Messages recommandés
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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant