Aller au contenu

Casser les liason Xref avant ouverture


Messages recommandés

Posté(e)

bonjour à tous

 

tout est dans le titre.

je cherche un petit programme qui m'aiderai à délier tout les fichier Xref et autre image que le plan chercherai à intégrer.

Car je vais avoir une série importante de plan à purger et je ne voudrait pas y passer ma semaine .

Je vous remercie par avance.

 

@+

Le trlalala du nain

  • - Moi c'que j'aime dans les cavernes
  • - C'est qu'on peut allez piocher.
  • - on peut extraire du minerais
  • - Et des pierres pour les tailler
Posté(e)

merci pour ta réponse rapide

 

par contre, deux chose:

-1 - Y a t il la même chose en version LT?

 

-2 - existe t il quelque chose de semblable mais pour "délier" plusieurs fichier en même temps?

 

 

@+

Le trlalala du nain

  • - Moi c'que j'aime dans les cavernes
  • - C'est qu'on peut allez piocher.
  • - on peut extraire du minerais
  • - Et des pierres pour les tailler
Posté(e)

Salut

 

Avec celui-ci par exemple

J'ai aussi inclus pour ceux que cela peut intéresser

Une sélection multiple de fichiers

Une ouverture via ObjectDbx maintenant compatible A2013

 

