Aller au contenu

comurhex

Membres
  • Compteur de contenus

    9
  • Inscription

  • Dernière visite

comurhex's Achievements

Newbie

Newbie (1/14)

0

Réputation sur la communauté

  1. comurhex

    Traceur ...

    Bonjour ...
  2. Bonjour ... Quinze jours plus tard ... beaucoup de visite ... pas de réponse !!! Plus d'une matinée de recherche sur ce forum et, à prioris, pas de réponse adaptée à mon besoin ... "Il vaut mieux un qui sait que cent qui cherchent" Ma problématique: Changement de traceur (location)-> changement de dénomination de celui-ci (politique société) Bibliothéque d'environ 6000 plans. Tous ces plans sont "construits" de la même manière (ou presque). un onglet "objet" -> mise à jour "automatique" de l'imprimante et du format par defaut, donc pas de problème. un onglet (ou plus) de "présentation" dont le nom correspond au format à imprimer !!! la Commande: (layoutlist) pouvant me renvoyer en general un des "nom d'onglet" suivant -> ("A0" "A1" "A2" "A3" "Cartouche") Questions : comment mettre à jour "automatiquement" et en fonction du "nom d'onglet" chacun de ceux-ci ??? (via éventuellement superautoscript) Par avance Merci PS: Je ne demande pas forcement quelque chose de "tout cuit" mais je ne suis pas expert en lisp ou autres je n'ai fait à ce jour que des choses très "basique" et plutôt sous forme de script pour paramétrer mes onglets ... (command "Presentation" "Nouv" "A2") (command "traceur" "Oui" "A2" "Traceur_DAO.pc3" "A2 (420x594 mm) (Landscape)" "Millimètres" "pAysage" "Oui" "Presentation" "1:1" "0,0" "Oui" "Traceur_DAO Mono.ctb" "Oui" "Oui" "Non" "Non" "Non" "Oui" "Non") (command "Presentation" "Nouv" "A1") (command "traceur" "Oui" "A1" "Traceur_DAO.pc3" "A1 (594x841 mm) (Landscape)" "Millimètres" "pAysage" "Oui" "Presentation" "1:1" "0,0" "Oui" "Traceur_DAO Mono.ctb" "Oui" "Oui" "Non" "Non" "Non" "Oui" "Non") (command "Presentation" "Nouv" "A0") (command "traceur" "Oui" "A0" "Traceur_DAO.pc3" "A0 (841x1189 mm)" "Millimètres" "pAysage" "Oui" "Presentation" "1:1" "0,0" "Oui" "Traceur_DAO Mono.ctb" "Oui" "Oui" "Non" "Non" "Non" "Oui" "Non") (command "Presentation" "Etablir" "A0") PS Bis : J'ai trouvé des bouts de codes en VBA, mais "je ne suis pas expert non plus" ... Il m'en manque un bout ... une boucle sur les éléments contenu dans "LayoutList" me permettant d'affecter la bonne imprimante au bon onglet ... Public Sub MAJ_Param_Onglets_Cartouche() Dim Layouts As AcadLayouts Dim Layout As AcadLayout Dim LayoutName As String Set Layouts = ThisDrawing.Layouts LayoutName = vbCrLf & vbCrLf For Each Layout In Layouts LayoutName = LayoutName & Layout.Name & vbCrLf Next If LayoutName = "" Then Exit Sub LayoutName = " éléments dans LayoutList " For Each Layout In ThisDrawing.Layouts If 0 = StrComp(Layout.Name, LayoutName, vbTextCompare) Then Set Layouts = ThisDrawing.Layouts Layouts(" éléments dans LayoutList ").RefreshPlotDeviceInfo ThisDrawing.SendCommand "(command ""_plot"" ... Bla bla bla) " Exit Sub End If Next Layout ThisDrawing.Close , False End Sub
  3. Merci à vous
  4. comurhex

    Lisps de Patrick_35

  5. Bonjour, Je cherche une routine me permettant, à l'ouverture d'un fichier, de récupérer le nom de la présentation active (sachant que parfois il y en à d'autres), de passer sur l'onglet "objet" ... d'y exécuter une routine (exemple insertion d'une Xref pour ce qui me concerne (là je sais faire) ... puis de revenir à la présentation d'origine avant de sauvegarder le plan concerné ... Par avance, Merci Px-Ob-Px.lsp PS : Je suis sous AutoCAD 2005
  6. Voila ma problematique: Après ouverture d'un fichier Autocad (manuellement ou via un script) Je souhaiterais "récupérer" les informations contenu dans un ou plusieurs Blocs (dénommés "cart_1, cart_2, etc...) situé dans un ou plusieurs onglets (Objet, Présentation1 ou Presentation2). Ces blocs (des cartouches donc ...) sont composés d'attibuts (homogénéité des noms des attributs quelque soit le nom du bloc). L'extraction de ces Informations pourrait se faire vers Access ou Excel (peu importe), dans un seul et unique fichier (par exemple: ListeDesPlans.*). Dans la mesure du possible, il y aurait dans ce fichier les noms des fichiers autocad (dwgname) suivi eventuellement du ou des noms des blocs, mais surtout des attributs de ces blocs... Merci par avance Ps: J'ai essayé pas mal de chose de ce forum, mais je n'ai pas trouvé mon bonheur. Je suis débutant en VB. Utilisateur d'Autocad depuis 1991 (V10 sous Unix) :-) Actuellement avec AutoCAD 2005
  7. J’ai trouvé "une" solution … un fichier lisp nommé REPSTRING.LSP Trouvé grace au forum de http://www.cadtutor.net Un Script … [surligneur] _Open X:\...\01apa001.dwg (load "X:/…/FindAndReplace.lsp") FindAndReplace _Qsave _Open X:\...\01apa002.dwg (load "X:/…/FindAndReplace.lsp") FindAndReplace _Qsave[/surligneur] Etc … J’ai créé un lisp pour automatiser les modifications sur ma centaine de plan [surligneur] (defun c:FindAndReplace () (RepString "A.A" "A.P.A") (RepString "AA" "APA") ) ; defun (princ "\n==> FindAndReplace") (princ)[/surligneur] Le lisp proprement dit : [surligneur] (defun repstring (ostring nstring) (setq ss (ssget "X" (list (cons 0 "INSERT,TEXT,MTEXT,RTEXT,DTEXT,DIMENSION")))) (if ss (progn (repeat (sslength ss) (setq ent (ssname ss 0)) (setq en (entget ent)) (setq etype (cdr (Assoc 0 en))) (if (= etype "INSERT") (PROGN (IF (ASSOC 66 EN) (PROGN (SETQ SUB1 (ENTNEXT ENT)) (WHILE (= (CDR (ASSOC 0 (ENTGET SUB1))) "ATTRIB") (SETQ SUBEN (ENTGET SUB1)) (SETQ STG (CDR (aSSOC 1 SUBEN))) (SETQ STG (vl-string-subst NSTRING OSTRING STG)) (ENTMOD (sUBST (cONS 1 STG) (aSSOC 1 SUBEN) SUBEN)) (SETQ SUB1 (eNTNEXT SUB1)) ) (ENTUPD ENT) ) ) ) (PROGN (SETQ STG (CDR (aSSOC 1 EN))) (SETQ STG (vl-string-subst NSTRING OSTRING STG)) (ENTMOD (SUBST (CONS 1 STG) (ASSOC 1 EN) EN)) ) ) (ssdel ent ss) ) ) ) ) (defun c:repstring () (SETQ OSTRING (GETSTRING T "\nSTRING TO BE REPLACED: ")) (SETQ NSTRING (GETSTRING T "\nSTRING TO REPLACE WITH: ")) (REPSTRING OSTRING NSTRING) )[/surligneur] Bien evidemment cela serait certainement plus simple à faire mais ça marche. Un peu plus de 3mn pour traiter une centaine de plan … PS Concernant "Mat.lsp" ... a prioris la commande rechercher d'autocad est au moins tout aussi rapide à utiliser pour le cas qui me concernais. Sauf que je voulais automatiser la routine. [Edité le 8/8/2008 par comurhex]
  8. Explication: J'ai un vulgaire bloc composé de lignes et d'attributs visibles et invisibles. Ces blocs sont insérés et renseignés plusieurs fois dans un dessin et aussi dans plusieurs dessins (qui par conséquent deviennent des "référence de bloc"). Ce que j'ai à modifier : Les "valeur" de 2 de ces attributs dans ces "référence de bloc". Construit donc comme suit ... Attribut visible Etiquette: NO_PLAN Message: xxxxx Valeur: 00.A.A.000.000 Donc la "valeur" 00.A.A.000.000 à remplacé par 00.A.P.A.000.000 ... Attribut invisible Etiquette: NO_PID_SUITE Message: xxxxx Valeur: 00AA000 Donc la "valeur" 00AA000 à remplacé par 00APA00 La commande « FIND » fonctionne très bien … Rechercher : *A.A* Remplacer par : *A.P.A* … Mais ouvre une boite de dialogue nécessitant de traiter les plans un par un. J’avais trouvé ceci … (or *tch:old (setq *tch:old "")) (or *tch:new (setq *tch:new "")) (defun c:tch (/ o n) (setq o (getstring (strcat "Replace: <" *tch:old ">: ") t)) (setq n (getstring (strcat "with: <" *tch:new ">: ") t)) (if (= "" o) (setq o *tch:old) (setq *tch:old o)) (if (= "" n) (setq n *tch:new) (setq *tch:new n)) (ssmap '(lambda (x / old new) (setq old (cdr (assoc 1 (entget x)))) (setq new (vl-string-subst n o old)) (entmod (subst (cons 1 new) (cons 1 old) (entget x)))) (ssget "_X" '((0 . "ACAD_TABLE,INSERT,*TEXT"))))) (defun sslist (ss / n lst) (if (= 'PICKSET (type ss)) (repeat (setq n (sslength ss)) (setq lst (cons (ssname ss (setq n (1- n))) lst))))) (defun ssmap (fct ss) (mapcar fct (sslist ss))) … qui fonctionne très bien sur des textes simple, mais pas sur ma problématique. J’ai bien évidemment testé un certain nombre de routine de « Patrick 35 », mais celles-ci ne répondent pas à ma question. Merci à tous
  9. Voila mon probleme ... Suite à un changement de procedure dans la numerotation de nos plans. J'ai une centaine de PID à modifier au niveau des entrée/sortie de ceux-ci. Ces E/S sont composée de 2 blocs différents (un bloc entrée, un bloc sortie) ... qui sont eux même composés d'attributs dont les valeurs de certains sont à modifié (N°PID et Va/Vers) Comment le faire de maniere automatisée (sans passer par find et sa célebre boite de dialogue) Merci par avance à ceux ou celles qui me repondrons PS: travaillons encore et toujours dans l'urgence ... comme beaucoup PS Bis : je suis sous Autocad 2005 et "limité" dans ma connaissances du Lisp ou autre ;-)[Edité le 6/8/2008 par comurhex] Explication: J'ai un vulgaire bloc composé de lignes et d'attributs visibles et invisibles. Ces blocs sont insérés et renseignés plusieurs fois dans un dessin et aussi dans plusieurs dessins (qui par conséquent deviennent des "référence de bloc"). Ce que j'ai à modifier : Les "valeur" de 2 de ces attributs dans ces "référence de bloc". Construit donc comme suit ... Attribut visible Etiquette: NO_PLAN Message: xxxxx Valeur: 00.A.A.000.000 Donc la "valeur" 00.A.A.000.000 à remplacé par 00.A.P.A.000.000 ... Attribut invisible Etiquette: NO_PID_SUITE Message: xxxxx Valeur: 00AA000 Donc la "valeur" 00AA000 à remplacé par 00APA00 La commande « FIND » fonctionne très bien … Rechercher : *A.A* Remplacer par : *A.P.A* … Mais ouvre une boite de dialogue nécessitant de traiter les plans un par un. J’avais trouvé ceci … (or *tch:old (setq *tch:old "")) (or *tch:new (setq *tch:new "")) (defun c:tch (/ o n) (setq o (getstring (strcat "Replace: <" *tch:old ">: ") t)) (setq n (getstring (strcat "with: <" *tch:new ">: ") t)) (if (= "" o) (setq o *tch:old) (setq *tch:old o)) (if (= "" n) (setq n *tch:new) (setq *tch:new n)) (ssmap '(lambda (x / old new) (setq old (cdr (assoc 1 (entget x)))) (setq new (vl-string-subst n o old)) (entmod (subst (cons 1 new) (cons 1 old) (entget x)))) (ssget "_X" '((0 . "ACAD_TABLE,INSERT,*TEXT"))))) (defun sslist (ss / n lst) (if (= 'PICKSET (type ss)) (repeat (setq n (sslength ss)) (setq lst (cons (ssname ss (setq n (1- n))) lst))))) (defun ssmap (fct ss) (mapcar fct (sslist ss))) … qui fonctionne très bien sur des textes simple, mais pas sur ma problématique. J’ai bien évidemment testé un certain nombre de routine de « Patrick 35 », mais celles-ci ne répondent pas à ma question. Merci à tous [Edité le 7/8/2008 par comurhex]
×
×
  • 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é