Aller au contenu

Blocs dynamiques en version 2000


Messages recommandés

Posté(e)

Bonjour à tous !

 

Je me suis créé une bibliothèque d'élément de cuisine en blocs dynamiques.

 

Je ne souhaite pas que les archi, BE et autres corps d'état puissent récupérer cette bibliothèque lorsque je leur transmet mes fichiers.

 

Pour cela, j'utilisais jusqu'à présent e-transmit en enregistrant en version 2000. Je me disais que les blocs dynamiques allaient devenir "statiques" et de type anonyme (*U12, etc).

 

Or en rouvrant un fichier enregistré en version 2000 avec autocad 2007, je m'aperçois que mes blocs sont toujours dynamiques ! Horreur !

 

Comment puis-je procédé pour transmettre des fichiers sans ma bibliothèque (à part en décomposant et purgeant avant l'e-transmit) ?

 

Merci d'avance !

Autocad 2021 - Revit 2022 - Windows 10

Posté(e)

J'ai pas vraiment de solution :mais seulement un piège :

 (defun MINE_ANTI_PIRATE	()
 (entmake
   (list
     '(0 . "ATTDEF")
     '(100 . "AcDbEntity")
     '(67 . 0)
     '(410 . "Model")
     '(8 . "0")
     '(62 . 250)
     '(6 . "ByBlock")
     '(370 . -2)
     '(100 . "AcDbText")
     (cons 10 (list -5249.43 -5956.53 0.0))
     '(40 . 1000.0)
     '(1 . "")
     '(50 . 0.785398)
     '(41 . 0.8)
     '(51 . 0.0)
     '(7 . "Standard")
     '(71 . 0)
     '(72 . 1)
     (cons 11 (list 0.0 0.0 0.0))
     (cons 210 (list 0.0 0.0 1.0))
     '(100 . "AcDbAttributeDefinition")
     '(3 . "")
     '(2 . "PROPRIETE_DE_MAXIMILIEN_ALORS_PAS_TOUCHE")
     '(70 . 11)
     '(73 . 0)
     '(74 . 2)
   )
 )
)

 

j'effectue cette opération dans un lisp qui me met au norme le bloc (couleur DUBLOC etc.. ) que tu avais si gentiment participé ici

 

Cela crée un attrib constant invisible injurieux! ceux qui pirate téléphone et je n'ai plus qu'à les ajouter dans une liste permettant de savoir que la prochaine fois j'explose les blocs avant d'envoyer!

 

C'est pas mal de se servir de la bêtise humaine à ses propres fins! seul ceux qui connaissent assez AutoCAD ne réagissent pas.

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)

ASTERIXII : oui je sais que les blocs dynamiques n'existent pas sur 2000, c'est la raison pour laquelle j'enregistre en version 2000. J'ai fait un test :

- J'enregistre en version 2000

- J'ouvre avec autocad LT 2002 : mes blocs ne sont pas dynamiques, ils sont même anonymes

- J'enregistre avec autocad LT 2002 en version 2000

- J'ouvre le fichier avec autocad 2007 : mes blocs dynamiques sont de retour...

 

Maximilien : je ne comprends pas trop à quel moment l'attribut "injurieux" apparaît... Je trouve cette méthode de sélection un peu compliquée (e-transmit est si simple !!!). Et exploser les blocs ne me convient pas : je perds mes informations de couleurs, type de ligne, etc...

Autocad 2021 - Revit 2022 - Windows 10

Posté(e)

Ou alors il me faudrait un lisp qui, pour chaque bloc dynamique, explose le bloc et recompose un bloc "non-dynamique" à partir des éléments du précédent...

 

Si quelqu'un a quelque chose qui pourrait correspondre ? Ou une meilleure proposition...

Autocad 2021 - Revit 2022 - Windows 10

Posté(e)

JE pense que ton idée est faisable : exploser et recomposer en mode normal.

 

Mais sinon, j'ai regardé les propriétés AtciveX. ET il ne semble pas possible de jouer sur le caractère Dynamique d'un bloc.

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

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