(defun c:unx(/ Ouvrir_dessin_dbx GetMultFiles enlever_xref lst)

 (defun Ouvrir_dessin_dbx(dwg / dbx doc lan rel
			 DLLRegister ProgID->ClassID DBX-Register Get-ObjectDBX)

   ; Calls REGSVR32 to Register a DLL silently
   (defun DLLRegister (dll) (startapp "regsvr32.exe" (strcat "/s \"" dll "\"")))

   ; Returns the ProgID for a given ClassID if found in registry
   (defun ProgID->ClassID (ProgID) (vl-registry-read (strcat "HKEY_CLASSES_ROOT\\" progid "\\CLSID")))

   ; Try to Register ObjectDBX if not done so already
   ; Returns the Class Name if already registered / sucessfully registered
   ; Else returns nil if failure
   (defun DBX-Register (classname filename / server acver)
     (cond
((not (and classname filename))
  (DBX-Register
    (strcat "ObjectDBX.AxDbDocument." (itoa (setq acver (atoi (getvar 'ACadVer)))))
    (strcat "AxDb" (itoa acver) ".dll")
  )
)
((ProgID->ClassID classname) classname)
((setq server (findfile filename))
  (cond
    ((and (DLLRegister server) (ProgID->ClassID classname)) classname)
    (t nil)
  )
)
(t (DBX-Register "ObjectDBX.AxDbDocument" "AxDb.dll"))
     )
   )

   ; Try to reference ObjectDBX - returns the ActiveX object if sucessful
   ; Else returns nil if failure
   (defun Get-ObjectDBX (/ classname)
     (if (setq classname (DBX-Register nil nil))
(vla-getinterfaceobject (vlax-get-acad-object) classname)
     )
   )

   (and (setq dwg (findfile dwg))
     (progn
(vlax-for doc (vla-get-documents (vlax-get-acad-object))
  (and (eq (strcase (vla-get-fullname doc)) (strcase dwg))
    (setq dbx doc lan T)
  )
)
(and (not dbx)
  (setq dbx (Get-ObjectDBX))
  (vla-open dbx dwg)
)
     )
   )
   (list dbx lan)
 )

 (defun GetMultFiles (strTitle strFilter strInitDir / Maxfiles Flags WinDlg mFiles Catchit lst)
   (vl-load-com)
   (or (eq (vl-registry-read "HKEY_CLASSES_ROOT\\Licenses\\4D553650-6ABE-11cf-8ADB-00AA00C00905") "gfjmrfkfifkmkfffrlmmgmhmnlulkmfmqkqj")
     (vl-registry-write "HKEY_CLASSES_ROOT\\Licenses\\4D553650-6ABE-11cf-8ADB-00AA00C00905" "" "gfjmrfkfifkmkfffrlmmgmhmnlulkmfmqkqj")
   )
   (if (setq WinDlg (vlax-create-object "MSComDlg.CommonDialog"))
     (progn
(setq Maxfiles 32767
      Flags (+ 4 512 524288 1048576 1024)
)
(vlax-put-property WinDlg 'CancelError :vlax-false)
(vlax-put-property WinDlg 'MaxFileSize Maxfiles)
(vlax-put-property WinDlg 'Flags Flags)
(vlax-put-property WinDlg 'DialogTitle strTitle)
(vlax-put-property WinDlg 'Filter strFilter)
(vlax-put-property WinDlg 'InitDir strInitDir)
(setq Catchit (vl-catch-all-apply
		'(lambda ()
		   (vlax-invoke-method WinDlg 'ShowOpen)
		   (setq mFiles (vlax-get WinDlg 'Filename))
		)
	      )
)
(vlax-release-object WinDlg)
(if (vl-catch-all-error-p Catchit)
  nil
  (progn
    (while (setq pos (vl-string-position (ascii "\000") mFiles))
      (setq lst (cons (substr mFiles 1 pos) lst)
	    mFiles (substr mFiles (+ pos 2))
      )
    )
    (reverse (cons mFiles lst))
  )
)
     )
     (progn
       (princ "\nErreur: Le pilote Comdlg.OCX du système d'exploitation n'est pas installé.")
       nil
     )
   )
 )

 (defun enlever_xref(dessin / dbx ent esp lck)
   (princ (strcat "\n Travail sur " dessin))(princ)
   (and (car (setq dbx (Ouvrir_dessin_dbx dessin)))
     (progn
(vlax-for esp (vla-get-blocks (car dbx))
  (vlax-for ent esp
    (and (eq (vla-get-objectname ent) "AcDbBlockReference")
	 (vlax-property-available-p ent 'path)
     (progn
	(setq lay (vla-item (vla-get-layers (car dbx)) (vla-get-layer ent)))
	(and (eq (setq lck (vla-get-lock lay)) :vlax-true)
	  (vla-put-lock lay :vlax-false)
	)
	(vla-delete ent)
	(and (setq lck :vlax-true)
	  (vla-put-lock lay :vlax-true)
	)
      )
    )
  )
)
(vla-saveas (car dbx) dessin)
(or (cadr dbx) (vlax-release-object (car dbx)))
     )
   )
 )

 (and (setq lst (GetMultFiles "Sélectionnez les dessins à traiter" "Dessin AutoCAD (*.dwg)|*.dwg|Fichier d’échange AutoCAD (*.dxf)|*.dxf|Tout (*.*)|*.*" (getvar "dwgprefix")))
   (mapcar '(lambda(x) (enlever_xref (strcat (car lst) "\\" x))) (cdr lst))
 )
 (princ)
)

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

-1 - Y a t il la même chose en version LT?

 

A toi de voir.

 

 

2 - existe t il quelque chose de semblable mais pour "délier" plusieurs fichier en même temps

 

Faut faire en script.

 

Pour le lisp, l'instruction que je t'ai donné (il y a quelques remarques au sujet des scripts sur cette fontion dans l'aide, dont je ne doute pas que l'aies justement visitée) semble facile et celle de Patrick_35 qui a l'air adapté pour plusieurs fichiers....

 

On ne sait pas comment tu veux coder....

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

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

Juste au passage, je ne l'ai pas sous la mains mais TrueView ne serait pas faire cela? (et en plus il purge)

 

Sinon pour le coup un script tel quel :

-xref
T
*
-IMAGE
D
*

fonctionnera à la perfection dans un automatiseur de script tel que scripteur ou superautoscript.

 

Voila, c'est pas du lisp mais ça devrait fonctionner(et sous LT également si je ne me trompe pas).

C'est en forgeant que l'on devient forgerons.

Et c'est en sciant que Léonard DeVinci!

Posté(e)

C'est une suggestion... mais ca devient un non-sens de tout charger pour décharger.

Encore une fois je conseille l'ouverture partielle... ou TrueView s'il le fait, évidemment.

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
  • 2 semaines après...
Posté(e)

Salut

 

Avec celui-ci par exemple

J'ai aussi inclus pour ceux que cela peut intéresser

Une sélection multiple de fichiers

Une ouverture via ObjectDbx maintenant compatible A2013

 

 

Salut Patrick,

J'utilise depuis des années ta technique d'ouverture des dessin via ObjectDbx,

et c'est vraiment pratique pour faire des tas de traitement silencieusement ...

 

J'ai beaucoup bossé sur les mystères des xref, et notamment sur le fait qu'il n'y a rien pour changer le type, attacher ou niveau :

Le lisp est la seule manière d'y arriver, il n'y a ni méthode ni propriété en com et .net

Il me reste à adapter le code ci dessous à ObjectDbx, car les xref attachées sont la pire idée qu'Autodesk ai eu:

 

L'ouverture de dessins avec des xref croisées peut prendre des plombes, et on ne maitrise plus la hiérarchie de la résolution des xrefs.

 

****************************************************************************
;;§/xref/change l'occurence de block en xref de type overlay /eInsert-oInsert

(defun c:MakeXrefOverlay (  / nom   blocks  )
 (setq eblockref (enam))
 (setq oblock (pw_retoBlock eblockref))
 (if (= :vlax-true (vla-get-isxref oblock))
   (progn
     (setq eblock (pw_to_ename oblock))
     (setq egBlock (entget eblock))
     (setq Flags (cdr (assoc 70 egBlock)))
     
    (if	(= (boole 1 Flags 8) 8)		; that means that this block in an overlay xref
      (prompt "\nAllready Overlay xref")
      (progn
	(setq flags (+ 8 flags))
	(pw_entmodifi eblock 70 flags)
	(prompt "\nChanged to Overlay xref")
      )
    )
   )
   	      (prompt "\nNot an xref")

 )								
)
; ****************************************************************************
;;§/xref/retourne le eblockdef si le bloc est une xref/ebloc

(defun pw_IsXref ( ebloc / nom bdef  flags)
				
 (setq nom (vla-get-EffectiveName (pw_to_object ebloc)))
(setq bdef (tblsearch "block" nom))
(setq Flags (cdr (assoc 70 bdef)))
 
   (if	(member 4 (pw_l_flag flags))
     bdef
     nil
   )					
 					
)

; ****************************************************************************
;;§/xref/retourne le oblock de l'occurence de block /eInsert-oInsert

(defun pw_retoBlock ( ebloc / nom   blocks  )
				
 (setq nom (vla-get-EffectiveName (pw_to_object ebloc)))
 (setq blocks (vla-get-blocks pw-acaddocument))
 (vla-item blocks nom)
								
)
;

----------------------------------------------------------------------

Site: https://www.g-eaux.fr

Blog: http://g-eaux.over-blog.com

Posté(e)

OUVRPARTIEL et -OUVRPARTIEL (a priori ce sont les mêmes qui sont enregistrées, je viens de tester) sont des commandes en ligne. On sait bien que pour la version normale, on fait un "OUVRIR" normal B) , les variables que tu évoques entrant alors en jeu.

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

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

ben je ne comprend pas pourquoi,

et quand je fais ouvrir partiel depuis le dialogue ouvrir,

conformément à l'aide Autocad,

ouvertur partielle

je n'obtiens rien de plus, si ce n'est parfois le choix d'une vue de départ,

mais pas le dialogue promis:

dialogue ouverture partielle

Du coup c'est une commande que je n'ai jamais vraiment utilisé, parcequ'en fait, je ne la comprend pas.

----------------------------------------------------------------------

Site: https://www.g-eaux.fr

Blog: http://g-eaux.over-blog.com

Posté(e)

Ah tiens, sur 2010, je vois aussi que ca ne marche pas ! Aucun accès à la boite. Je ne l'avais pas utilisé depuis des lustres....

Pas de réponse...

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)

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é