Aller au contenu

lisp extraction coordonnées polyligne


metacilla

Messages recommandés

Bonjour à tous,

 

j'ai pas mal cherché sur la toile , mais malheureusement je n'ai pas trouvé mon bonheur....

 

qqun aurait-il sous la main un lisp avec lequel on pourrait extraire les coordonnées de départ, fin et noeud d'une polyligne tout en précisant son calque?

 

D'avance merci

Thomas

Lien vers le commentaire
Partager sur d’autres sites

j'en ai bien trouvé quelques un, mais pas qui correspondent à mon besoin...

 

j'ai plusieurs centaines de fichier à scanner via scrit + lisp

 

le script m'ouvrira les fichiers que je lui demanderais, le lisp lui devra m'extraire les coordonnées de début , noeuds et fin de LA polyligne qui est dans tel claque (le même pour chaque dessin) de chacun des fichiers. sachant bien sure que les fichier sont tous sur une présentation, et que la fameuse polyligne elle se trouve en Objet!! :D

 

Sinon ca serait trop simple!! :D

 

Thomas

Lien vers le commentaire
Partager sur d’autres sites

Coucou

 

Et ces données devront-elles se trouver dans un fichier unique avec une ligne par fichier ou autant de fichier que des fichiers AutoCAD ?

Je ne suis pas dans mon domaine de compétence pour le script par contre je pense pouvoir faire quelque chose pour le lisp

 

Amicalement

Lien vers le commentaire
Partager sur d’autres sites

Alors si on a le choix, le top se serait que tout se trouve dans un seul et même fichier!!:D avec une ligne par fichier bien sure.

 

pour le reste j'ai pas bien compris le déposer un fichier tu veux (je me permet de te tutoyer....) que je te fournisse un de me fichier type?

 

 

sinon le calque s'appel:

 

_JCD_Rsx_ERDF

 

Sinon dans mes souvenirs, il existait un programme qui fonctionnait avec ou "sous" Autocad dans lequel on pouvait "insérer" des lisp et lui dire de le faire fonctionner sur tel ou tel fichier Autocad sans avoir besoin des les ouvrir!? ca dit qqch à qqun?

 

 

mille merci d'avance

Thomas

Lien vers le commentaire
Partager sur d’autres sites

Salut à tous.

Sinon dans mes souvenirs, il existait un programme qui fonctionnait avec ou "sous" Autocad dans lequel on pouvait "insérer" des lisp et lui dire de le faire fonctionner sur tel ou tel fichier Autocad sans avoir besoin des les ouvrir!? ca dit qqch à qqun?

 

Je pense que tu parles de SuperAutoScript, qui ouvre successivement plusieurs DWG dans AutoCAD et qui , un fichier après l'autre, lance, soit un (des) scripte(s), soit un (des) Lisp... Mais il lui faut un AutoCAD.

Alors si on a le choix, le top se serait que tout se trouve dans un seul et même fichier!!:D avec une ligne par fichier bien sure.

 

Une ligne par fichier ? Donc, toute une suite de coordonnées les unes après les autres sur une seule ligne pour un fichier ?

 

Combien y-a-t'il de polyligne par fichier ?

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Lien vers le commentaire
Partager sur d’autres sites

Effectivement c'est ca!! super Auto Script! merci

 

Du coup dans le meilleur des mondes,

1 ligne par fichier,

1er colonne nom du fichier, 2eime X premier point, 3eime Y 1 er point, 4eime X 2eime point etc etc...

 

y a surement plein de polyligne, mais normalement sauf erreur de ma part, 1 seul dans le fameux calque _JCD_Rsx_ERDF

Lien vers le commentaire
Partager sur d’autres sites

Effectivement c'est ca!! super Auto Script! merci

 

Du coup dans le meilleur des mondes,

1 ligne par fichier,

1er colonne nom du fichier, 2eime X premier point, 3eime Y 1 er point, 4eime X 2eime point etc etc...

 

y a surement plein de polyligne, mais normalement sauf erreur de ma part, 1 seul dans le fameux calque _JCD_Rsx_ERDF

 

Tu peux tenter ce qui suit:

Ouvrir un nouveau dessin vierge (tes fichier à traiter doivent êtres tous fermés)

