LUDWIG Posté(e) le 21 octobre 2008 Posté(e) le 21 octobre 2008 Bonjour, J'essaye de me créer un outils de cotation de masse. Je butte déjà sur la création d'une polyligne qui passera par le point d'insertion de chaque bloc sélectionné. Il est possible que je n'adopte pas la meilleure méthode. Voici celle que j'ai choisie :- balayage des blocs un par un, avec à chaque fois création d'un point supplémentaire de la polyligne- cotation rapide de cette polyligne (defun c:cotmas () (setq OSMOLD (getvar "Osmode")) (setvar "Osmode" 0) (princ "Sélectionnez les blocs à côter") (setq jeu (ssget '((0 . "INSERT")))) (if (< (sslength jeu ) 3)(progn (princ "Il faut sélectionner au moins 2 blocs\n") (exit))) (setq n 0) (repeat (sslength jeu) (setq bloc (entget (ssname jeu n))) (setq X (cdr (assoc 41 bloc))) (setq Y (cdr (assoc 42 bloc))) (setq Z (cdr (assoc 43 bloc))) ;si c'est la première entité : entmake polyligne sinon entmake vertex (if (eq n 0) (entmake '((0 . "POLYLINE")(67 . 0) (10 X Y Z) (40 . 0.0) (41 . 0.0)(210 0.0 0.0 1.0) (71 . 0) (72 . 0) (73 . 0) (74 . 0)(75 . 0))) ; INCORRECT (entmake '((0 . "VERTEX")(67 . 0) (10 X Y Z)))) ; INCORRECT (setq n (+ 1 n)) ; bloc suivant (entmake '((0 . "SEQEND")(67 . 0) (8 . "PL"))) ; ; INCORRECT séquence de fin de la polygne J'aurais pu passer par une méthode plus rigoureuse :- balayage des blocs sélectionnés et enregistrement des coordonnées dans une liste- création de la polyligne selon la liste. Si une âme charitable pouvait me guider (sans me faire le lisp). Autocad 2021 - Revit 2022 - Windows 10
Bruno_T Posté(e) le 22 octobre 2008 Posté(e) le 22 octobre 2008 bonjour LUDWIG,voici une version en tentant de simplement répondre à tes questions et à ce que tu as posté.Il reste encore des problèmes potentiels.Comme je ne sais pas ce qui détermine l'ordre de tes sommets, j'ai donc choisi de les trier suivant l'axe des x. (defun c:cotmas ( / osmodeSave ss n eList xyz lwpolyPts) ; sauvegarde osmode pour ne pas prendre le risque d'interférer avec le lisp (setq osmodeSave (getvar "osmode")) (setvar "osmode" 0) (setq ss (ssget '((0 . "INSERT")))) (setq n 0 lwpolyPts nil) (repeat (sslength ss) (setq eList (entget (ssname ss n))) ; les coordonnées du point d'insertion sont dans le code du groupe 10 (setq xyz (cdr (assoc 10 eList))) ; construction de la liste des sommets de la lwpolyligne (setq lwpolyPts (cons (list 10 (car xyz) (cadr xyz)) lwpolyPts)) (setq n (1+ n)) ) ; tri des sommets suivants les x, ou autre chose à déterminer... (setq lwpolyPts (vl-sort lwpolyPts '(lambda (x1 x2) (< (cadr x1) (cadr x2))))) ; création de la lwpolyligne, le code 90 contient le nombre de sommets (entmake (append (list '(0 . "LWPOLYLINE") '(100 . "AcDbEntity") '(100 . "AcDbPolyline") (cons 90 (length lwpolyPts))) lwpolyPts ) ) ; restauration du osmode (setvar "osmode" osmodeSave) (princ) ) Bruno Toniutti [Edité le 22/10/2008 par Bruno_T]
bonuscad Posté(e) le 22 octobre 2008 Posté(e) le 22 octobre 2008 Salut Ludwig, Il y avait ce sujet un peu similaire, mais lui s'appuyait sur des matricules (attribut du bloc) pour relier des insertions de bloc dans l'ordre des attributs.Cela ne répond pas à ta question précise mais pourrait t'aider à orienter ta démarche. Car le big problème (je trouves) est l'ordre des insertions des points qui ne correspondra pas forcément à l'ordre de montage des points de la polyligne. Dès lors comment la mettre en place?... Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
LUDWIG Posté(e) le 22 octobre 2008 Auteur Posté(e) le 22 octobre 2008 Merci les amis ! Bon ce n'était pas forcement utile de me faire le lisp, car je voulais tenter tout seul.Cependant ça m'arrange quand même car j'essayais de m'y remettre (j'ai arrêté en changeant de boulot il y a deux ans et demi) et c'est plutôt dur... Concernant l'ordre des point s de la polyligne : aucune importance. En effet, elle me sert à faire une "cotation rapide" et sera ensuite supprimée. J'ai testé, les cotes créées sont bonnes, même si la polyligne fait des boucles. Autocad 2021 - Revit 2022 - Windows 10
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