Aller au contenu

Est-ce que les WIPEOUT (s) sont Actifs ?


Messages recommandés

Posté(e)

Pour ceux qui utilise à tout bout de champ la commande et/ou macro

 ^C^CWIPEOUT;Cadres;_on;

et

 ^C^CWIPEOUT;Cadres;_off;

pour rendre actif ou inactif les cadres Wipeout, une petite routine qui permet de savoir si le cadre est actif OUI ou NON

 

Cette fonction est sourtout utile lorsque l'on créé des Wipeout en autolisp

ex:

 (entmake (list '(0 . "WIPEOUT")
	     '(100 . "AcDbEntity")
	     '(67 . 0)
	     '(8 . "0")
	     '(62 . 7)
	     '(420 . 16777215)
	     '(100 . "AcDbWipeout")
	     '(90 . 0)
	     (cons 10 (list -0.440882 -0.478761 0.0))
	     (cons 11 (list 0.9 0.0 0.0))
	     (cons 12 (list 0.0 0.9 0.0))
	     (cons 13 (list 1.0 1.0 0.0))
	     '(70 . 7)
	     '(280 . 1)
	     '(281 . 50)
	     '(282 . 50)
	     '(283 . 0)
	     '(71 . 2)
	     '(91 . 5)
	     (cons 14 (list -0.5 0.021809 0.0))
	     (cons 14 (list 0.5 0.021809 0.0))
	     (cons 14 (list 0.5 0.5 0.0))
	     (cons 14 (list -0.5 0.5 0.0))
	     (cons 14 (list -0.5 0.021809 0.0))))

 

si le cadre est inactif le code ci dessus ne fonctionne pas.

 

