Pieroka Posté(e) le 31 mai 2007 Posté(e) le 31 mai 2007 J'ai reçu une carto un peu pourrite. La majorité des poly3D (voire toutes)qui la compose ont un pb d'altitude avec le sommet n°1. Pour ce sommet le z est exactement 10x plus petit que sur les suivants (z1=200, alors qu'il devrait être = à 2000 pour une courbe de niveau par exemple). Corriger manuellement serait long. Y a til un moyen rapide pour corriger ça ? Il faudrait faire "x10" sur la valeur z du sommet n°1 d'un jeu de sélection de poly3D. Je suis sûr que c'est simple et que je pourrais utiliser ce cas pour commencer à apprendre le lisp, mais là je manque de temps.. Merci d'avance pour votre aide ! Vue isométrique de la carto :http://img211.imageshack.us/img211/5145/cartoyh6.jpg Formateur Autocad - Revit - Sketchup - Photoshop
Bred Posté(e) le 31 mai 2007 Posté(e) le 31 mai 2007 Salut,(j'attends toujour ma Guiness moi...) test ça :(fait rapidement, peut-être simplifié) (defun c:x10 (/ COORDZ1 COORDZ1+ I LA LB LST LST-P LST-VLA-SEL LSTCOORD SEL) (setq sel (ssget '((0 . "POLYLINE")))) (foreach n (vl-remove-if 'listp (mapcar 'cadr (ssnamex sel))) (setq lst-vla-sel (append (list (vlax-ename->vla-object n)) lst-vla-sel)) ) (repeat (setq i (length lst-vla-sel)) (setq lstcoord (vlax-safearray->list (vlax-variant-value (vla-get-Coordinates (nth (setq i (1- i)) lst-vla-sel)))) coordz1 (nth 2 lstcoord) coordz1+ (* [surligneur]10 [/surligneur]coordz1) la (reverse (cdr (member coordz1 (reverse lstcoord)))) lb (cdr (member coordz1 lstcoord)) lst-p (append la (list coordz1+) lb) lst (vla-put-Coordinates (nth i lst-vla-sel) (vlax-make-variant (vlax-SafeArray-fill (vlax-make-SafeArray vlax-vbDouble (cons 0 (1- (length lst-p)))) lst-p))) ) ) (princ (strcat "\n" (rtos (length lst-vla-sel)) " Polyligne(s) traité(s)")) (princ) ) [Edité le 31/5/2007 par Bred] Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
Pieroka Posté(e) le 31 mai 2007 Auteur Posté(e) le 31 mai 2007 Nickel merci Fred !!Tu auras droit à une Guinness rien que pour ça ! :D :D :D Pour les 2 autres précédentes, les gars ont pas répondu, alors difficile de départager... Formateur Autocad - Revit - Sketchup - Photoshop
Bred Posté(e) le 31 mai 2007 Posté(e) le 31 mai 2007 Jai édité mon message précédent en surlignant le multiplicateur qui permet de x10 la valeur coordonnées z du point.modifie ce chiffre si tu rencontres le même problème mais avec une valeur différente... Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
Pieroka Posté(e) le 31 mai 2007 Auteur Posté(e) le 31 mai 2007 Merci. J'ai des objets-point Autocad (pas des blocs points topo) et je voudrais faire pareil, c'est à dire multiplier le Z du point par 10.... Formateur Autocad - Revit - Sketchup - Photoshop
bonuscad Posté(e) le 31 mai 2007 Posté(e) le 31 mai 2007 Le lisp est bien! Mais cette opération aurait pu ce faire manuellement en peu d'opération surtout dans ce cas précis. 1. Isoler le calque concerné, accrochobjet inactif2. Depuis le SCG se mettre en vue de face ou autre à 90° de la vue plane.3.Avec la commande "ETIRER" "Capture" sélectionner les sommets à Z=(z/100)point base manuel 0,0,0 deuxième point manuel 0,1000,0 (Y=Z dans scu courant)4. On retourne dans le SCG c'est fini. Cela à pris moins de temps que de programmer... :( OOPS, je viens de m'apercevoir que j'avais omis un fait essentiel, l'étirement est un facteur de 100 par rapport au Z actuel. Réponse nulle et mal avenue. Circuler y a rien à voir :P [Edité le 31/5/2007 par bonuscad] Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
Pieroka Posté(e) le 31 mai 2007 Auteur Posté(e) le 31 mai 2007 et non car le Z vrai est proportionnel au z faux : Za-faux=200 : je veux donc faire x10 >>> Za-vrai=2000 Zb-faux=185 : je veux donc faire x10 >>> Zb-vrai=1850 un étirement marche si la différence entre Zfaux et Zvrai est la même.Là on a différence pour Za = étirement de 1800 et pour Zb = étirement de 1850-185=1665L'étirement pour chaque bout de poly3D n'est pas égal. Formateur Autocad - Revit - Sketchup - Photoshop
Bred Posté(e) le 31 mai 2007 Posté(e) le 31 mai 2007 J'ai des objets-point Autocad (pas des blocs points topo) et je voudrais faire pareil, c'est à dire multiplier le Z du point par 10.... il faut juste changer ce qu'il y a en gras :(defun c:x10 (/ COORDZ1 COORDZ1+ I LA LB LST LST-P LST-VLA-SEL LSTCOORD SEL) (setq sel (ssget '((0 . "[b]POINT[/b]")))) (foreach n (vl-remove-if 'listp (mapcar 'cadr (ssnamex sel))) (setq lst-vla-sel (append (list (vlax-ename->vla-object n)) lst-vla-sel)) ) (repeat (setq i (length lst-vla-sel)) (setq lstcoord (vlax-safearray->list (vlax-variant-value (vla-get-Coordinates (nth (setq i (1- i)) lst-vla-sel)))) coordz1 (nth 2 lstcoord) coordz1+ (* 10 coordz1) la (reverse (cdr (member coordz1 (reverse lstcoord)))) lb (cdr (member coordz1 lstcoord)) lst-p (append la (list coordz1+) lb) lst (vla-put-Coordinates (nth i lst-vla-sel) (vlax-make-variant (vlax-SafeArray-fill (vlax-make-SafeArray vlax-vbDouble (cons 0 (1- (length lst-p)))) lst-p))) ) ) (princ (strcat "\n" (rtos (length lst-vla-sel)) " Polyligne(s) traité(s)")) (princ) ) Attention : pour ces 2 lisp, si les coordonnées Z = 0, ben 0 x 10 = 0 !!! [Edité le 31/5/2007 par Bred] Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
BIM G CO Posté(e) le 31 mai 2007 Posté(e) le 31 mai 2007 Merci Bred je n'arrivais plus à e souvenir pour faire rapidement la liste des entités suivant une sélection. En AutoLISP (setq sel (ssget "X" '((0 . "POINT"))) lst-vla-sel nil ) (foreach n (vl-remove-if 'listp (mapcar 'cadr (ssnamex sel))) (setq lst-vla-sel (append (list n) lst-vla-sel)) ) Pour ne plus à avoir à rechercher cette fichu routine je la colle à la suite :) Merci encore Bred. Dessinateur AutoCAD, Modeleur BIM, consultant informatique logiciels métier Lenovo ThinkStation P330 i9 9900K 32Gb RAM 512 SSD + 1To GstarCAD, Fisa-CAD, Revit, FisaBIM CVC, Microsoft Office PlaquetteDeplianteMars2024.pdf
Patrick_35 Posté(e) le 31 mai 2007 Posté(e) le 31 mai 2007 (foreach n (vl-remove-if 'listp (mapcar 'cadr (ssnamex sel)))(setq lst-vla-sel (append (list n) lst-vla-sel)) L'inconvénient, c'est que tu passes par 4 boucles mais c'est un style sympa ;)Perso, je préfere un activeselectionset @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
(gile) Posté(e) le 31 mai 2007 Posté(e) le 31 mai 2007 (setq sel (ssget "X" '((0 . "POINT")))lst-vla-sel nil)(foreach n (vl-remove-if 'listp (mapcar 'cadr (ssnamex sel)))(setq lst-vla-sel (append (list n) lst-vla-sel))) J'avais pas vu mais il y de la redondance là dedans. :P Avec un (ssget "_X"), la liste ssnamex ne contient pas de liste (pas de points de sélection), le vl-remoe-if 'listp est donc inutile. Et surtout le foreach pour constituer une liste de noms d'entités à partir d'une liste de noms d'entités ... :casstet: (setq sel (ssget "X" '((0 . "POINT")))) (setq lst-vla-sel (mapcar 'cadr (ssnamex sel))) C'est largement suffisant ;) [Edité le 31/5/2007 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
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