Aller au contenu

Messages recommandés

Posté(e)

Bonsoir,

(vlax-get-property item 'Name) donne la valeur du noms d'une référence externe.

 

Mais comment avoir le noms du fichier, plutôt que le noms de la ref externe ?

 

Daniel

Posté(e)

Salut,

 

Une ligne de code de ce style pourrait faire l'affaire:

 

(cdr (assoc 1 (tblsearch "BLOCK" (vlax-get-property (vlax-ename->vla-object (car (entsel))) 'Name))))

 

Bruno V.

 

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Posté(e)

Je m'inscris en faux, Patrick que je respecte, même si je suis très jaloux car je suis un enfant de la côte d'opale et que je meurs en Alsace de ne pas voir la mer.

 

tyrese69_ a été très courtois tout au long du fil, sauf, et là c'est vrai à ne pas avoir conclu le message.

 

Un petit MP ou mieux une confirmation que ca marche (ou qu'on a laissé tombé ) est quand même pas mal.

Je connais un forum surlequel on se fait "tuer" si on ne met pas [résolu] en édition du titre du fil, mais c'est certainement compliqué à mette en place.

 

Dans ce message, c'est une autre approche sur le problème ca mérite un nouveau sujet, ca se discute moins.

 

Bref, je m'excuse de m'imisser mais y a (largement) pire :P (gros mots, SMS, manque de concentration sur la question...)

 

Sinon, Bonus a bien fait de nous rappeler que les X-refs se trouvent dans la table des blocs.

 

[Edité le 25/11/2004 par Tramber]

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

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

Bonjour à tous et plus particulièrement à Patrick_35

 

Je suis désolé de n'avoir pas remercier Patrick_35 pour l'aide qu'il m'a apporté !

 

Je ne suis pas du genre à ne pas donner de nouvelles sur des points qui

peuvent être profitables à la communauté !

 

Un peut de surcharge ces derniers jours (une charette comme l'on connait en BE !)

ne m'a pas encore permis de tester tout le travail qu'il a bien aimablement fourni !

 

Je donnerais des nouvelles, tous mes essais accomplis, ou je demanderais plus

d'infos si cela est nécessaire. Etant un débutant en lisp et Vlisp j'ai un peut de

mal à assimiler ou simplement à essayer les différents points communiqués !

 

Mais d'avance je tiens à remercier Patrick_35 pour son aide présente et à venir

car je ne pense pas que l'on vienne sur un tel forum sans avoir une ame de bon

samaritain !

 

Patrick_35, au travers des différents fils que j'ai pu lire sur d'autres sujets, je mesure

toute l'aide et l'expérience que tu as dans un dommaine que je souhaite mieux connaitre

et j'espère que mes plates excuses suffirons à pardonner ma froideur involontaire !

 

Merci à Tramber pour son intervention et que je regrette de ne pas avoir saluer à Paris

à Invivo, alors que je l'ai fais pour Patrick E.

La encore ces forums sont une fenêtre ouverte vers une forme de communication aveugle,

pas toujours évidente à maitriser !

 

Malgré tout, Patrick_35 je te salue et j'espère m'être fait pardonner !

 

 

 

 

Posté(e)

Re bonjour,

Pour rendre à César ce qui lui reviens, l'extrait du code proviens d'une copie

d'un code issu du site Afralisp forum code66 html si ma mémoire est bonne !

 

Mais le source qui m'a été donner avait été épurer de toute origine et commentaires !

Pratique également peut simpathique !

 

J'explique ma démarche.

 

Des fichiers provenant d'une appli externe à Autocad, écrite en Delphi, envoie via

le net des fichiers de plans, de divers intervenants d'un projet (armoire à plans).

 

Selon les méthodes de travail des différents projeteurs, les noms des xrefs

correspondent au noms des fichiers eux même ou bien sont renomés.

C'est dans ce dernier cas qu'il est nécessaire d'avoir un lisp modifié comme

souhaité pour pouvoir recharger les xrefs de façon automatique !

L'appli lie le fichier texte et précharge les fichiers associés, sans autre intervention !

 

Dés que mes essais seront terminés je vous tiendrait au courant, mais comme je repart sur un autre chantier, celà attendra le week end !

 

PS : Pour info, le code complet est sur le site afralisp

si nécessaire je peut préciser le lien !

 

Daniel

Posté(e)
PS : Pour info, le code complet est sur le site afralisp

si nécessaire je peut préciser le lien !

 

Ne poses pas la question si tu trouves que ca vaut le coup.

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

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

Bonjour à vous deux

Il est toujours irritant de voir un nouveau message sur un sujet qui à été déjà été abordé et qui est resté sans conclusion (surtout quand une recherche a été faite). C'est le seul reproche que je fais, mais bon, ce n'est pas grave, je ne t'en tiens pas rigueur

Je sais qu'il existe des sites où on passe son temps à se justifier et où on à droit aussi aux injures. J'ai passé l'age et je ne vais plus mettre la souris dans ces sites, je préfère de loin les choses constructives

 

Donc, pour répondre à ton souci principal

Un (setq a (tblnext "block" t)) te donne le premier bloc de la table "block"

Si un (logand (cdr (assoc 70 a)) 4) est égal à 4, c'est donc un xref.

Si c'est un xref, un (cdr (assoc 1 a)) te donne le nom et un (cdr (assoc 2 a)) te donne son chemin complet (répertoire+fichier)

Pour passer au block suivant, un (setq a (tblnext "block")) suffit

Et si la valeur de a est nil, c'est que c'est fini, la table des blocs a été balayée

 

Pour Tramber. Si tu as un moment, fais un saut sur la côte de granit rose, surtout en ce moment où il n'y a pas de touriste. Ce n'est pas les grandes plages du nord, mais ça a un charme incomparable ;)

Et rien n'interdit le poster et la bouteille de sable sur le bureau (bon, je taquine un peu...)

 

@+

 

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)

Bonsoir,

Mes faibles connaissances en vlisp (et lisp!) m'empêchent

de bien intégrer au lisp suivant :

 

;début

(defun c:getxref ()

(vl-load-com)

(setq activedocument (vla-get-activedocument (vlax-get-Acad-Object)))

(setq theblocks (vla-get-blocks activedocument))

(setq theList '())

(setq filexref (open "C:\\temp\\listexref.txt" "w"))

(vlax-for item theblocks

(setq yesxref (vlax-get-property item 'isXref))

(if (= yesxref :vlax-true)

(progn

(setq ablock (vlax-get-property item 'Name))

(setq prxref ablock)

(write-line prxref filexref)

(setq theList (append (list ablock) theList))

)

 

)

 

)

(close filexref)

)

;fin

 

les éléments transmis, pour non pas mettre dans le fichier texte les noms

des xrefs, mais les chemins et noms de fichier, voir même seulement le

noms des fichiers seulement et celà sans sélection !

 

Cette étape correspond a la première phase de mes recherches :

créer une liste des fichiers en xref !

 

La seconde étant liée à mon autre post, qui correspond à la fonction inverse

lire un fichier texte des fichiers à mettre en xref, en remplacement de ceux existant en fonction de leeur indice de révision (Non testée encore. Chaque étape, l'une aprés l'autre!)

 

Daniel

 

(Je me met à lire les différents tutoriels en ma possession mais les débuts

sont lents ! De la persévérence devra être nécessaire !)

Posté(e)

Salut,

 

Voici donc le même code avec l'ajout pour avoir le nom du DWG mis en xref (avec son chemin)

J'ai mis l'écriture dans le fichier en REM par ";" et remplacé par un (print) pour faire le test et avoir le retour d'info à l'écran.

;début
(defun c:getxref ()
(vl-load-com)
(setq activedocument (vla-get-activedocument (vlax-get-Acad-Object)))
(setq theblocks (vla-get-blocks activedocument))
(setq theList '())
[i]
;	(setq filexref (open "C:\\temp\\listexref.txt" "w"))
[/i]
(vlax-for item theblocks
	(setq yesxref (vlax-get-property item 'isXref))
	(if (= yesxref :vlax-true)
		(progn
			(setq ablock (vlax-get-property item 'Name))
			(setq prxref ablock)
[color=red]
(setq nam_dwg_xref (cdr (assoc 1 (tblsearch "BLOCK" prxref))))
(print nam_dwg_xref)
[/color]
[i]
;				(write-line prxref filexref)
[/i]
			(setq theList (append (list ablock) theList))
		)
	)
)
[i]
;	(close filexref)
[/i]
)
;fin

 

Donc en rouge ce que j'ai rajouté et en italique ce qui a été mis en remarque (pour les besoins du test)

Bruno V.

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Posté(e)

Bonsoir,

Merci à Patrick_35 et Bruno V. pour leur aide.

Le programme lisp qui suit met bien le chemin et le noms du fichier

des xrefs contenus dans le dessin courant, dans un fichier texte

nommé listexref

 

 ;début
(defun c:getxref (/ ablock_path)
(vl-load-com)
(setq activedocument (vla-get-activedocument (vlax-get-Acad-Object)))
(setq theblocks (vla-get-blocks activedocument))
(setq theList '())
(setq filexref (open "C:\\Program Files\\cache\\listexref.txt" "w"))
(vlax-for item theblocks
(setq yesxref (vlax-get-property item 'isXref))
(if (= yesxref :vlax-true)
(progn
(setq ablock (vlax-get-property item 'Name))
(setq ablock_path (findfile (vlax-get-property ITEM 'PATH)))
(setq prxref ablock_path)
;(setq nam_dwg_xref (cdr (assoc 1 (tblsearch "BLOCK" prxref))))
;(print nam_dwg_xref)
(write-line prxref filexref)
(setq theList (append (list ablock) theList))
)
)
)
(close filexref)
)

 

Si fichier n'existe pas, il est créé.

 

Pour poursuivre un peut plus loin dans la démarche,

il se peut que les xrefs soient en chemin relatif(, sans le chemin !)

Dans ce cas là une erreure surviens.

 

; erreur: type d'argument incorrect: stringp nil

 

Quelle en est l'origine ?

 

Merci pour vos remarques et commentaires éventuels !

 

Daniel

:yltype:

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é