juju_30 Posté(e) le 31 août 2010 Posté(e) le 31 août 2010 bonjour, j'ai deja changé le type de ligne d'une entite sans probleme mais aujourd'hui je voudrais l'appliquer à une selection generale. le probleme est que la fenetre de suivi me renvoi le message "erreur automation clé introuvable" lorsque j'arrive sur " 'linetype " voila mon petit programme: (defun c:fp () (setq x (ssget "x" (list (cons 8 "fauxplafond") (cons 62 1)))) (setq cntr 0) (while (< cntr (sslength x)) (setq en (ssname x cntr)) (setq vlaentité1 (vlax-ename->vla-object en)) (setq check (vlax-property-available-p vlaentité1 "Color" T)) (vlax-put-property vlaentité1 'linetype "cache") ) ) si quelqu'un pouvait m'aider et me dire de quoi il s'agit lorsque se message s'affiche je lui serais reconnaissant. Merci
Patrick_35 Posté(e) le 31 août 2010 Posté(e) le 31 août 2010 Salut Dans ta sélection générale, tu choisis tout ce qui se trouve sur le calque fauxplafond et de couleur rouge.Tu as donc sûrement un objet dans la sélection qui n'a pas la propriété 'linetype Pour tester si un objet posséde cette propriété, utilise correctement la fonction vlax-property-available-p ou pour éviter cette vérification, tu peux ajouter dans ton filtre la sélection des lignes Je remarque aussi que tu mélange autolisp et vlisp.Fais soit l'un ou l'autre. Ce sera plus simple. De plus, cette ligne est inutile.(setq check (vlax-property-available-p vlaentité1 "Color" T)) Et je remarque aussi dans ton lisp, que tu as une boucle infini. @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
bseb67 Posté(e) le 31 août 2010 Posté(e) le 31 août 2010 Salut, Euh... pourquoi testes-tu "color" si tu veux changer linetype ? Le type de ligne "cache" existe-t-il bien dans ton dessin ? Ensuite tu peux réduire ton lisp et le corriger (defun c:fp () (setq x (ssget "x" (list (cons 8 "fauxplafond") (cons 62 1))) cntr 0 lg (sslength x) ) (while (< cntr lg) (setq vlaentité1 (vlax-ename->vla-object (ssname x cntr)) check (vlax-property-available-p vlaentité1 "Color" T) ) (vlax-put-property vlaentité1 'linetype "cache") ) (setq cntr (1+ cntr)) ) edit: patrick_35 est passé devant [Edité le 31/8/2010 par bseb67] Tous pour lisp, Lisp pour tous!Avec Revit, cela ne vas trop vite...
juju_30 Posté(e) le 31 août 2010 Auteur Posté(e) le 31 août 2010 - la ligne (setq check (vlax-property-available-p vlaentité1 "Color" T))est un oubli de ma part (DSL)- pour ce qui est du type de ligne "cache" il n'était pas chargé dans le dessin où je testais mon prog merci pour votre aide par contre ci vous pouviez m'eclaircir sur le fait d'utiliser autolisp ou vlisp car pour moi le vlisp permettait de modifier des objets autocad justement grace à vlisp (en utilisant VLAX...) ???
Patrick_35 Posté(e) le 31 août 2010 Posté(e) le 31 août 2010 Salut Tu utilises une boucle (while (< cntr lg) puis une convertion (vlax-ename->vla-object (ssname x cntr)) en objet vla Tu peux simplifier en utilisant directement une bloucle en vla Un exemple en vlisp(defun c:fp (/ doc ent sel) (vl-load-com) (setq doc (vla-get-activedocument (vlax-get-acad-object))) (vla-startundomark doc) (and (tblsearch "ltype" "cache") (ssget "x" (list (cons 8 "fauxplafond") (cons 62 1))) (progn (vlax-for ent (setq sel (vla-get-activeselectionset doc)) (vla-put-linetype ent "cache") ) (vla-delete sel) ) ) (vla-endundomark doc) (princ) ) Le même en autolisp(defun c:fp (/ ent js n) (command "_.undo" "_begin") (and (tblsearch "ltype" "cache") (setq js (ssget "x" (list (cons 8 "fauxplafond") (cons 62 1)))) (progn (setq n 0) (while (setq ent (ssname js n)) (setq ent (entget ent)) (if (assoc 6 ent) (setq ent (subst (cons 6 "CACHE") (assoc 6 ent) ent)) (setq ent (cons (cons 6 "CACHE") ent)) ) (entmod ent) (setq n (1+ n)) ) ) ) (command "_.undo" "_end") (princ) ) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
RhymOne Posté(e) le 3 septembre 2010 Posté(e) le 3 septembre 2010 Bonjour,Pour ma part j'utilise un lisp.Au préalable crée un fichier .txt du type:"ancien type de ligne" "nouveau type de ligne"ex:"continous" "zebré"Puis utilise ce lisp:;;; Command : (load "newlt") ;;; Command : newlt ;;; ;; ;; Fonction Cree_liste_typlig : création d'une liste de correspondance ;; à partir du fichier de données ;; (defun Cree_liste_typlig ( fd / listtyplig ligne couple ch ) (setq listtyplig nil) (setq ligne (read-line fd) ) (while ligne (setq ch (strcase (strcat "(" ligne ")" ) )) (setq couple (read ch) ) (setq listtyplig (cons couple listtyplig) ) (setq ligne (read-line fd) ) ) (print listtyplig) (setq listtyplig (reverse listtyplig) ) ) ;; ;; Fonction Charge_typlig : chargement des nouveaux types de lignes ;; non disponibles dans le dessin ;; (defun Charge_typlig ( listtyplig / suite couple nouv_typlig ) (setq suite listtyplig) (while suite (setq couple (car suite)) (setq suite (cdr suite)) (setq nouv_typlig (cadr couple)) (if (not (tblsearch "LTYPE" nouv_typlig)) (command "._LINETYPE" "_LOAD" nouv_typlig "acad" "") ) ) ) ;; ;; Fonction typlig_corres : renvoie le nouveau type de ligne en ;; fonction de la liste de correspondance établie ;; (defun typlig_corres (anc_typlig listtyplig / nouv_typlig exist ) (setq exist (assoc (strcase anc_typlig) listtyplig) ) (if exist (setq nouv_typlig (cadr exist) ) (setq nouv_typlig nil) ) ) ;; ;; Fonction ch_typlig_layer : change le type de ligne par defaut ;; des définition de calques selon la correspondance des types de lignes ;; (defun ch_typlig_layer (listtyplig / layinfo layer anc_typlig nouv_typlig ) (setq layinfo (tblnext "LAYER" T) ) (while layinfo (setq anc_typlig (cdr (assoc 6 layinfo) ) ) (setq nouv_typlig (typlig_corres anc_typlig listtyplig) ) (if nouv_typlig (progn (setq layer (cdr (assoc 2 layinfo) ) ) (command "._Layer" "_LT" nouv_typlig layer "" ) ) ) (setq layinfo (tblnext "LAYER") ) ) ) ;; ;; Fonction ch_typlig_bloc : Change le type de ligne des entités définissant ;; un bloc, dans la table des blocs ;; (defun ch_typlig_bloc ( listtyplig / blocinfo typlig_forc anc_typlig nouv_typlig noment ent ) (setq blocinfo (tblnext "BLOCK" T)) (while blocinfo (setq noment (cdr (assoc -2 blocinfo))) (while noment (setq ent (entget noment)) (setq typlig_forc (assoc 6 ent)) (if typlig_forc (progn (setq anc_typlig (cdr typlig_forc)) (setq nouv_typlig (typlig_corres anc_typlig listtyplig)) (if nouv_typlig (progn (setq ent (subst (cons 6 nouv_typlig) typlig_forc ent)) (entmod ent) ) ) ) ) (setq noment (entnext noment)) ) (setq blocinfo (tblnext "BLOCK")) ) ) ;; ;; Commande newlt : fonction principale ;; entrée du nom de fichier de correspondance, ;; changement des types de lignes des calques, blocs et entités ;; (defun c:newlt ( / listtyplig nomfic fd sset slen i ents entres typlig_forc anc_typlig nouv_typlig cmdechold ) (setq cmdechold (getvar "cmdecho") ) (setvar "cmdecho" 0) (command "._UNDO" "_BE") ;; choix du fichier de correspondance (setq nomfic (getfiled "fichier de corres. des types de lignes" "" "txt" 2) ) ;; Creation de la liste de corrspondance (setq fd (open nomfic "r") ) (setq listtyplig (cree_liste_typlig fd)) (close fd) ;; Chargement des types de lignes non disponibles (charge_typlig listtyplig) ;; Redefinition du type de ligne par defaut des couches (print "Traitement des types de lignes des calques\n") (ch_typlig_layer listtyplig) ;; Redefinition du type de ligne des entites des blocs (print "Traitement des types de lignes des blocs\n") (ch_typlig_bloc listtyplig) ;; Redéfinition des types de ligne des entités ;; Sélection de toutes les entités du dessin (setq sset (ssget "X") ) (setq slen (sslength sset) ) ;; Changement du type de ligne des entités à type de ligne forcé (print "Traitement des entités à type de ligne forcé\n") (setq i 0) (while ( (setq ents (ssname sset i) ) (setq entres ( entget ents) ) (setq typlig_forc (assoc 6 entres) ) (if typlig_forc (progn (setq anc_typlig (cdr typlig_forc) ) (setq nouv_typlig (typlig_corres anc_typlig listtyplig) ) (if nouv_typlig (progn (setq entres (subst (cons 6 nouv_typlig) typlig_forc entres) ) (entmod entres) ) ) ) ) (setq i (1+ i) ) ) (command "._UNDO" "_END") (setvar "cmdecho" cmdechold) (print "Fin des traitements\n") (princ) ) DAO: AutoCAD(2D & 3D), CovadisCAO: 3D's MAX, Rhinoceros 3D, REVITGeoModeliSation: AutoCAD MEP, RhinoTerrainRendu: Vray for Rhino, Keyshot, LumionProgrammation: Grasshopper, Dynamo, VisualStudio C.V.Profil LinkedInBookSite web http://nsa37.casimages.com/img/2016/09/26/160926023334168603.jpg
(gile) Posté(e) le 3 septembre 2010 Posté(e) le 3 septembre 2010 Juju_30, rhymone, S'il vous plait, quand vous postez du code, pour le rendre plus lisible utilisez les bbcodes : [surligneur][[/surligneur][surligneur]code[/surligneur][surligneur]][/surligneur] ici le code [surligneur][[/surligneur][surligneur]/code[/surligneur][surligneur]][/surligneur] donne : ici le code Accessible via l'icône [#] : http://img94.imageshack.us/img94/8380/bbcode.png Si vous n'êtes pas l'auteur du code que vous postez, un minimum de correction voudrait que vous le citiez et/ou donniez un lien vers la source... Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
RhymOne Posté(e) le 6 septembre 2010 Posté(e) le 6 septembre 2010 Merci gile je me souvenais pas d'ou c'était... ici le code DAO: AutoCAD(2D & 3D), CovadisCAO: 3D's MAX, Rhinoceros 3D, REVITGeoModeliSation: AutoCAD MEP, RhinoTerrainRendu: Vray for Rhino, Keyshot, LumionProgrammation: Grasshopper, Dynamo, VisualStudio C.V.Profil LinkedInBookSite web http://nsa37.casimages.com/img/2016/09/26/160926023334168603.jpg
Messages recommandés
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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant