Aller au contenu

changement type de ligne (general)


Messages recommandés

Posté(e)

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

 

Posté(e)

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 Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

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...

Posté(e)

- 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...) ???

Posté(e)

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 Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

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), Covadis

CAO: 3D's MAX, Rhinoceros 3D, REVIT

GeoModeliSation: AutoCAD MEP, RhinoTerrain

Rendu: Vray for Rhino, Keyshot, Lumion

Programmation: Grasshopper, Dynamo, VisualStudio

 

C.V.

Profil LinkedIn

Book

Site web

 

http://nsa37.casimages.com/img/2016/09/26/160926023334168603.jpg

Posté(e)

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

Posté(e)

Merci gile je me souvenais pas d'ou c'était...

ici  le code  

DAO: AutoCAD(2D & 3D), Covadis

CAO: 3D's MAX, Rhinoceros 3D, REVIT

GeoModeliSation: AutoCAD MEP, RhinoTerrain

Rendu: Vray for Rhino, Keyshot, Lumion

Programmation: Grasshopper, Dynamo, VisualStudio

 

C.V.

Profil LinkedIn

Book

Site web

 

http://nsa37.casimages.com/img/2016/09/26/160926023334168603.jpg

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é