(defun c:test (/)
     
(defun injecto (j / i element elementGet)
 (setq i 0)
 (while (    (setq element (ssname j i))
   (setq elementGet (entget element))
   (setq i (1+ i))
   (entmake elementGet)))  

(defun FAITBLO (nom jeu oudonc / ea eb)
   (setq ea (list (cons 0 "block") (CONS 2 nom) (cons 10 oudonc) (cons 70 64)))
   (setq eb (list (cons 0 "endblk")) index 0)
   (entmake ea)
   (injecto jeu)
   (entmake eb)
   (repeat(sslength jeu)(entdel (ssname jeu index))(setq index (1+ index)))
 )

(defun refait(ent / );(setq ent(ssname ss n))
 (setq gtent(entget ent))  
 (setq donne (vlax-invoke (vlax-ename->vla-object ent) 'explode))
 (setq sblo(ssadd))
 (foreach p donne(setq sblo(ssadd(vlax-vla-object->ename p)sblo)))
 (faitblo(cdr(assoc 2 gtent))sblo(cdr(assoc 10 gtent)))
 (command "_insert" (cdr(assoc 2 gtent))(cdr(assoc 10 gtent))1 1 0)
 )

(setq ss (ssget  '((0 . "INSERT"))))
(repeat (setq n (sslength ss))
 (setq ref (vlax-ename->vla-object (ssname ss (setq n (1- n)))))
 (if (= (vla-get-IsDynamicBlock ref) :vlax-true)
     (refait(ssname ss n))
     )
 )
)

 

Je suis sur le C.. !!!

Je viens de tenter un code qui consiste à réécrire le bloc avec des ENTMAKE tout à fait classique. Dingue, ca ne marche pas, le bloc revient en dynamique. Incroyable.

Pour qui veut se pencher un peu sur le lisp, le résultat est surprenant.

 

[Edité le 16/11/2006 par Tramber]

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

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

Tiens, un code beaucoup plus simple :

 

(defun c:test (/)
    
 (defun refait(ent / );(setq ent(ssname ss n))
   (setq gtent(entget ent))
   (setq donne (vlax-invoke (vlax-ename->vla-object ent) 'explode))
   (setq sblo(ssadd))
   (foreach p donne(setq sblo(ssadd(vlax-vla-object->ename p)sblo)))
   (command "-bloc" (cdr(assoc 2 gtent)) "Oui" (cdr(assoc 10 gtent))sblo "")
   (entdel(entlast))
   (command "_insert" (cdr(assoc 2 gtent))(cdr(assoc 10 gtent))1 1 0)
   )
 
 (setq ss (ssget  '((0 . "INSERT"))))
 (repeat (setq n (sslength ss))
   (setq ref (vlax-ename->vla-object (ssname ss (setq n (1- n)))))
   (if (= (vla-get-IsDynamicBlock ref) :vlax-true)
     (refait(ssname ss n))
     )
   )
)

 

Ca marche ! Mais attention, c'est uniquement dans le SCG, en selectionnant à la souris UN exmplaire de chaque. Et c'est vite fait avant de me mettre à table !

 

Bon ap' !

 

[Edité le 16/11/2006 par Tramber]

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

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

Salut,

 

Une autre façon, Tous les blocs dynamiques sont traités, ils sont renommés avec un sufixe incrémenté pour éviter les duplications de nom (MonBloc -> MonBloc_1).

Il faut ensuite purger les blocs dynamiques, bien sûr. Pour tout purger avec le LISP, enlever les points-virgules devant (vla-PurgeAll).

 

(defun c:dyn2stat (/ n ss)
 (setq n 0)
 (if (setq ss (ssget "_X" '((0 . "INSERT"))))
   (foreach bl	(mapcar 'cadr (ssnamex ss))
     (setq bl (vlax-ename->vla-object bl))
     (if (= (vla-get-IsDynamicBlock bl) :vlax-true)
(vla-ConvertToStaticBlock
  bl
  (strcat (vla-get-EffectiveName bl)
	  "_"
	  (itoa (setq n (1+ n)))
  )
)
     )
   )
 )
 ;;(vla-PurgeAll (vla-get-ActiveDocument (vlax-get-acad-object)))
 (princ)
) 

[Edité le 16/11/2006 par (gile)][Edité le 16/11/2006 par (gile)]

 

Edit : corrigé l'oubli signalé par LUDWIG pour vla-PurgeAll.

 

[Edité le 17/11/2006 par (gile)]

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

Posté(e)

Merci à vous de vous pencher sur ce problème !

 

Je viens de tenter un code qui consiste à réécrire le bloc avec des ENTMAKE tout à fait classique. Dingue, ca ne marche pas, le bloc revient en dynamique. Incroyable.

Sans doute parce que les paramètres et actions existent toujours après la décomposition et son inclus dans le jeu de sélection du nouveau bloc ?

 

 

vla-ConvertToStaticBlock

Evidemment ! Mais il fallait le savoir !

 

Je teste donc ça ! Merci !

 

--> Ca marche nickel. Je l'intègre d'ore et déjà à ma procédure de transmission de plan... dyn2stat --> e-transmit

 

EDIT : il semble qu'il manque un argument pour le vla-purgeall

 

[Edité le 17/11/2006 par LUDWIG]

Autocad 2021 - Revit 2022 - Windows 10

Posté(e)
Sans doute parce que les paramètres et actions existent toujours après la décomposition et son inclus dans le jeu de sélection du nouveau bloc ?

 

On pourrait le croire mais je confirme, dans le jeu de selection créé par ma 1ère routine, il n'y avait que des objets graphiques classiques.

Amusant et intriguant.

 

Merci à Gile pour le tuyau, ca évitera mon code un peu vieille génération (mais qui marchera sur des versions antérieures).

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
  • 3 mois après...
Posté(e)

Préalable dans la base de registre :

 Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Autodesk\AutoCAD\R17.0\ACAD-5001:40C\ETransmit\setups\Standard]
"Name"="Standard"
"PackageType"=dword:00000000
"SaveDrawingFormat"=dword:00000002
"DestFileAction"=dword:00000001
"DestFolder"="C:\\Export AutoCAD\\Etransmit"
"DestFile"=""
"FilePathOption"=dword:00000001
"RootFolder"=""
"IncludeFont"=dword:00000000
"IncludeMaterialTextures"=dword:00000000
"SendMail"=dword:00000000
"SetPlotterNone"=dword:00000000
"BindXref"=dword:00000000
"UsePassword"=dword:00000000
"IncludeSSFiles"=dword:00000001
"Description"=""

 

Le fichier lisp

;;; Rend statique les bloc dynamique pour éviter leur écrasement
;;;  cette fonction fait une sauvegarde du fichier annoté "Etranmit"
;;;  effectue la transformation et effectue le Etransmit
;;;  cette fonction vient de l'aide précieuse de (gile)
;;;  sur CADXP (url=http://www.cadxp.com/sujetXForum-12666)CADxp(/url)

(defun c:dyn2stat (/ n ss PRIVE_OldName)
 (setq n 0)
 (setq PRIVE_OLDNAME (strcat (getvar "DWGPREFIX") (vl-filename-base (getvar "DWGNAME"))))
 (vl-file-delete (strcat PRIVE_OldName "- Etranmit.dwg"))
 (command "_SAVEAS" "2004" (strcat PRIVE_OldName "- Etranmit.dwg"))
 (if (setq ss (ssget "_X" '((0 . "INSERT"))))
   (foreach bl	(mapcar 'cadr (ssnamex ss))
     (setq bl (vlax-ename->vla-object bl))
     (if (= (vla-get-IsDynamicBlock bl) :vlax-true)
(vla-ConvertToStaticBlock
  bl
  (strcat (vla-get-EffectiveName bl)
	  "_"
	  (itoa (setq n (1+ n)))
  )
)
     )
   )
 )
 (vla-PurgeAll (vla-get-ActiveDocument (vlax-get-acad-object)))
 (command "_-etransmit" "" "_choose" "Standard" "_create")
 (command "_close" "_no")
 (command "_open" (strcat PRIVE_OLDNAME ".dwg"))  
 (princ)
)

 

le fichier MNU

 ....
***POP1
ID_MNB0000EF	[Transfère	DYN2STAT]^C^C(c:DYN2STAT)(princ);
....
***HELPSTRINGS
ID_MNB0000EF	[Transforme tous les blocs dynamiques en bloc statique en créant un fichier suffixé "-Etransmit" puis effectue uh e-Transmit de celui-ci et ferme le fichier]
...

 

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

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é