Drizzt Posté(e) le 13 octobre 2004 Posté(e) le 13 octobre 2004 Bonjour,J'ai régulièrement des fichiers avec des spline en 3d et je voudrai les passer en 2d.Je vais donc dans les entités pour récupérer les coordonnées (10 . X Y Z), seulement voila avec ma manière je n'obtiens que la dernière coordonnée.POUQUOI ET COMMENT FAIRE ??? Ma manip :(setq a (ssget))(setq no (ssname a i))(setq b (entget no))(setq c (assoc 10 b)) liste d'info recup dans b (exemple):((-1 . ) (0 . "SPLINE") (330 . 4005dcf8>) (5 . "76") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . "AcDbSpline") (210 0.281384 -0.467558 0.837981) (70 . 8) (71 . 3) (72 . 12) (73 . 8) (74 . 6) (42 . 1.0e-010) (43 . 1.0e-010) (44 . 1.0e-010) (40 . 0.0) (40 . 0.0) (40 . 0.0) (40 . 0.0) (40 . 51.2835) (40 . 114.295) (40 . 181.235) (40 . 257.663) (40 . 310.473) (40 . 310.473) (40 . 310.473) (40 . 310.473) (10 133.585 267.114 104.182) (10 148.551 276.601 104.45) (10 181.905 297.746 105.048) (10 241.622 288.276 79.7121) (10 294.103 255.52 43.8133) (10 281.481 171.681 1.27307) (10 234.951 172.42 17.3093) (10 215.938 172.721 23.862) (11 133.585 267.114 104.182) (11 179.35 290.117 101.65) (11 238.03 285.228 79.2179) (11 281.731 248.629 44.123) (11 266.597 181.161 11.5607) (11 215.938 172.721 23.862)) et liste d'info dans c :(10 133.585 267.114 104.182) Merci d'avance !!!
Tramber Posté(e) le 13 octobre 2004 Posté(e) le 13 octobre 2004 (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 10)) (entgetno))) Essaies-voir avec (vl-load-com) avant si tu es sous 2000. Je regarde de mon côté, c'est la manière la plus fumeuse d'extraire tous les codes 10, présentés par notre webmaster préféré. [édité]Avec 0 à la place de i, ca marche chez moi. [Edité le 13/10/2004 par Tramber] Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
Drizzt Posté(e) le 13 octobre 2004 Auteur Posté(e) le 13 octobre 2004 WAHOUUUU !!! Super ca fonctionne !!!!j'ai pas compris toutes la manip mais ca fonctionne MERCI TRAMBER :D Je suis sous 2000 oui, mais que fait (vl-load-com) et (vl-remove-if-not ...) car je n''ai pas de doc sur ces commandes ??? (Pour mapcar et lambda j'ai, donc je vais essayer de comprendre)
bonuscad Posté(e) le 13 octobre 2004 Posté(e) le 13 octobre 2004 He oui, bien pratique cette fonction d'extraction des sommets (Merci à Serge Camiré) Cequi pourrait donner comme fonction pour ton cas: (defun c:spl3Dto2D ( / old_osmd e l_som 2d_lsom) (setq old_osmd (getvar "osmode")) (setvar "osmode" 0) (setq l_som (mapcar '(lambda (x) (trans x e 0)) (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 10)) (entget (setq e (car (entsel "\nChoix de la spline 3D")))))))) (setq 2d_lsom (mapcar '(lambda (x) (trans (list (car x) (cadr x) 0.0) 0 1)) l_som)) (command "_.pline" (foreach n 2d_lsom (command n)) ) (command "_.pedit" (entlast) "_spline" "") (initget "Non Oui") (if (eq (getkword "\nEffacer la spline3 ") "Non") (princ "\nBien Chef, on conserve") (entdel e) ) (setvar "osmode" old_osmd) (prin1) ) Pour débuter en lisp tu n'as pas choisi le plus simple ;) Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
Drizzt Posté(e) le 13 octobre 2004 Auteur Posté(e) le 13 octobre 2004 Merci pour le fichier Bonuscad ca fonctionne très bien, mais c'est pour une spline à la fois or moi c'est plusieur d'un coup (là j'ai un fichier de 445 spline en 3d) tu vois le coup ?Mais sinon c'est super !!! Et comme tu dis je n'ai pas choisi le plus simple mais je fais avec mes prob les plus urgenntttttt !!! Mais je persisite ....
bonuscad Posté(e) le 14 octobre 2004 Posté(e) le 14 octobre 2004 La pour débuter c'est plus à ta portée... Flatten des Express Tools n'aurait-il pas fait l'affaire? Voilà quand même pour l'exemple ce que tu veux executer. (defun c:spl3Dto2D ( / flag_erase old_osmd e l_dxf l_som 2d_lsom ) (setvar "cmdecho" 0) (initget "Général Courant _Wolrd Current") (if (eq (getkword "\nProjection 2D dans SCU [Général/Courant]: ") "Wolrd") (command "_.ucs" "_world") ) (initget "Oui Non _Yes No") (if (eq (getkword "\nEffacer la spline3 [Oui/Non] ") "No") (progn (princ "\nBien Chef, on conserve") (setq flag_erase T)) (setq flag_erase nil) ) (setq old_osmd (getvar "osmode")) (setq js (ssget "_X" '((0 . "SPLINE") (67 . 0) (410 . "Model")))) (cond (js (command "_.undo" "_begin") (setvar "osmode" 0) (repeat (setq n (sslength js)) (setq l_dxf (entget (setq e (ssname js (setq n (1- n)))))) (setq l_som (mapcar '(lambda (x) (trans x e 0)) (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 10)) l_dxf)))) (setq 2d_lsom (mapcar '(lambda (x) (trans (list (car x) (cadr x) 0.0) 0 1)) l_som)) (command "_.pline" (foreach n 2d_lsom (command n)) ) (command "_.pedit" (entlast) "_spline" "") (if (not flag_erase) (entdel e) ) ) (setvar "osmode" old_osmd) (command "_.undo" "_end") ) (T (princ "\nAucune Spline trouvée") ) ) (setvar "cmdecho" 1) (prin1) ) Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
Drizzt Posté(e) le 14 octobre 2004 Auteur Posté(e) le 14 octobre 2004 Super Bonuscad merci !!Ca fonctionne très bien. tu me tires une grosse épine du pied.Je dirai bien à charge de revanche mais je crois que je vais avoir du mal à assurer ...(pour le momnt du moins ;) héhéhé).
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