krunch Posté(e) le 22 décembre 2011 Posté(e) le 22 décembre 2011 Bonjour à tous Pour Noêl je propose la commande RE qui permet de recréer une entité identique (de même type et propriétés) à une autre : on sélectionne une entité et la commande lance la commande correspondante (au type) après réglage des variables système. Ca permet de "continuer" sur un même calque avec une entité identique. A l'usage elle est plutôt cool .. mais il y a un problème avec les commandes à fenêtre (comme _bhatch) : la fonction command les met en mode ligne de commande. Comment on lance une commande avec fenêtre ? Sinon (si jamais ça inspire quelqu'un ...)- avec ce système il manque sans doute beaucoup de variables- il faudrait une boite de dialogue pour gérer les propriétés (comme _matchprop) Sinon bonnes fêtes à tous, inspirés ou pas ! ; ** ; RE ; ** ; Fabriquer une entité de même type et propriétés qu'un entité de référence ; note : "RE" remplace le raccourci français pour RESEAU ; *keep* T/nil Garder propriétés / restituer courantes ; *env* liste des variables et valeur initiale (defun c:RE (/ ent get typ props var tmp) (vl-load-com) (print) ; Réacteurs de sortie de commande (defun Out (r c / u) (mapcar 'vlr-remove (vl-remove-if-not '(lambda(u) (= (vlr-data u) "RE")) (cdar (vlr-reactors :vlr-editor-reactor)))) ; Restitution variables système (setq u (assoc "DIMSTYLE" *env*)) (if u (progn (setq *env* (append (cdr (member u *env*)) (cdr (member u (reverse *env*))))) ; liste (en désordre) sans 1 élément (setq r (vla-get-ActiveDocument (vlax-get-acad-object))) (vlax-put r "ActiveDimStyle" (vla-item (vlax-get r "DimStyles") (cadr u))) )) (mapcar '(lambda(u) (setvar (car u) (cadr u))) *env*) ) ; Liste des variables (setq props '("CLAYER" "CECOLOR" "CELTYPE" "CELTSCALE" "CELWEIGHT" "CMATERIAL" "THICKNESS" "ELEVATION" "CMLJUST" "CMLSCALE" "CMLSTYLE" "TEXTSTYLE" "TEXTSIZE" "TSPACEFAC" "TSPACETYPE" "CMLEADERSTYLE" "DIMSTYLE" "PLINEWID")) (if (zerop (getvar "PSTYLEMODE")) (setq props (cons "CPLOTSTYLE" props))) ; style de tracé si mode stb ; Sélection (initget "C O N") ; (dans cet ordre ..) (while (not (listp (setq ent (entsel (strcat "Sélectionnez une entité de référence [> propriétés Courantes (" (if *keep* "O" "N") ")] : "))))) (setq *keep* (cond ((= ent "O") T) ((= ent "N") nil) ((= ent "C") (not *keep*)) )) (initget "C O N") ) (if ent (progn (setq ent (car ent) get (entget ent) typ (cdr (assoc 0 get)) *env* nil) (foreach var props (setq *env* (cons (list var (getvar var)) *env*)) (cond ; Propriétés générales ((= var "CLAYER") (setvar var (cdr (assoc 8 get)))) ((= var "CECOLOR") (setvar var (if (setq tmp (assoc 430 get)) (cdr tmp) (if (setq tmp (cdr (assoc 420 get))) (strcat "RGB:" (itoa (lsh (lsh tmp 8) -24)) "," (itoa (lsh (lsh tmp 16) -24)) "," (itoa (lsh (lsh tmp 24) -24))) (if (setq tmp (assoc 62 get)) (itoa (cdr tmp)) "ByLayer"))))) ((= var "CELTYPE") (setvar var (if (setq tmp (cdr (assoc 6 get))) tmp "ByLayer"))) ((= var "CELTSCALE") (setvar var (if (setq tmp (cdr (assoc 48 get))) tmp 1.0))) ((= var "CELWEIGHT") (setvar var (if (setq tmp (cdr (assoc 370 get))) tmp -1))) ((= var "CPLOTSTYLE") (setvar var (if (setq tmp (cdr (assoc 390 get))) (cdadr (member (cons 350 tmp) (reverse (entget (cdr (assoc 330 (entget tmp))))))) "ByLayer"))) ((= var "CMATERIAL") (setvar var (if (setq tmp (assoc 347 get)) (cdr (assoc 1 (entget (cdr tmp)))) "ByLayer"))) ; Propriétés spécifiques ((and (= var "THICKNESS") (member typ '("ARC" "ATTRIB" "ATTDEF" "CIRCLE" "LWPOLYLINE" "LINE" "POINT" "POLYLINE" "SHAPE" "SOLID" "TEXT" "TRACE"))) (setvar var (if (setq tmp (cdr (assoc 39 get))) tmp 0.0))) ((and (= var "ELEVATION") (= typ "LWPOLYLINE")) (setvar var (cdr (assoc 38 get)))) ((and (= var "ELEVATION") (= typ "SECTION")) (setvar var (cdr (assoc 40 get)))) ; vérifier ((and (= var "ELEVATION") (member typ '("POLYLINE" "HATCH"))) (setvar var (last(cdr (assoc 10 get))))) ((and (= var "CMLJUST") (= typ "MLINE")) (setvar var (cdr (assoc 70 get)))) ((and (= var "CMLSCALE") (= typ "MLINE")) (setvar var (cdr (assoc 40 get)))) ((and (= var "CMLSTYLE") (= typ "MLINE")) (setvar var (cdr (assoc 2 get)))) ((and (= var "PLINEWID") (= typ "LWPOLYLINE")) (setvar var (cdr (assoc 43 get)))) ((and (= var "TEXTSTYLE") (member typ '("MTEXT" "TEXT"))) (setvar var (if (setq tmp (assoc 7 get)) (cdr tmp) "Standard"))) ((and (= var "TEXTSIZE") (member typ '("MTEXT" "TEXT" "ATTDEF"))) (setvar var (cdr (assoc 40 get)))) ((and (= var "TSPACEFAC") (= typ "MTEXT")) (setvar var (cdr (assoc 44 get)))) ((and (= var "TSPACETYPE")(= typ "MTEXT")) (setvar var (cdr (assoc 73 get)))) ((and (= var "CMLEADERSTYLE") (= typ "MULTILEADER")) (setvar var (vlax-get (vlax-ename->vla-object ent) "StyleName"))) ; (style introuvable dans le dxf) ; DIMSTYLE passe par ActiveX (lecture seule) ((and (= var "DIMSTYLE") (vl-string-search "DIMENSION" typ)) (setq tmp (vla-get-ActiveDocument (vlax-get-acad-object))) (vlax-put tmp "ActiveDimStyle" (vla-item (vlax-get tmp "DimStyles") (cdr (assoc 3 get))))) ) ) ; Restitution (réacteurs de commande) si option Conserver désactivée (or *keep* (vlr-editor-reactor "RE" (list (cons :vlr-commandEnded 'Out) (cons :vlr-commandCancelled 'Out) (cons :vlr-commandFailed 'Out) ))) ; Commande (setq tmp (cond ((= typ "LWPOLYLINE") "_pline") ((= typ "ARC_DIMENSION") "_dimarc") ((= typ "LARGE_RADIAL_DIMENSION") "_dimjogged") ((= typ "DIMENSION") (nth (rem (cdr (assoc 70 get)) 8) '("_dimlinear" "_dimaligned" "_dimangular" "_dimdiameter" "_dimradius" "_dimangular" "_dimordinate"))) (T (strcat "_" (strcase typ T))) )) (setvar "CMDECHO" 0) (princ (strcat "\n" tmp "\n")) (initdia) (command tmp) (setvar "CMDECHO" 1) (princ) ) (princ "\nSélection vide") ) )
Tramber Posté(e) le 22 décembre 2011 Posté(e) le 22 décembre 2011 A l'usage elle est plutôt cool .. mais il y a un problème avec les commandes à fenêtre (comme _bhatch) : la fonction command les met en mode ligne de commande. Comment on lance une commande avec fenêtre ? Lance plutôt la commande "_-hatch" Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
lili2006 Posté(e) le 22 décembre 2011 Posté(e) le 22 décembre 2011 Bonsoir à toutes et tous, Un peu le "_addselected" de la version 2011 ? Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
(gile) Posté(e) le 22 décembre 2011 Posté(e) le 22 décembre 2011 Salut, Comment on lance une commande avec fenêtre ? (initdia) (command "_bhatch") Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
krunch Posté(e) le 23 décembre 2011 Auteur Posté(e) le 23 décembre 2011 Ok merci gile, en ajoutant un initdia ça marche (par contre "_-hatch" fait la même chose) Un peu le "_addselected" de la version 2011 ? Arf oui, il semblerait .. (je suis sur la 2010 :huh: )
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