Aller au contenu

[RESOLU] Importer un style de coupe et de détail


LElemurien

Messages recommandés

Bonjour,

 

Je souhaiterai importer un style de vue en coupe et un style de vue de détail (élément qui se trouve dans des boîtes de dialogue avec les commandes _viewsectionstyle et _viewdetailstyle).

 

Le but étant d'importer (d'un dwg ou dwt) ces styles de vue dans le dessin courant car j'aimerai au final faire un LISP puis un script pour pouvoir réaliser cette tâche sur tous les fichiers d'un dossier windows.

 

J'utilise aussi un LISP de gile qui importe les propriétés personnalisées (d'un dwg ou dwt) dans le dessin courant voici le LISP de Gile :

 

;; IMPOROP (gile)
;; Importe dans le dessin courant les propriétés personnalisées d'un fichier (dwg ou dwt)

(defun c:improp (/ target filename doc odbx source custList)
 (or *acdoc*
     (setq *acdoc* (vla-get-ActiveDocument (vlax-get-acad-object)))
 )
 (setq target (vla-get-SummaryInfo *acdoc*))
 (if
   (setq filename (getfiled "Choisir le fichier source"
                    		(getvar 'dwgprefix)
                    		"dwg;dwt"
                    		0
          		)
   )
	(progn
  	(if
		(not
  		(and
    		(setq
      		doc (GetItem
            		(vla-get-Documents (vlax-get-acad-object))
            		(strcat (vl-filename-base filename) ".dwg")
          		)
    		)
    		(= filename (vla-get-FullName doc))
  		)
		)
         (setq doc  (OpenDrawingDBX filename)
               odbx T
         )
  	)
  	(setq source (vla-get-SummaryInfo doc)
    		n      -1
  	)
  	(foreach p
               '(Author Comments HyperlinkBase KeyWords Subject Title)
		(if (/= "" (setq prop (vlax-get source p)))
  		(vlax-put target p prop)
		)
  	)
  	(repeat (vla-NumCustomInfo source)
		(vla-GetCustomByIndex source (setq n (1+ n)) 'key 'val)
		(setq custList (cons (cons key val) custList))
  	)
  	(foreach p custList
		(if (vl-catch-all-error-p
      		(vl-catch-all-apply
        		'vla-GetCustomByKey
        		(list target (car p) 'val)
      		)
    		)
  		(vla-AddCustomInfo target (car p) (cdr p))
  		(vla-SetCustomByKey target (car p) (cdr p))
		)
  	)
  	(and odbx (vlax-release-object doc))
	)
 )
 (princ)
)

;;; Accéder à un dessin fermé

(defun OpenDrawingDBX (filename / objdbx release)
 (setq objdbx
		(vlax-create-object
  		(if (< (setq release (atoi (getvar "ACADVER"))) 16)
    		"ObjectDBX.AxDbDocument"
    		(strcat "ObjectDBX.AxDbDocument." (itoa release))
  		)
		)
 )
 (vla-open objdbx filename)
 objdbx
)

;;; GetItem (gile)
;;; Retourne le vla-object de l'item s'il est présent dans la collection
;;;
;;; Arguments
;;; col : la collection (vla-object)
;;; name : le nom de l'objet (string) ou son indice (entier)
;;;
;;; Retour : le vla-object ou nil

(defun GetItem (col name / obj)
 (vl-catch-all-apply
   (function (lambda () (setq obj (vla-item col name))))
 )
 obj
)

 

 

J'aimerai donc faire ce LISP un peu de la même manière que celui de Gile mais le problème c'est que je connais pas le Visualisp et je ne sais pas si cela est réalisable en LISP?

 

Auriez vous des idées de savoir si cela est réalisable d'une part?

 

Puis d'autre part est-ce faisable en LISP?

 

Où trouver ces infos (style de vue en coupe et détail) dans un dessin en LISP car il n'y a pas ces infos dans une "table" comme pour les styles de cotation, lignes, texte etc...?

 

Merci d'avance pour vos pistes de recherche

 

Bon weekend!

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Je ne pourrais pas vraiment t'aider car ce n'est pas un domaine que je maîtrise mais de quoi as-tu besoin de récupérer ? La liste de toutes les vues de détails et de section, ou bien uniquement la vue courante ?

 

Variable système CVIEWDETAILSTYLE

Variable système CVIEWSECTIONSTYLE

 

Sinon, à l'aide de cette commande, tu peux voir qu'il y a un dictionnaire pour les CVIEWDETAILSTYLE et CVIEWSECTIONSTYLE :

(defun c:ListDictionaries ( / ed ed1)
 (prompt "\nDictionaries in current drawing: ")
 (foreach ed (entget (namedobjdict))
   (progn
     (cond ((= (car ed) 3)
       (prompt (strcat "\n" (cdr ed))))
           ((= (car ed) 350)
       (progn
         (foreach ed1 (entget (cdr ed))
           (if (= (car ed1) 3)
             (prompt (strcat "\n  " (cdr ed1)))
           )
         )
       ))
     )
   )
 )
(princ)
)

AcDbVariableDictionary

CANNOSCALE

CETRANSPARENCY

CMLEADERSTYLE

CTABLESTYLE

CVIEWDETAILSTYLE

CVIEWSECTIONSTYLE

DIMASSOC

HIDETEXT

HPINHERIT

HPTRANSPARENCY

LAYEREVAL

LAYERNOTIFY

 

Donc, la réponse est oui, c'est faisable en LISP, mais je n'ai pas les réponses malheureusement :3

tu peux consulter ce topic sur les dictionnaires si tu veux : CADxp - Les dictionnaires

Si (gile) passe dans le coin, il sera bien plus efficace et saura mieux t'orienter !

 

Bisous,

Luna

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

À mon avis, ce n'est pas vraiment une tâche pour "Débuter en LISP".

S'il n'y a pas des centaines de fichiers dans ton dossier, tu auras meilleur temps de le faire avec le Design Center.

 

Sinon, les styles de vue en coupe et les styles de vue de détail sont stockés respectivement dans les dictionnaires ACAD_SECTIONVIEWSTYLE et ACAD_DETAILVIEWSTYLE qui se trouvent dans le dictionnaire des objets nommés.

Gilles Chanteau - gileCAD -
Développements sur mesure pour AutoCAD
ADSK_Expert_Elite_Icon_S_Color_Blk_125.png

Lien vers le commentaire
Partager sur d’autres sites

Merci pour les infos!

 

Ce dont j'ai besoin c'est le "style" de vue en coupe et de détail.

 

Je vais étudier tout ça, mais j'ai peut-être trouvé une autre solution pas très Ac a démique mais qui à l'air de fonctionner. (Etrange impossible d'écrire Ac a démique cela écrit Autocadémique)

 

En fait j'ai créer un bloc dans un gabarit (gabarit qui contient le style de vue) et j'insère ce bloc dans le dessin et du coup cela importe aussi le style de vue dans le nouveau dessin.

 

Et ensuite je supprime le bloc inutile dans le dessin.

 

Clairement ce n'est pas très "programme" dans la structure mais si cela fonctionne cela reste plus dans mes capacités.

 

Mais encore merci car je vais étudier ces infos et je vais certainement essayer de faire un programme plus "programmatique" smile.gif.

 

Bon weekend!

Lien vers le commentaire
Partager sur d’autres sites

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é