Aller au contenu

Classement

Contenu populaire

Affichage du contenu avec la meilleure réputation le 10/02/2024 dans toutes les zones

  1. On peut améliorer la sélection des objets "non traités" en utilisant les xdata plutôt que les ldata parce qu'on peut les utiliser pour filtrer une sélection (voir ce sujet). Dans ce cas, la fonction 'dejaRaccourcie' n'est plus utile. (defun marquerRaccourcie (ligne) (if (null (tblobjname "APPID" "DecoupPli")) (regapp "DecoupPli") ) (entmod (append (entget ligne) '((-3 ("DecoupPli" (1070 . 1)))))) ) (defun c:test (/ s i l) (if (setq s (ssget '((0 . "LINE") (62 . 1) (-4 . "<NOT") (-3 ("DecoupPli")) (-4 . "NOT>") ) ) ) (repeat (setq i (sslength s)) (setq l (ssname s (setq i (1- i)))) (raccourcirLigne l 3.) (marquerRaccourcie l) ) ) (princ) )
    1 point
  2. Un peu de méthodologie. Quand on effectue une tâche "complexe", il est d'usage de la décomposer en plusieurs tâches plus simples testables séparément. Ici, la "complexité" de la tâche est de modifier la longueur de plusieurs lignes à condition que ce là n'ait pas été déjà fait. On peut donc décomposer en plusieurs tâches : sélectionner des lignes tester si une ligne a déjà été raccourcie raccourcir une ligne marquer la ligne comme "déjà raccourcie" Les tâches 2, 3 et 4 peuvent être définies dans des fonctions séparées testables indépendamment. Pour que la tâche 4 fonctionne correctement après la tâche 3, il faut que la ligne passée en argument à la tâche 3 soit juste modifiée, pas remplacée par une autre entité. 2. (defun dejaRaccourcie (ligne) (= (vlax-ldata-get ligne "DecoupPli") 1) ) 3. (defun raccourcirLigne (ligne longCoupe / ptA ptB long ang) (setq ptA (getpropertyvalue ligne "StartPoint") ptB (getpropertyvalue ligne "EndPoint") ang (angle ptA ptB) ) (if (<= (distance ptA ptB) (* 2 longCoupe)) (entmod (subst '(62 . 7) '(62 . 1) (entget ligne))) (progn (setq ptC (polar ptA ang longCoupe) ptD (polar ptB ang (- longCoupe)) ) (setpropertyvalue ligne "StartPoint" ptC) (setpropertyvalue ligne "EndPoint" ptD) (entmake (list '(0 . "LINE") (cons 10 ptA) (cons 11 ptC) '(62 . 7)) ) (entmake (list '(0 . "LINE") (cons 10 ptB) (cons 11 ptD) '(62 . 7)) ) ) ) ) 4. (defun marquerRaccourcie (ligne) (vlax-ldata-put ligne "DecoupPli" 1) ) Chacune de ces fonctions peut être testée séparément dans AutoCAD avec les expressions suivantes : (dejaRaccourcie (car (entsel))) (raccourcirLigne (car (entsel)) 3.) (marquerRaccourcie (car (entsel))) Une fois qu'on est satisfait du fonctionnement de ces fonctions, on peut les intégrer dans le traitement d'un jeu de sélection. (defun c:test (/ s i l) (if (setq s (ssget '((0 . "LINE") (62 . 1)))) (repeat (setq i (sslength s)) (setq l (ssname s (setq i (1- i)))) (if (not (dejaRaccourcie l)) (progn (raccourcirLigne l 3.) (marquerRaccourcie l) ) ) ) ) (princ) )
    1 point
×
×
  • 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é