
vincent32050
Membres-
Compteur de contenus
11 -
Inscription
-
Dernière visite
Contact Methods
-
Website URL
http://
vincent32050's Achievements
Newbie (1/14)
0
Réputation sur la communauté
-
Bonjour, Bon j'ai cherché un petit peu et je pense que le probléme vient de la : (progn (setq col 72 att nil) (while (setq val (lecture (strcat (chr col) (itoa ligne)))) setq att (cons val att) col (1+ col) ) ) Lorsqu'il arrive à la colone Z le code ASCII et 90 mais aprés il cherche le code ascii 91 ki ne correspond plus à une colonne mais à "[" je ne vois pas trop comment faire faut t'il faire un test et une conversion je ne sait pas à l'aide merci !
-
Il à répondu oui et non parce que j'ai fait plusieurs essais et mes cellules ne sont pas vide dés que je dépasse ATT18 cela ne fonctionne plus !
-
Bonjours et encore merci pour tout les lisp disponibles J'ai remarqué le même probléme que Kahel_1 dans le IXL lorsque les bloc possédent plus de 18 attributs il génére une erreur, je ne comprend pas pourquoi ! si quelqu'un pouvait solutionner se probléme . Merci bonne journée à tous
-
Bonjour j’ai un petit soucis avec le programme qui permet d’extraire des blocs avec leur attribut sur une feuille excel et avec l’autre programme qui permet d’envoyer des informations vers autocad. J’ai définit les library suivante dans excel : - Visual Basic For Applications - Microsoft Excel 11.0 Object Library - OLE Automation - Microsoft Office 11.0 Object Library - AutoCAD 2009 Type Library Et j’ai l’erreur suivante dans le premier programme (envoyerVersAutocad) : Erreur d’exécution ‘-2145386484(8020000c)’ Identificateur inconnu Avec un arret sur la ligne que j’ai mis en rouge Et l’erreur de l’autre programme (ExtraireAttributs) : Erreur d’exécution ‘424’ Objet requis Avec un arret sur la ligne que j’ai mis en rouge Merci de votre aide je ne vois pas de solution ! Dim DrawingFile As String Sub EnvoyerVersAutoCAD() Dim AcadApp As AutoCAD.AcadApplication Dim BlocRef As AcadBlockReference Dim Row, i, Column As Integer ' On lance AutoCAD Set AcadApp = New AutoCAD.AcadApplication AcadApp.Visible = True ' On ouvre le fichier dans AutoCAD AcadApp.Documents.Open (Cells(1, 1).Text) Row = 4 ' On commence à la rangée N°4 While Not IsEmpty(Cells(Row, 8)) ' On s'arrête quand on tombe sur une cellule handle vide ' On retrouve l'insertion de bloc à l'aide du handle mémorisé dans la feuille de calcul et de la ' méthode HandleToObject de l'objet document AutoCAD [surligneur] Set BlocRef = AcadApp.ActiveDocument.HandleToObject(Cells(Row, 1))[/surligneur] ' Si le bloc a des attributs... If BlocRef.HasAttributes Then ' ... on les récupère Attributes = BlocRef.GetAttributes ' On parcourt le tableau For i = LBound(Attributes) To UBound(Attributes) ' Pour chaque attribut, on cherche une colonne dont l'entête correspond à l'étiquette ' de l'attribut Column = 8 While Not IsEmpty(Cells(2, Column)) If Cells(2, Column).Text = Attributes(i).TagString Then Attributes(i).TextString = Cells(Row, Column).Text End If Column = Column + 1 ' On passe à la colonne suivante Wend Next BlocRef.Update End If Row = Row + 1 ' On passe à la ligne suivante Wend 'AcadApp.ActiveDocument.Regen(acActiveViewport) ' On ferme AutoCAD AcadApp.Quit MsgBox "Les données ont été transférées vers AutoCAD avec succès." End Sub Public Sub ExtraireAttributs() Dim AcadApp As AutoCAD.AcadApplication Dim SelSet As AutoCAD.AcadSelectionSet Dim FilterType(0) As Integer Dim FilterData(0) As Variant Dim FiltersType, FiltersData As Variant Dim i, Row, j, Column As Integer Dim Entity As AcadEntity Dim BlocRef As AcadBlockReference Dim Attributes As Variant Dim ColumnExist As Boolean ' Efface toutes les données contenues dans la feuille Range("1:65536").ClearContents ' On lance AutoCAD Set AcadApp = New AutoCAD.AcadApplication ' On remets Excel au premier plan (le lancement d'AutoCAD désactive la fenêtre Excel) Application.Visible = True ' On demande le nom du fichier à ouvrir Cells(1, 1).Value = Application.GetOpenFilename("Dessins AutoCAD (*.dwg), *.dwg") ' Remplissage de l'entête du tableau Cells(3, 1).Value = "Nom du bloc" Cells(3, 2).Value = "Handle" ' On ouvre le fichier dans AutoCAD AcadApp.Documents.Open (Cells(1, 1).Text) Row = 4 ' 1ère ligne du tableau ' On crée un jeu de sélection Set SelSet = AcadApp.ActiveDocument.SelectionSets.Add("SELSET") ' On prépare un filtre de sélection sur les insertions de bloc FilterType(0) = 0 FilterData(0) = "INSERT" FiltersType = FilterType FiltersData = FilterData ' Sélection des entités SelSet.Select acSelectionSetAll, , , FiltersType, FiltersData ' On balaye le jeu de sélection [surligneur] For i = 0 To ThisDrawing.ModelSpace.Count - 1 Set Entity = ThisDrawing.ModelSpace.Item(i)[/surligneur] ' Si l'objet est une insertion de bloc If Entity.ObjectName = "AcDbBlockReference" Then ' On précise le type de l'objet pour pouvoir accéder à ses propriétés et ' ses méthodes spécifiques Set BlocRef = Entity ' Si il a des attributs If BlocRef.HasAttributes Then Cells(Row, 1).Value = BlocRef.Name Cells(Row, 2).Value = BlocRef.Handle ' On les récupére Attributes = BlocRef.GetAttributes ' On parcourt le tableau For j = LBound(Attributes) To UBound(Attributes) ' On recherche si une colonne existe déjà pour cette étiquette d'attribut Column = 3 ColumnExist = False While Not IsEmpty(Cells(3, Column)) If Cells(3, Column).Text = Attributes(j).TagString Then ' Une colonne existe, on la remplit avec la valeur de l'atribut Cells(Row, Column).Value = Attributes(j).TextString ColumnExist = True End If Column = Column + 1 ' On passe à la colonne suivante Wend If Not ColumnExist Then ' Aucune colonne n'existe, on en crée une et on la remplit Cells(3, Column).Value = Attributes(j).TagString Cells(Row, Column).Value = Attributes(j).TextString End If Next ' Attribut suivant Row = Row + 1 ' Ligne suivante End If End If Next ' On ferme AutoCAD AcadApp.Quit MsgBox "Les attributs du dessin " & Cells(1, 1).Text & " ont été extraits avec succès." End Sub
-
Probléme programme d\'incrémentation
vincent32050 a répondu à un(e) sujet de vincent32050 dans Routines LISP
En créent mes boutons j'ai vu que l'on pouvais créer des menu déroulant comme pour afficher les calques par exemble, comment est ce que je peux afficher ma variable dans un menu déroulant ? comme lorsque que l'on et dans les commandes d'autocad et qu'avec la fléche du haut on peu récupérer les derniére valeur de la variable ? -
Probléme programme d\'incrémentation
vincent32050 a répondu à un(e) sujet de vincent32050 dans Routines LISP
Merci beaucoup ca marche trés bien je n'est plus qu'a créer mes boutons et mon programme sera fin pret, une derniére petite question je sait pas si c'est possible je voudrais afficher la valeur en cour de la variable au pret de mon bouton : Par exemple pour num afficher num suivit de la derniére valeur rentré ! -
Probléme programme d\'incrémentation
vincent32050 a répondu à un(e) sujet de vincent32050 dans Routines LISP
Encore merci pour ton aide Gile Voila je suis toujours bloqué mais je suis perdu sur la definition des variables ou dois je définir mes variables dans (defun c:action ...) ou dans chaque fonction (num, numcf ...) Quand j'exécute le programme suivant il bloque sur le choix du coffret numcf ! n'importe quelle valeur que je rentre il me redemande, enfin j'utilise bien visual LISP donc je ne pense pas avoir d'erreur de paranthése ;========================================================================= ; ; Incrémentation Vincent ; ; (C) 2008 ;========================================================================= (defun c:action(/ oldcmd cmdecho dev der nbr inc ent ntxt tew num numcf numde numdi typed typef ) ;------------------------------------------------------------------------- ; Action ;------------------------------------------------------------------------- (setq ent 1) (setq cont 1) (setq inc 1) (setq ntxt "") (setq der "") (setq dev "") (setq nbr 1) (setq tew 10) (vlax-ldata-get "increment" "num") (vlax-ldata-get "increment" "numcf") (vlax-ldata-get "increment" "numde") (vlax-ldata-get "increment" "numdi") (vlax-ldata-get "increment" "typed") (vlax-ldata-get "increment" "typef") (while (not (setq num (vlax-ldata-get "Increment" "num"))) (c:num) ) (while (not (setq numcf (vlax-ldata-get "Increment" "numcf"))) (c:numcf) ) (while (not (setq numde (vlax-ldata-get "Increment" "numde"))) (c:numde) ) (while (not (setq numdi (vlax-ldata-get "Increment" "numdi"))) (c:numdi) ) (while (not (setq typed (vlax-ldata-get "Increment" "typed"))) (c:typed) ) (while (not (setq typef (vlax-ldata-get "Increment" "typef"))) (c:typef) ) (setq dev (strcat typed "." (itoa numdi) "." numcf "." (itoa numde) "." )) (setq ent 1) (setq der (strcat typef)) (setq num (- num inc)) ; **pour partir du numero de depart (while ent (setq ent (nentsel "\nSelectionner le texte ou l'attribut a incrementer : ")) (if ent ;**si il y a selection d'une entite (progn (setq ent (car ent)) ;**nom de l'entite a modifiee (setq ent (entget ent)) (if (and (/= (cdr (assoc 0 ent)) "TEXT") (/= (cdr (assoc 0 ent)) "ATTRIB")) (alert "ERREUR : Mauvaise selection.") (progn (if (= num 9) (setq ntxt (strcat dev (itoa (+ num inc ))"." der)) ) (if (> num 9) (setq ntxt (strcat dev (itoa (+ num inc ))"." der)) ) (if (< num 9) (setq ntxt (strcat dev "0" (itoa (+ num inc ))"." der)) ) ) ) (setq ent (subst (cons 1 ntxt) (assoc 1 ent) ent)) (entmod ent);**regenere la base de donnee (entupd (cdar ent));**regenere les attributs a l'ecran (setq num (+ num inc)) (setq cont 1) (setq ntxt "") ) ) ) ) ;------------------------------------------------------------------------- ; Ajouter Premier numéro ;------------------------------------------------------------------------- (defun c:num (/ num) (and (setq num (getint "\nPremier numéro (par defaut 1) :")) (vlax-ldata-put "increment" "num" num) ) (princ) ) ;------------------------------------------------------------------------- ; Ajouter Numéro du coffret ;------------------------------------------------------------------------- (defun c:numcf (/ numcf) (and (setq numcf (getstring "\Numéro du coffret ** :")) (vlax-ldata-put "increment" "numcf" numcf) ) (princ) ) ;------------------------------------------------------------------------- ; Ajouter Numéro départ coffret ;------------------------------------------------------------------------- (defun c:numde (/ numde) (and (setq numde (getint "\Numéro de départ du coffret :")) (vlax-ldata-put "increment" "numcf" numcf) ) (princ) ) ;------------------------------------------------------------------------- ; Ajouter Numéro division ;------------------------------------------------------------------------- (defun c:numdi (/ numdi) (and (setq numdi (getint "\Numéro de la division :")) (vlax-ldata-put "increment" "numdi" numdi) ) (princ) ) ;------------------------------------------------------------------------- ; Ajouter Catégorie ;------------------------------------------------------------------------- (defun c:typed (/ typed) (and (setq typed (getstring T"\nCatégorie de l'équipement N/S/X :")) (vlax-ldata-put "increment" "typed" typed) ) (princ) ) ;------------------------------------------------------------------------- ; Ajouter Type Equipement ;------------------------------------------------------------------------- (defun c:typef (/ typef) (and (setq typef (getstring T"\nType de l'équipement CR/ES/BQ :")) (vlax-ldata-put "increment" "typef" typef) ) (princ) ) (setq nom_lisp "typef, typed, numdi, numde, numcf, num, increm") (if (/= app nil) (if (= (strcase (substr app (1+ (- (strlen app) (strlen nom_lisp))) (strlen nom_lisp))) nom_lisp) (princ (strcat "..." nom_lisp " chargé.")) (princ (strcat "\n" nom_lisp " Chargé......Faites " nom_lisp " pour exécuter la fonction désirée."))) (princ (strcat "\n" nom_lisp " Chargé......Faites " nom_lisp " pour exécuter la fonction désirée."))) (setq nom_lisp nil) (princ) -
Probléme programme d\'incrémentation
vincent32050 a répondu à un(e) sujet de vincent32050 dans Routines LISP
Merci beaucoup pour les explications mais je suis toujours bloqué voila se que j'ai fait : ;========================================================================= ; ; Incrémentation Vincent ; ; (C) 2008 ;========================================================================= (defun c:action(/ ) ;------------------------------------------------------------------------- ; Action ;------------------------------------------------------------------------- (defun c:increm(/ oldcmd cmdecho dev der nbr inc ent ntxt tew ) (setq ent 1) (setq cont 1) (setq inc 1) (setq ntxt "") (setq der "") (setq dev "") (setq nbr 1) (setq tew 10) (vlax-ldata-get "num" "numcf" "numde" "numedi" "typed" "typef") (setq dev (strcat typed "." (itoa numdi) "." numcf "." (itoa numde) "." )) (setq ent 1) (setq der (strcat typef)) (setq num (- num inc)) ; **pour partir du numero de depart (while ent (setq ent (nentsel "\nSelectionner le texte ou l'attribut a incrementer : ")) (if ent ;**si il y a selection d'une entite (progn (setq ent (car ent)) ;**nom de l'entite a modifiee (setq ent (entget ent)) (if (and (/= (cdr (assoc 0 ent)) "TEXT") (/= (cdr (assoc 0 ent)) "ATTRIB")) (alert "ERREUR : Mauvaise selection.") (progn (if (= num 9) (setq ntxt (strcat dev (itoa (+ num inc ))"." der)) ) (if (> num 9) (setq ntxt (strcat dev (itoa (+ num inc ))"." der)) ) (if (< num 9) (setq ntxt (strcat dev "0" (itoa (+ num inc ))"." der)) ) ) ) (setq ent (subst (cons 1 ntxt) (assoc 1 ent) ent)) (entmod ent);**regenere la base de donnee (entupd (cdar ent));**regenere les attributs a l'ecran (setq num (+ num inc)) (setq cont 1) (setq ntxt "") ) ) ) ) ;------------------------------------------------------------------------- ; Ajouter Premier numéro ;------------------------------------------------------------------------- (defun c:num (/ num) (and (setq num (getint "\nPremier numéro (par defaut 1) :")) (vlax-ldata-put "num" num) ) (princ) ) ;------------------------------------------------------------------------- ; Ajouter Numéro du coffret ;------------------------------------------------------------------------- (defun c:numcf (/ numcf) (and (setq numcf (getstring "\Numéro du coffret ** :")) (vlax-ldata-put "numcf" numcf) ) (princ) ) ;------------------------------------------------------------------------- ; Ajouter Numéro départ coffret ;------------------------------------------------------------------------- (defun c:numde (/ numde) (and (setq numde (getint "\Numéro de départ du coffret :")) (vlax-ldata-put "numcf" numcf) ) (princ) ) ;------------------------------------------------------------------------- ; Ajouter Numéro division ;------------------------------------------------------------------------- (defun c:numdi (/ numdi) (and (setq numdi (getint "\Numéro de la division :")) (vlax-ldata-put "numdi" numdi) ) (princ) ) ;------------------------------------------------------------------------- ; Ajouter Catégorie ;------------------------------------------------------------------------- (defun c:typed (/ typed) (and (setq typed (getstring T"\nCatégorie de l'équipement N/S/X :")) (vlax-ldata-put "typed" typed) ) (princ) ) ;------------------------------------------------------------------------- ; Ajouter Type Equipement ;------------------------------------------------------------------------- (defun c:typef (/ typef) (and (setq typef (getstring T"\nType de l'équipement CR/ES/BQ :")) (vlax-ldata-put "typef" typef) ) (princ) ) ) (setq nom_lisp "typef, typed, numdi, numde, numcf, num, increm") (if (/= app nil) (if (= (strcase (substr app (1+ (- (strlen app) (strlen nom_lisp))) (strlen nom_lisp))) nom_lisp) (princ (strcat "..." nom_lisp " chargé.")) (princ (strcat "\n" nom_lisp " Chargé......Faites " nom_lisp " pour exécuter la fonction désirée."))) (princ (strcat "\n" nom_lisp " Chargé......Faites " nom_lisp " pour exécuter la fonction désirée."))) (setq nom_lisp nil) (princ) Lorsque je lance "increm" il me dit toujours que j'ai une variable nil ('; erreur: type d'argument incorrect: fixnump: nil') -
Lisp associer attributs de plusieurs bloc
vincent32050 a répondu à un(e) sujet de vincent32050 dans Routines LISP
Je relance ma question avec un petit schéma pour expliquer : Voila j'espère avoir été plus clair, merci de votre aide -
Voila je viens de réaliser une programme d'incrémentation d'attribut de blocs qui permet de choisir un prefix, un sufix... mais je suis confronté à un problémes, le programme fonctionne correctement si je rentre tout les paramétre dans un seul programme mais je souhaiterais réaliser un programme pour chaque variable pour ne pas être obliger de rentré toute les variables à chaque fois. Cela me permettré de réaliser un bouton pour chaque variable et un bouton pour exécuter l'ensemble. Voila le programme que j'ai écrit pour le moment (trés inspirer de programme trouver sur le forum) merci de m'aider à le faire fonctionner: ;========================================================================= ; ; Incrémentation Vincent ; ; (C) 2008 ;========================================================================= (defun c:action(/ ) ;------------------------------------------------------------------------- ; Action ;------------------------------------------------------------------------- (defun c:increm(/ typef typed numdi numde numcf num oldcmd cmdecho dev der nbr inc ent ntxt tew ) (setq ent 1) (setq cont 1) (setq inc 1) (setq ntxt "") (setq der "") (setq dev "") (setq nbr 1) (setq tew 10) (setq dev (strcat typed "." (itoa numdi) "." numcf "." (itoa numde) "." )) (setq ent 1) (setq der (strcat typef)) (setq num (- num inc)) ; **pour partir du numero de depart (while ent (setq ent (nentsel "\nSelectionner le texte ou l'attribut a incrementer : ")) (if ent ;**si il y a selection d'une entite (progn (setq ent (car ent)) ;**nom de l'entite a modifiee (setq ent (entget ent)) (if (and (/= (cdr (assoc 0 ent)) "TEXT") (/= (cdr (assoc 0 ent)) "ATTRIB")) (alert "ERREUR : Mauvaise selection.") (progn (if (= num 9) (setq ntxt (strcat dev (itoa (+ num inc ))"." der)) ) (if (> num 9) (setq ntxt (strcat dev (itoa (+ num inc ))"." der)) ) (if (< num 9) (setq ntxt (strcat dev "0" (itoa (+ num inc ))"." der)) ) ) ) (setq ent (subst (cons 1 ntxt) (assoc 1 ent) ent)) (entmod ent);**regenere la base de donnee (entupd (cdar ent));**regenere les attributs a l'ecran (setq num (+ num inc)) (setq cont 1) (setq ntxt "") ) ) ) ) ;==================== (defun c:num(/ num ) ;------------------------------------------------------------------------- ; Ajouter Premier numéro ;------------------------------------------------------------------------- (setq num (getint "\nPremier numéro (par defaut 1) :")) ) ;============== (defun c:numcf(/ numcf ) ;------------------------------------------------------------------------- ; Ajouter Numéro du coffret ;------------------------------------------------------------------------- (setq numcf (getstring "\Numéro du coffret ** :")) ) ;=============== (defun c:numde(/ numde ) ;------------------------------------------------------------------------- ; Ajouter Numéro départ ;------------------------------------------------------------------------- (setq numde (getint "\Numéro de départ du coffret :")) ) ;========================================================================= (defun c:numdi(/ numdi ) ;------------------------------------------------------------------------- ; Ajouter Numéro division ;------------------------------------------------------------------------- (setq numdi (getint "\Numéro de la division :")) ) ;========================================================================= (defun c:typed(/ typed ) ;------------------------------------------------------------------------- ; Ajouter Catégorie ;------------------------------------------------------------------------- (setq typed (getstring T"\nCatégorie de l'équipement N/S/X :")) ) ;========================================================================= (defun c:typef(/ typef ) ;------------------------------------------------------------------------- ; Ajouter Type Equipement ;------------------------------------------------------------------------- (setq typef (getstring T"\nType de l'équipement CR/ES/BQ :")) ) ) (setq nom_lisp "typef, typed, numdi, numde, numcf, num, increm") (if (/= app nil) (if (= (strcase (substr app (1+ (- (strlen app) (strlen nom_lisp))) (strlen nom_lisp))) nom_lisp) (princ (strcat "..." nom_lisp " chargé.")) (princ (strcat "\n" nom_lisp " Chargé......Faites " nom_lisp " pour exécuter la fonction désirée."))) (princ (strcat "\n" nom_lisp " Chargé......Faites " nom_lisp " pour exécuter la fonction désirée."))) (setq nom_lisp nil) (princ)
-
Voila je souhaite réaliser un lisp assez simple à premiére vu mais avec les exemple fournit par Patrick je n'arrive pas à trouver de solution. J'ai un schéma d'implantation d'élément Elec et je souhaite faire une araignée de cablage automatique, je m'explique dans mon implantation les élements sont tous des blocs et je voudrais extraire l'attribut REPERE pour l'asoocier à l'attribut REP-EQUP1 du bloc de l'araigné. Pour résumé le repére de mon équipement permet de savoir où l'élément se situe dans l'araignée mais pour correctement le placé il faut extraire le repére pour le coller dans le bloc araigné. Voila je c'est pas si j'ai été clair, merci de votre aide