Tu copie-colle ce qui suit directement en ligne de commande

((lambda ( / prefix file_scr tmp_file)
 (setq
   prefix (strcat (vl-filename-directory (getfiled "Sélectionner un fichier dessin TEMOIN" "" "dwg" 16)) "\\")
   file_scr (open (strcat prefix "traiter_dossier.scr") "w")
   tmp_file (strcat (vl-list->string (subst 47 92 (vl-string->list prefix))) "tmp.csv")
 )
 (foreach dwg (vl-directory-files prefix "*.dwg" 1)
   (write-line "_.open" file_scr)
   (write-line (strcat "\"" prefix dwg "\"") file_scr)
;;
;;debut partie personnalisable
;;
(write-line "((lambda ( / js n lay l_coor tmp drawing f_open)" file_scr)
(write-line "(setq js (ssget \"_X\" '((0 . \"LWPOLYLINE\") (8 . \"_JCD_Rsx_ERDF\") (410 . \"Model\"))))" file_scr)
(write-line "(cond" file_scr)
(write-line "(js" file_scr)
(write-line "(repeat (setq n (sslength js))" file_scr)
(write-line "(setq" file_scr)
(write-line "lay (vlax-get (setq obj (vlax-ename->vla-object (ssname js (setq n (1- n))))) 'Layer)" file_scr)
(write-line "l_coor (vlax-get obj 'Coordinates)" file_scr)
(write-line (strcat "tmp \"" tmp_file "\"") file_scr)
(write-line (strcat "drawing \"" dwg "\"") file_scr)
(write-line "f_open (open tmp \"a\")" file_scr)
(write-line ")" file_scr)
(write-line "(write-line (strcat drawing \";\" lay \";\" (apply 'strcat (mapcar '(lambda (x) (strcat (rtos x 2 3) \";\")) l_coor))) f_open)" file_scr)
(write-line "(close f_open)" file_scr)
(write-line ")" file_scr)
(write-line ")" file_scr)
(write-line ")" file_scr)
(write-line "))" file_scr)
;;
;;fin partie personnalisable
;;
   (write-line "_.close" file_scr)
   (write-line "_yes" file_scr)
 )
 (close file_scr)
 (princ (strcat "\Vous pouvez lancer le SCRIPT :" prefix "traiter_dossier.scr"))
 (prin1)
))

 

Une boite de dialogue d'ouverture de fichier va s'ouvrir, tu en sélectionne un au hasard dans ton dossier à traiter