La solution réside donc à un test pour vérifier si le cadre est actif ou non (à la place de rajouter des (command "WIPEOUT".....)

 (defun IT_IS_Wipeout ()
;;; *************************************************************
;;; - REPOND A LA QUESTION : LES CADRES WIPEOUT SONT-ILS ACTIFS -
;;; *************************************************************
 (equal (cdr (assoc 70 (dictsearch (namedobjdict) "ACAD_WIPEOUT_VARS"))) 1)
)

 

Cette fonction retourne :

 

T : Le cadre est actif

nil : le cadre est inactif

 

Cette fonction utilise le Menu express d'AutoCAD et n'a été testé que sur AutoCAD 2007 et 2008

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

Posté(e)
(defun add-acad_wipeout_vars (/ e)
 ;; By ElpanovEvgeniy
 ;; 2006-12-15
 ;; http://forums.augi.com/showthread.php?t=52082
 ;; add acad_wipeout_vars to DICTIONARY...
 ;; tested AutoCAD 2005, 2007
 (and
   (ARXLOAD "AcWipeout.arx")
   (setq
     e (entmakex
         (list
           '(0 . "WIPEOUTVARIABLES")
           '(102 . "{ACAD_REACTORS")
           (cons 330 (NAMEDOBJDICT))
           '(102 . "}")
           (cons 330 (NAMEDOBJDICT))
           '(100 . "AcDbWipeoutVariables")
           '(70 . 1)
         ) ;_ list
       ) ;_ entmakex
   ) ;_ setq
   (entmod
     (append
       (entget (NAMEDOBJDICT))
       (list
         '(3 . "ACAD_WIPEOUT_VARS")
         (cons 350 e)
       ) ;_ list
     ) ;_ append
   ) ;_ entmod
 ) ;_ and
) 

Evgeniy

Posté(e)

Salut Maximilien,

 

Je ne comprends pas bien ton soucis, que le cadre soit actif ou non ton (entmake ...) ou la routine Obj2Wipeout fonctionnent chez moi.

 

Mais voici une expression "bascule" pour activer/désactiver les cadres :

 

((lambda (elst)
  (entmod
    (subst
      (cons 70 (boole 6 (cdr (assoc 70 elst)) 1))
      (assoc 70 elst)
      elst
    )
  )
)
 (dictsearch (namedobjdict) "ACAD_WIPEOUT_VARS")
) 

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Moi ce que j'aimerai faire, c'est en faire figurer quelques -unes avec un cadre et d'autres sans dans le même dessin.

 

Est-ce réalisable ?

 

L'affichage des cadres vaut pour tout le dessin, mais tu peux créer des wipeouts à partir d'objets (option Polyligne ou avec Obj2Wipeout) et conserver ces objets pour les cadres que tu souhaites afficher et désactiver l'affichage des cades.

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Bonjour à toutes et tous,

 

(gile), j'utilise déjà ce Lisp mais je crois que la dernière fois que j'avais créé un joint de dilatation en polyligne Wipeout (que je voulais garder afficher !), je ne pouvais pas garder les autres objets sans affichage. Faut-il alors que j'utilise ton lisp sur tous les autres objets et laisser par défaut le cadre actif pour l'ensemble du dessin à cause de ce fameux passage de joint de dilatation ??? C'est dommage que l'affichage (ou non) des cadres soit pour tous le dessin.

Je comprend cependant que ton lisp "Obj2wipeout" soit une parade à ce problème. Il est également fréquent de recevoir des plans archi ou géomètre ou j'aimerai pouvoir garder ou non le cadre actif. Dans ce cas, que me conseilles-tu ? De repasser les objets dont je ne souhaite pas voir le cadre avec "Obj2wipeout" ?

 

Merci d'avance des idées que tu pourrais m'apporter.

 

Civil 3D 2025 - COVADIS_18.3b

https://www.linkedin...3%ABt-95313341/

Posté(e)

Cher (gile)

 

Je peux te garantir que quand je tapes WIPEOUT;Cadres;_off;

je ne peux plus faire de wipeout par un entmake de la manière que je l'ai indiqué précédemment

 

Ce sujet c'était juste pour donner le test de cadre actif ou non. J' ai réalisé des tonnes de lisp (dont les source appartient au BE où je travailles, je ne peux donc pas les diffuser)

qui créent différents Wipeouts de calque et de tailles différentes intégré le plus souvent dans des blocs.

 

Je me refuse à jeter à la poubelle 300 heures de dévelloppement des lisp que j'ai créé parce que je m'y suis peut être mal pris à l'époque et de refaire 300 heures (quasiment 2 mois de travail en complet) pour modifier le fonctionnement.

 

Je donne ce code juste pour aider mais si cela n'interresse personne :casstet: :casstet:

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

Posté(e)

Salut lili2006,

 

Un petit LISP qui crée une polyligne fermée sur le contour des wipeouts sélectionnés.

 

Avec les cadres activés, tu lances wo2pl, tu sélectionnes les wipeouts dont tu veux afficher le cadre et dont tu n'as pas conservé la polyligne source.

 

Puis tu désactive les cadres.

 

;; WO2PL (gile)
;; Recrée le contour des wipeouts (lwpolyline)
(defun c:wo2pl (/ ss n wo elst pts norm)
 (if (setq ss (ssget '((0 . "WIPEOUT"))))
   (repeat (setq n (sslength ss))
     (setq wo	 (ssname ss (setq n (1- n)))
    elst (entget wo)
    norm (vunit (v^v (cdr (assoc 11 elst)) (cdr (assoc 12 elst))))
    pts	 (wipeout2plst wo)
     )
     (entmake
(append
  (list	'(0 . "LWPOLYLINE")
	'(100 . "AcDbEntity")
	'(100 . "AcDbPolyline")
	(cons 90 (length pts))
	(cons 38 (caddr (trans (car pts) 0 norm)))
	'(70 . 1)
	(cons 210 norm)
  )
  (mapcar '(lambda (pt)
	     (setq pt (trans pt 0 norm))
	     (list 10 (car pt) (cadr pt))
	   )
	  pts
  )
)
     )
   )
 )
 (princ)
)

;;Wipeout2Plst (gile)
;; Retourne la liste des sommets du wipeout (coordonnées SCG)
(defun wipeout2plst (wo / elst u v mat)
 (setq	elst (entget wo)
u    (cdr (assoc 11 elst))
v    (cdr (assoc 12 elst))
mat  (list u (mapcar '- v) '(0. 0. 1.))
 )
 (mapcar
   '(lambda (p)
      (mapcar '+
       (mxv (trp mat) p)
       (mapcar '(lambda (x y) (/ (+ x y) 2.)) u v)
       (cdr (assoc 10 elst))
      )
    )
   (cdr
     (mapcar 'cdr
      (vl-remove-if-not '(lambda (x) (= (car x) 14)) elst)
     )
   )
 )
)

;; V^V (gile)
;; Retourne le produit vectoriel (vecteur) de deux vecteurs
(defun v^v (v1 v2)
 (list	(- (* (cadr v1) (caddr v2)) (* (caddr v1) (cadr v2)))
(- (* (caddr v1) (car v2)) (* (car v1) (caddr v2)))
(- (* (car v1) (cadr v2)) (* (cadr v1) (car v2)))
 )
)

;; VUNIT
;; Retourne le vecteur unitaire d'un vecteur
(defun vunit (v)
 ((lambda (l)
    (if (/= 0 l)
      (mapcar (function (lambda (x) (/ x l))) v)
    )
  )
   (distance '(0 0 0) v)
 )
)

;; Transpose a matrix Doug Wilson
(defun trp (m)
 (apply 'mapcar (cons 'list m))
)

;; Apply a transformation matrix to a vector by Vladimir Nesterovsky
(defun mxv (m v)
 (mapcar '(lambda (r) (apply '+ (mapcar '* r v))) m)
) 

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Maximilien,

 

Excuse moi, je n'avais pas vu passer ton message.

Je ne mets pas du tout en doute le fait que tu n'arrives pas a créer de wipeout avec entmake si les cadres sont désactivés, je disais juste que chez moi (AutoCAD 2007)), je n'ai pas ce soucis.

 

Bien sûr que ton code est intéressant, chercher des données dans les dictionnaires est souvent fastidieux.

 

Merci de nous donner "l'adresse" de cette propriété. ;)

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

  • 1 an après...
Posté(e)

Suite à une rencontre avec des wipeouts retords (issus d'une conversion depuis un logiciel d'architecture), j'ai du modifier WO2PL (ci-dessus). Ça fonctionne désormais quelque soit le plan du wipeout.

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

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é