Aller au contenu

Messages recommandés

Posté(e)

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")
 )
)

Posté(e)

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

 

./__\.
(.°=°.)
Posté(e)

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: )

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 compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • 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é