ATTENTION tous les DWG du dossier seront traités et pas seulement celui sélectionné. (s'il y a des intrus, les déplacer avant)

 

A la fin du traitement tu auras une indication comme quoi tu peux exécuter le script.

Donc toujours dans le dessin vierge tu vas exécuter la commande SCRIPT et sélectionner le fichier .scr créé.

 

Le script va alors s’exécuter et ouvrir tous tes dessins un par un et placer les données voulues dans un fichier "tmp.csv" qui sera dans le même dossier que le script généré.

 

A toi d'ouvrir ce fichier avec ce que tu désire (bloc-note, libre-office, excel) sachant que le séparateur de champs est le ";"

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

Lien vers le commentaire
Partager sur d’autres sites

Merci Bonus!!:D tu me vends du rèves.

 

Malheureusement ca aurait été trop beau que ca marche du premier coup....

 

alors dans l'ordre la création du script à l'air de bien se passer , je lance le script il ouvre le premier fichier, il me créé le fichier excel les coordonnées sont bonne sur une ligne tout va bien, il referme le fichier autocad, lance la commande _.open et là rien ne se passe.... il ne suit pas, n'ouvre pas le fichier suivant...

 

pour tant le script à l'air bon...

 

ci-dessous un extrait du script généré:

 

_.open

"C:\Users\XXX\Documents\XXX\XXX.XX.00001.dwg"

((lambda ( / js n lay l_coor tmp drawing f_open)

(setq js (ssget "_X" '((0 . "LWPOLYLINE") (8 . "_JCD_Rsx_ERDF") (410 . "Model"))))

(cond

(js

(repeat (setq n (sslength js))

(setq

lay (vlax-get (setq obj (vlax-ename->vla-object (ssname js (setq n (1- n))))) 'Layer)

l_coor (vlax-get obj 'Coordinates)

tmp "C:/Users/XXXX/Documents/XXX/tmp.csv"

drawing "XXX.XX.00001.dwg"

f_open (open tmp "a")

)

(write-line (strcat drawing ";" lay ";" (apply 'strcat (mapcar '(lambda (x) (strcat (rtos x 2 3) ";")) l_coor))) f_open)

(close f_open)

)

)

)

))

_.close

_yes

_.open

"C:\Users\XXX\Documents\XXX\XXX.XX.00002.dwg"

((lambda ( / js n lay l_coor tmp drawing f_open)

(setq js (ssget "_X" '((0 . "LWPOLYLINE") (8 . "_JCD_Rsx_ERDF") (410 . "Model"))))

(cond

(js

(repeat (setq n (sslength js))

(setq

lay (vlax-get (setq obj (vlax-ename->vla-object (ssname js (setq n (1- n))))) 'Layer)

l_coor (vlax-get obj 'Coordinates)

tmp "C:/Users/XXX/Documents/XXX/tmp.csv"

drawing "XXX.XX.00002.dwg"

f_open (open tmp "a")

)

(write-line (strcat drawing ";" lay ";" (apply 'strcat (mapcar '(lambda (x) (strcat (rtos x 2 3) ";")) l_coor))) f_open)

(close f_open)

)

)

)

))

_.close

_yes.

 

 

 

 

 

Thomas

Lien vers le commentaire
Partager sur d’autres sites

Désolé je ne vois pas trop ce qui peut coincer.

 

A part me répéter...

Il ne faudrait pas que par exemple:

"C:\Users\XXX\Documents\XXX\XXX.XX.00002.dwg"

soit déjà ouvert (par toi ou quelqu'un d'autre), car à ce moment là la commande _OPEN va demander une option supplémentaire d'ouverture (ouverture du fichier en lecture seule: oui/non)

 

J'ai mis _CLOSE _yes, c'est peut être une erreur de ma part d'enregistrer les modifications.

Mettre _CLOSE _no serait peut être plus approprié, surtout que le dessin n'a subit aucun modification. Mais je pense pas que ce soit la raison du problème.

 

Par acquis de conscience, j'ai vérifié que cela fonctionne avec le calque inactif, gelé et verrouillé, mais pas de souci (ssget "_x") fonctionne: la sélection se fait.

 

J'ai pas d'autre éléments à apporter.

 

Testé sous une 2014, qu'elle version a tu?

Je passe la main.

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

Lien vers le commentaire
Partager sur d’autres sites

dans les lignes de commande j'ai ca.

 

Commande:

Commande:

Commande: SCRIPT

Commande: _.open

Commande:

 

rien d'autre pourtant le fichier se ferme bien..

 

serait-il possible d'avoir un "Générique" à insérer dans super auto script?

 

 

((lambda ( / js n lay l_coor tmp drawing f_open)

(setq js (ssget "_X" '((0 . "LWPOLYLINE") (8 . "_JCD_Rsx_ERDF") (410 . "Model"))))

(cond

(js

(repeat (setq n (sslength js))

(setq

lay (vlax-get (setq obj (vlax-ename->vla-object (ssname js (setq n (1- n))))) 'Layer)

l_coor (vlax-get obj 'Coordinates)

tmp "C:/Users/XXXX/Documents/XXX/tmp.csv"

drawing "NOM DU FICHIER OUVERT"

f_open (open tmp "a")

)

(write-line (strcat drawing ";" lay ";" (apply 'strcat (mapcar '(lambda (x) (strcat (rtos x 2 3) ";")) l_coor))) f_open)

(close f_open)

)

)

)

))

_.close

_no

 

 

Il est surement truffé d'erreur... mais c'est une idée, est ce possible?

Lien vers le commentaire
Partager sur d’autres sites

Donc je revient par dessusmon précédent mail,

 

j'ai reussi sur 1 fichier via SAS

 

il me manque la"commande" nom du fichier ouvert.

 

((lambda ( / js n lay l_coor tmp drawing f_open)

(setq js (ssget "_X" '((0 . "LWPOLYLINE") (8 . "_JCD_Rsx_ERDF") (410 . "Model"))))

(cond

(js

(repeat (setq n (sslength js))

(setq

lay (vlax-get (setq obj (vlax-ename->vla-object (ssname js (setq n (1- n))))) 'Layer)

l_coor (vlax-get obj 'Coordinates)

tmp "C:/Users/XXX/Documents/XXX/tmp.csv"

drawing "NOM DU FICHIER OUVERT"

f_open (open tmp "a")

)

(write-line (strcat drawing ";" lay ";" (apply 'strcat (mapcar '(lambda (x) (strcat (rtos x 2 3) ";")) l_coor))) f_open)

(close f_open)

)

)

)

))

Lien vers le commentaire
Partager sur d’autres sites

Une autre suggestion, utiliser ACCORECONSOLE.EXE (faire une recherche sur le site (gile) en a parlé)

 

Accoreconsole ne supportant pas les fonction (vlax), il faut réajuster

 

Dans par exemple un fichier test.bat, ceci:

echo off
:: Chemin de la console AutoCAD (à modifier suivant la version utilisée)
set accoreexe="C:\Program Files\Autodesk\Autodesk AutoCAD Map 3D 2014\accoreconsole.exe"
:: Chemin du répertoire contentant les fichiers à traiter (à modifier)
set source="C:\Users\XXX\Documents\XXX"
:: Chemin du script à exécuter (à modifier)
set script="C:\Users\XXX\Documents\XXX\test.scr"
FOR /f "delims=" %%f IN ('dir /b "%source%\*.dwg"') DO %accoreexe% /i "%source%\%%f" /s %script%
:: Mettre en commentaire pour fermer automatiquement la console à la fin du traitement
pause

et un fichier test.scr, avec ceci:

 

((lambda ( / js n ent lay l_coor tmp drawing f_open)
(setq js (ssget "_X" '((0 . "LWPOLYLINE") (410 . "Model"))))
(cond
	(js
		(repeat (setq n (sslength js))
			(setq
				ent (ssname js (setq n (1- n)))
				lay (cdr (assoc 8 (entget ent)))
				l_coor (apply 'append (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 10)) (entget ent))))
				tmp "C:/Users/XXX/Documents/XXX/tmp.csv"
				drawing (getvar "DWGNAME")
				f_open (open tmp "a")
			)
			(write-line (strcat drawing ";" lay ";" (apply 'strcat (mapcar '(lambda (x) (strcat (rtos x 2 3) ";")) l_coor))) f_open)
			(close f_open)
		)
	)
)
))


 

Avantage: n'utilise pas l'interface graphique d'autocad, donc plus rapide, autocad n'a même pas besoin d'être lancé.

A tester et à ajuster selon nécessité.

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

Lien vers le commentaire
Partager sur d’autres sites

Bonjour et merci pour votre aide,

 

j'ai testé ACCORECONSOLE.EXE malheureusement j'ai pas réussi à m'en servir...

 

bon mais dans les bonne nouvelle c'est bon ca marche!! :D

 

j'ai donc fini par utilisé SuperAutoScript,

 

((lambda ( / js n lay l_coor tmp drawing f_open)
(setq js (ssget "_X" '((0 . "LWPOLYLINE") (8 . "_JCD_Rsx_ERDF") (410 . "Model"))))
(cond
(js
(repeat (setq n (sslength js))
(setq
lay (vlax-get (setq obj (vlax-ename->vla-object (ssname js (setq n (1- n))))) 'Layer)
l_coor (vlax-get obj 'Coordinates)
tmp "C:/Users/XXX/Documents/XXX/tmp.csv"
drawing (getvar "DWGNAME")
f_open (open tmp "a")
)
(write-line (strcat drawing ";" lay ";" (apply 'strcat (mapcar '(lambda (x) (strcat (rtos x 2 3) ";")) l_coor))) f_open)
(close f_open)
)
)
)
))

 

 

pour mes 1200 Fichiers ca à pris environ 30 minutes, sur des fichiers qui sont léger.... 1Mo de moyenne tous purgé contrôlé...

 

Encore merci à tous.

 

Thomas

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é