Aller au contenu

[Résolu] Lisp de modification export DWG


Giropode

Messages recommandés

Bonjour à tous,

 

Au bureau, nous nous sommes mis à REVIT il y a peu. Avec mes deux collègues galériens, nous sommes en train d'établir les fondement de notre gabarit pour ensuite transmettre à nos autres collègues.

A l'heure actuelle, je suis sur le sujet des exports DWG, cher à notre direction (conservation de l'interopérabilité avec nos collègues encore sous AutoCAD).

 

J'arrive donc à générer un fichier DWG correspondant "graphiquement" à ce que je voudrais. Cependant, une fois le fichier généré, il manque quelques petites manipulations à faire dans le fichier pour être en phase avec les habitudes du BE (éléments dans les bons calques, bonnes échelles de traits, de hachures, etc.)

 

J'ai pondu un LISP qui créé les calques manquants de notre charte. Ce même LISP est censé déplacer les éléments d'un claque à un autre en fonction d'un filtre de sélection. Mais c'est à ce moment là que ça bloque.

 

Petit déroulé du fonctionnement du LISP:

  1. Changement des variables MEASUREMENT, PSLTSCALE et LTSCALE
  2. Import des types de ligne CACHE et AXES2
  3. Création des calques manquants
  4. Déplacement des éléments d'un calque à un autre (par exemple éléments magenta dans le calque BA-murs vers le calque BA-md)

 

Code que j'ai pondu:

(defun c:XPORTRVT (/ *error*)

(setq XPORTRVT_CMDECHO (getvar 'CMDECHO) )
(setq XPORTRVT_MEASUREMENT (getvar 'MEASUREMENT) )
(setq XPORTRVT_PSLTSCALE (getvar 'PSLTSCALE) )
(setq XPORTRVT_LTSCALE (getvar 'LTSCALE) )

(defun *error* (MsgErreur)
	(setvar 'CMDECHO XPORTRVT_CMDECHO)
	(setvar 'MEASUREMENT XPORTRVT_MEASUREMENT)
	(setvar 'PSLTSCALE XPORTRVT_PSLTSCALE)
	(setvar 'LTSCALE XPORTRVT_LTSCALE)

 		(princ "\nErreur : ")
 		(princ MsgErreur)
 		(princ "\nLa finalisation de l'export a échouée.")
	(princ)
); Fin de defun

(setvar 'CMDECHO 0)	

; Modification des variables selon gabarit BETREC
(setvar 'MEASUREMENT 0)
(setvar 'PSLTSCALE 0)
(setvar 'LTSCALE 50)

; Importation des styles de ligne CACHE et AXES2
(command-s "_LINETYPE" "_LO" "CACHE" "B:/Gabarits/STR/acad.lin" "" "" "" "" "" "" "" "")
(command-s "_LINETYPE" "_LO" "AXES2" "B:/Gabarits/STR/acad.lin" "" "" "" "" "" "" "" "")

; Création de la liste des calques BETREC
(XPORTRVT_CreationCalque "BA-axes" "AXES2" "0.20" "110")
(XPORTRVT_CreationCalque "BA-cartouche" "Continuous" "0.35" "254")
(XPORTRVT_CreationCalque "BA-charpente" "Continuous" "0.25" "13")
(XPORTRVT_CreationCalque "BA-cot" "Continuous" "0.20" "2")
(XPORTRVT_CreationCalque "BA-cot impact" "Continuous" "0.15" "220")
(XPORTRVT_CreationCalque "BA-cot reservations" "Continuous" "0.15" "191")
(XPORTRVT_CreationCalque "BA-cot dalles escaliers" "Continuous" "0.35" "10")
(XPORTRVT_CreationCalque "BA-existant" "CACHE" "0.25" "155")
(XPORTRVT_CreationCalque "BA-fenetres" "Continuous" "0.20" "141")
(XPORTRVT_CreationCalque "BA-hach" "Continuous" "0.15" "211")
(XPORTRVT_CreationCalque "BA-hach dalles" "Continuous" "0.05" "133")
(XPORTRVT_CreationCalque "BA-hach pot et cv" "Continuous" "0.15" "9")
(XPORTRVT_CreationCalque "BA-md" "CACHE" "0.15" "6")
(XPORTRVT_CreationCalque "BA-murs" "Continuous" "0.70" "7")
(XPORTRVT_CreationCalque "BA-non porteur" "Continuous" "0.35" "253")
(XPORTRVT_CreationCalque "BA-pieux puits" "Continuous" "0.35" "40")
(XPORTRVT_CreationCalque "BA-pointillés" "CACHE" "0.15" "4")
(XPORTRVT_CreationCalque "BA-poutres" "Continuous" "0.35" "1")
(XPORTRVT_CreationCalque "BA-rep arma" "Continuous" "0.20" "82")
(XPORTRVT_CreationCalque "BA-reservations" "Continuous" "0.15" "201")
(XPORTRVT_CreationCalque "BA-reservations dalle" "Continuous" "0.15" "201")
(XPORTRVT_CreationCalque "BA-semelles" "Continuous" "0.35" "30")
(XPORTRVT_CreationCalque "BA-textes" "Continuous" "0.20" "3")
(XPORTRVT_CreationCalque "BA-xrefs" "Continuous" "0.05" "7")

; Réatribution des élèments dans les bons calques
(XPORTRVT_DeplacementElements "BA-murs" "BA-md" "LINE" "6" "CACHE")

(setvar 'CMDECHO XPORTRVT_CMDECHO)
(alert "Modification de l'export terminé !")
(princ)
); Fin de la commande XPORTRVT

; --------------------------------------------------
; Fonction permettant de créer les calques manquants
(defun XPORTRVT_CreationCalque ( XPORTRVT_NomCalque XPORTRVT_TypeLigne XPORTRVT_EpLigne XPORTRVT_CouleurCalque / *error*)

(defun *error* (MsgErreur)
 		(princ "\nErreur : ")
 		(princ MsgErreur)
	(princ)
); Fin de defun

(if (not (tblsearch "LAYER" XPORTRVT_NomCalque) )
	(entmakex
		(list
			'(0 . "LAYER")
			'(100 . "AcDbSymbolTableRecord")
			'(100 . "AcDbLayerTableRecord")
			'(70 . 0)
			(cons 2 XPORTRVT_NomCalque)
			(cons 62 (atoi XPORTRVT_CouleurCalque) )
			(cons 6 XPORTRVT_TypeLigne)
			(cons 370 (atoi XPORTRVT_EpLigne) )
		); Fin de list
	); Fin de entmake
); Fin de if
); Fin de la fonction XPORTRVT_CreationCalque
; --------------------------------------------------

; ----------------------------------------------------------
; Fonction permettant de les éléments d'un calque à un autre
(defun XPORTRVT_DeplacementElements ( XPORTRVT_CalqueOrigine XPORTRVT_CalqueDestination XPORTRVT_TypeElement XPORTRVT_CouleurElement XPORTRVT_TypeLigneElement / *error*)

(defun *error* (MsgErreur)
 		(princ "\nErreur : ")
 		(princ MsgErreur)
	(princ)
); Fin de defun

(ssget "X" 	
	(list
		'(-4 . "<AND") 
		'(0 . "LINE") 
		'(8 . "BA-murs")
		'(62 . 6)
		'(6 . "CACHE")
		'(-4 . "AND>") 
	)
)
(command "CHPROP" "CA" XPORTRVT_CalqueDestination)
(command "CHPROP" "CO" "DuCalque")
(command "CHPROP" "T" "DuCalque")

); Fin de la fonction XPORTRVT_DeplacementElements
; ----------------------------------------------------------

 

Je reste à votre disposition pour toute précision.

 

Bonne journée à tous.

Mon pense bête : Mon blog fourre-tout

Ma bible : Aide AutoCAD

Mon futur calvaire : Revit

Lien vers le commentaire
Partager sur d’autres sites

Salut

 

Pour créer le filtre

(setq js (ssget "x" (list (cons 8 "BA-murs") (cons 62 6))))

 

Et ensuite avec la commande chprop par exemple, ou mieux avec les codes dxf.

 

@+

 

Bonjour,

 

Merci pour l'aide, j'arrive à faire ma sélection désormais.

 

Petite question supplémentaire, comment j'indique un type de ligne "DuCalque" avec les codes DXF ???

 

Pour l'instant j'ai tapé un truc du genre :

(setq XPORTRVT_DonneesEntite (subst (cons 6 "BYLAYER") (assoc 6 XPORTRVT_DonneesEntite) XPORTRVT_DonneesEntite) )
(entmod XPORTRVT_DonneesEntite)

 

Mais clairement je sais que ce n'est pas ByLayer qu'il faut indiquer...

 

Merci d'avance !

Mon pense bête : Mon blog fourre-tout

Ma bible : Aide AutoCAD

Mon futur calvaire : Revit

Lien vers le commentaire
Partager sur d’autres sites

Petite question supplémentaire, comment j'indique un type de ligne "DuCalque" avec les codes DXF ???

Salut

 

Pour la couleur Ducalque

(cons 62 256)

 

Pour la couleur Dubloc

(cons 62 0)

 

@+

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

Lien vers le commentaire
Partager sur d’autres sites

Arrrrrrrrgggg ! :blink:

 

J'arrive pas à faire fonctionner le Lisp ! Il m'indique l'erreur suivante:

Erreur : type d'argument incorrect: lselsetp nil

 

Voici le code:

(defun c:XPORTRVT (/ *error*)

(setq XPORTRVT_CMDECHO (getvar 'CMDECHO) )
(setq XPORTRVT_MEASUREMENT (getvar 'MEASUREMENT) )
(setq XPORTRVT_PSLTSCALE (getvar 'PSLTSCALE) )
(setq XPORTRVT_LTSCALE (getvar 'LTSCALE) )

(defun *error* (MsgErreur)
	(setvar 'CMDECHO XPORTRVT_CMDECHO)
	(setvar 'MEASUREMENT XPORTRVT_MEASUREMENT)
	(setvar 'PSLTSCALE XPORTRVT_PSLTSCALE)
	(setvar 'LTSCALE XPORTRVT_LTSCALE)

  	(princ "\nErreur : ")
  	(princ MsgErreur)
  	(princ "\nLa finalisation de l'export a échouée.")
	(princ)
); Fin de defun

(setvar 'CMDECHO 0)	

; Modification des variables selon gabarit BETREC
(setvar 'MEASUREMENT 0)
(setvar 'PSLTSCALE 0)
(setvar 'LTSCALE 50)

; Importation des styles de ligne CACHE et AXES2
(command-s "_LINETYPE" "_LO" "CACHE" "B:/Gabarits/STR/acad.lin" "" "" "" "" "" "" "" "")
(command-s "_LINETYPE" "_LO" "AXES2" "B:/Gabarits/STR/acad.lin" "" "" "" "" "" "" "" "")

; Création de la liste des calques BETREC
(XPORTRVT_CreationCalque "BA-axes" "AXES2" "0.20" "110")
(XPORTRVT_CreationCalque "BA-cartouche" "Continuous" "0.35" "254")
(XPORTRVT_CreationCalque "BA-charpente" "Continuous" "0.25" "13")
(XPORTRVT_CreationCalque "BA-cot" "Continuous" "0.20" "2")
(XPORTRVT_CreationCalque "BA-cot impact" "Continuous" "0.15" "220")
(XPORTRVT_CreationCalque "BA-cot reservations" "Continuous" "0.15" "191")
(XPORTRVT_CreationCalque "BA-cot dalles escaliers" "Continuous" "0.35" "10")
(XPORTRVT_CreationCalque "BA-existant" "CACHE" "0.25" "155")
(XPORTRVT_CreationCalque "BA-fenetres" "Continuous" "0.20" "141")
(XPORTRVT_CreationCalque "BA-hach" "Continuous" "0.15" "211")
(XPORTRVT_CreationCalque "BA-hach dalles" "Continuous" "0.05" "133")
(XPORTRVT_CreationCalque "BA-hach pot et cv" "Continuous" "0.15" "9")
(XPORTRVT_CreationCalque "BA-md" "CACHE" "0.15" "6")
(XPORTRVT_CreationCalque "BA-murs" "Continuous" "0.70" "7")
(XPORTRVT_CreationCalque "BA-non porteur" "Continuous" "0.35" "253")
(XPORTRVT_CreationCalque "BA-pieux puits" "Continuous" "0.35" "40")
(XPORTRVT_CreationCalque "BA-pointillés" "CACHE" "0.15" "4")
(XPORTRVT_CreationCalque "BA-poutres" "Continuous" "0.35" "1")
(XPORTRVT_CreationCalque "BA-rep arma" "Continuous" "0.20" "82")
(XPORTRVT_CreationCalque "BA-reservations" "Continuous" "0.15" "201")
(XPORTRVT_CreationCalque "BA-reservations dalle" "Continuous" "0.15" "201")
(XPORTRVT_CreationCalque "BA-semelles" "Continuous" "0.35" "30")
(XPORTRVT_CreationCalque "BA-textes" "Continuous" "0.20" "3")
(XPORTRVT_CreationCalque "BA-xrefs" "Continuous" "0.05" "7")

; Réatribution des élèments dans les bons calques
(XPORTRVT_DeplacementElements "BA-poutres" "BA-md" "LINE,CIRCLE" 6 "CACHE" "" 256) ; Déplacement des lignes d'impact
(XPORTRVT_DeplacementElements "BA-poutres" "BA-md" "INSERT" 6 "CACHE" "" 256) ; Déplacement des blocs d'impact
(XPORTRVT_DeplacementElements "BA-poutres" "BA-md" "HATCH" 6 "" "AR-SAND" 256) ; Déplacement des hachures d'impact de murs
(XPORTRVT_DeplacementElements "BA-poutres" "BA-md" "HATCH" 6 "" "CROSS" 256) ; Déplacement des hachures d'impact de relevés
(XPORTRVT_DeplacementElements "BA-murs" "BA-hach pot et cv" "HATCH" 9 "" "SOLID" 170) ; Déplacement des hachures d'impact de relevés

(setvar 'CMDECHO XPORTRVT_CMDECHO)
(princ "Modification de l'export terminé !")
(princ)
); Fin de la commande XPORTRVT

; --------------------------------------------------
; Fonction permettant de créer les calques manquants
(defun XPORTRVT_CreationCalque ( XPORTRVT_NomCalque XPORTRVT_TypeLigne XPORTRVT_EpLigne XPORTRVT_CouleurCalque / *error*)

(defun *error* (MsgErreur)
  	(princ "\nErreur : ")
  	(princ MsgErreur)
	(princ)
); Fin de defun

(if (not (tblsearch "LAYER" XPORTRVT_NomCalque) )
	(entmakex
		(list
			'(0 . "LAYER")
			'(100 . "AcDbSymbolTableRecord")
			'(100 . "AcDbLayerTableRecord")
			'(70 . 0)
			(cons 2 XPORTRVT_NomCalque)
			(cons 62 (atoi XPORTRVT_CouleurCalque) )
			(cons 6 XPORTRVT_TypeLigne)
			(cons 370 (atoi XPORTRVT_EpLigne) )
		); Fin de list
	); Fin de entmake
); Fin de if
); Fin de la fonction XPORTRVT_CreationCalque
; --------------------------------------------------

; ----------------------------------------------------------
; Fonction permettant de les éléments d'un calque à un autre
(defun XPORTRVT_DeplacementElements ( XPORTRVT_CalqueOrigine XPORTRVT_CalqueDestination XPORTRVT_TypeElement XPORTRVT_CouleurElement XPORTRVT_TypeLigne XPORTRVT_MotifHach XPORTRVT_NouvelleCouleur / *error*)

(defun *error* (MsgErreur)
  	(princ "\nErreur : ")
  	(princ MsgErreur)
	(princ)
); Fin de defun

; On créé les filtres de sélection en fonction du type d'élément
(cond
	((= XPORTRVT_TypeElement "HATCH")
		(setq XPORTRVT_FiltreSelection 
			(list
				(cons 0 XPORTRVT_TypeElement)
				(cons 2 XPORTRVT_MotifHach)
				(cons 8 XPORTRVT_CalqueOrigine)
				(cons 62 XPORTRVT_CouleurElement)
			)
		)
	)
	((or (= XPORTRVT_TypeElement "LINE,CIRCLE") (= XPORTRVT_TypeElement "INSERT") )
		(setq XPORTRVT_FiltreSelection 
			(list
				(cons 0 XPORTRVT_TypeElement)
				(cons 6 XPORTRVT_TypeLigne)
				(cons 8 XPORTRVT_CalqueOrigine)
				(cons 62 XPORTRVT_CouleurElement)
			)
		)
	)
)

(if (setq XPORTRVT_Selection (ssget "_X" XPORTRVT_FiltreSelection ) ) ; On créé le jeu de sélection

	(setq XPORTRVT_n 0)
	
	(while (ssname XPORTRVT_Selection XPORTRVT_n)
		(setq XPORTRVT_n (1+ XPORTRVT_n)) ; On incrémente le compteur XPORTRVT_n de +1

		(setq XPORTRVT_NomEntite (ssname XPORTRVT_Selection XPORTRVT_n) ); On récupére le Entity name de l'objet DXF
		(setq XPORTRVT_DonneesEntite (entget XPORTRVT_NomEntite)) ; On récupére les infos de l'objet DXF numéro n

		; On change le type de ligne de l'élément
		(setq XPORTRVT_DonneesEntite (subst (cons 6 "Bylayer") (assoc 6 XPORTRVT_DonneesEntite) XPORTRVT_DonneesEntite) )

		; On change le calque de l'élément
		(setq XPORTRVT_DonneesEntite (subst (cons 8 XPORTRVT_CalqueDestination) (assoc 8 XPORTRVT_DonneesEntite) XPORTRVT_DonneesEntite) )
		
		; On change la couleur de l'élément
		(setq XPORTRVT_DonneesEntite (subst (cons 62 XPORTRVT_NouvelleCouleur) (assoc 62 XPORTRVT_DonneesEntite) XPORTRVT_DonneesEntite) )
		
		
		(if (= XPORTRVT_TypeElement "HATCH")
			(cond
				((= XPORTRVT_MotifHach "AR-SAND")						
					(setq XPORTRVT_DonneesEntite (subst (cons 41 5) (assoc 41 XPORTRVT_DonneesEntite) XPORTRVT_DonneesEntite))
				)
				((= XPORTRVT_MotifHach "CROSS")						
					(setq XPORTRVT_DonneesEntite (subst (cons 41 50) (assoc 41 XPORTRVT_DonneesEntite) XPORTRVT_DonneesEntite))
				)
			)
		); Fin de if	

		(entmod XPORTRVT_DonneesEntite)
	); Fin de while
); Fin de if


); Fin de la fonction XPORTRVT_DeplacementElements
; ----------------------------------------------------------

 

Et le fichier avec lequel j'essaie de le faire fonctionner : Fichier DWG

 

Merci par avance, je commence à être un poil désespéré ! :blink:

Mon pense bête : Mon blog fourre-tout

Ma bible : Aide AutoCAD

Mon futur calvaire : Revit

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Erreur : type d'argument incorrect: lselsetp nil
signifie que la fonction qui attend un jeu de sélection comme argument reçoit nil.

 

Le problème vient de l'expression (if (setq XPORTRVT_Selection ...)) dans XPORTRVT_DeplacementElements.

 

(if expression_test 
 expression_alors 
 [expression_sinon]
) 

expression_alors doit être une expression unique. Dans ton code, si la condition est remplie (il y a un jeu de sélection) seule l'expression (setq XPORTRVT_n 0) est exécutée et la boucle (while ...) n'est executée que si la condition n'est pas remplie, d'où l'erreur.

 

Il faut utiliser (progn ...) pour regrouper plusieurs expressions en une seule.

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

Erreur : type d'argument incorrect: lentityp nil

signifie que la fonction qui attend une entité (ENAME) comme argument reçoit nil.

 

Je pense que ça vien du fait que tu incrémentes ton compteur (XPORTRVT_n) avant de l'utiliser pour assigner la variable XPORTRVT_NomEntite.

 

Exemple ave un jeu de sélection qui contient 3 entités, quand XPORTRVT_n vaut 2, la condition du while :

(ssname XPORTRVT_Selection XPORTRVT_n) n'est pas nil donc tu exécutes le orps de la boucle : tu incrementes XPORTRVT_n qui vaut maintenant 3 et quand tu fait :

(setq XPORTRVT_NomEntite (ssname XPORTRVT_Selection XPORTRVT_n)) XPORTRVT_NomEntite vaut nil...

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

Bonjour à tous !

 

Comme je l'ai indiqué hier soir, le script fonctionne parfaitement. Pas d'erreurs, tous les éléments que je voulais déplacer/modifier, se déplacent/modifient. J'ai seulement une chose qui me pose problème.

 

Comme vous l'aurez peut être remarqué dans le code, je modifie la variable MEASUREMENT de système métrique au système anglo-saxon. En effet, au bureau nous fonctionnons ainsi car cela permet d'avoir des valeurs d'échelles plus "logiques". Or l'export depuis Revit laisse cette variable sur le système métrique.

Du coup, avec le Lisp j'ai beau changer la valeur d'échelle, mais les hachures ne s'affichent quand même pas de la façon souhaitée. Or si je le fais manuellement, les hachures s'affichent correctement. Est-ce qu'il y a une valeur que je dois modifier ??

 

Merci par avance de votre aide.

 

Ci-joint la dernière version du code :

 

[size=2]; Programme lisp permettant d'affiner un export REVIT > DWG chez BETREC[/size]
; Réalisé par Guillaume OJARDIAS - v15.11.17

(defun c:XPORTRVT (/ *error*)

(setq XPORTRVT_CMDECHO (getvar 'CMDECHO) )
(setq XPORTRVT_MEASUREMENT (getvar 'MEASUREMENT) )
(setq XPORTRVT_PSLTSCALE (getvar 'PSLTSCALE) )
(setq XPORTRVT_LTSCALE (getvar 'LTSCALE) )

(defun *error* (MsgErreur)
	(setvar 'CMDECHO XPORTRVT_CMDECHO)
	(setvar 'MEASUREMENT XPORTRVT_MEASUREMENT)
	(setvar 'PSLTSCALE XPORTRVT_PSLTSCALE)
	(setvar 'LTSCALE XPORTRVT_LTSCALE)

  	(princ "\nErreur : ")
  	(princ MsgErreur)
  	(princ "\nLa finalisation de l'export a échouée.")
	(princ)
); Fin de defun

(setvar 'CMDECHO 0)	

; Modification des variables selon gabarit BETREC
(setvar 'MEASUREMENT 0)
(setvar 'PSLTSCALE 0)
(setvar 'LTSCALE 50)

; Importation des styles de ligne CACHE et AXES2
(command-s "_LINETYPE" "_LO" "CACHE" "B:/Gabarits/STR/acad.lin" "" "" "" "" "" "" "" "")
(command-s "_LINETYPE" "_LO" "AXES2" "B:/Gabarits/STR/acad.lin" "" "" "" "" "" "" "" "")

; Création de la liste des calques BETREC
(XPORTRVT_CreationCalque "BA-axes" "AXES2" "0.20" "110")
(XPORTRVT_CreationCalque "BA-cartouche" "Continuous" "0.35" "254")
(XPORTRVT_CreationCalque "BA-charpente" "Continuous" "0.25" "13")
(XPORTRVT_CreationCalque "BA-cot" "Continuous" "0.20" "2")
(XPORTRVT_CreationCalque "BA-cot impact" "Continuous" "0.15" "220")
(XPORTRVT_CreationCalque "BA-cot reservations" "Continuous" "0.15" "191")
(XPORTRVT_CreationCalque "BA-cot dalles escaliers" "Continuous" "0.35" "10")
(XPORTRVT_CreationCalque "BA-existant" "CACHE" "0.25" "155")
(XPORTRVT_CreationCalque "BA-fenetres" "Continuous" "0.20" "141")
(XPORTRVT_CreationCalque "BA-hach" "Continuous" "0.15" "211")
(XPORTRVT_CreationCalque "BA-hach dalles" "Continuous" "0.05" "133")
(XPORTRVT_CreationCalque "BA-hach pot et cv" "Continuous" "0.15" "9")
(XPORTRVT_CreationCalque "BA-md" "CACHE" "0.15" "6")
(XPORTRVT_CreationCalque "BA-murs" "Continuous" "0.70" "7")
(XPORTRVT_CreationCalque "BA-non porteur" "Continuous" "0.35" "253")
(XPORTRVT_CreationCalque "BA-pieux puits" "Continuous" "0.35" "40")
(XPORTRVT_CreationCalque "BA-pointillés" "CACHE" "0.15" "4")
(XPORTRVT_CreationCalque "BA-poutres" "Continuous" "0.35" "1")
(XPORTRVT_CreationCalque "BA-rep arma" "Continuous" "0.20" "82")
(XPORTRVT_CreationCalque "BA-reservations" "Continuous" "0.15" "201")
(XPORTRVT_CreationCalque "BA-reservations dalle" "Continuous" "0.15" "201")
(XPORTRVT_CreationCalque "BA-semelles" "Continuous" "0.35" "30")
(XPORTRVT_CreationCalque "BA-textes" "Continuous" "0.20" "3")
(XPORTRVT_CreationCalque "BA-xrefs" "Continuous" "0.05" "7")

; Réatribution des élèments dans les bons calques
(XPORTRVT_DeplacementElements "BA-poutres" "BA-md" "LINE,CIRCLE" 6 "CACHE" "" 256) ; Déplacement des lignes d'impact
(XPORTRVT_DeplacementElements "BA-poutres" "BA-md" "INSERT" 6 "CACHE" "" 256) ; Déplacement des blocs d'impact
(XPORTRVT_DeplacementElements "BA-poutres" "BA-md" "HATCH" 6 "" "AR-SAND" 256) ; Déplacement des hachures d'impact de murs
(XPORTRVT_DeplacementElements "BA-poutres" "BA-md" "HATCH" 6 "" "CROSS" 256) ; Déplacement des hachures d'impact de relevés
(XPORTRVT_DeplacementElements "BA-murs" "BA-hach pot et cv" "HATCH" 9 "" "SOLID" 170) ; Déplacement des hachures d'impact de relevés

(setvar 'CMDECHO XPORTRVT_CMDECHO)
(princ "Modification de l'export terminé !")
(princ)
); Fin de la commande XPORTRVT

; --------------------------------------------------
; Fonction permettant de créer les calques manquants
(defun XPORTRVT_CreationCalque ( XPORTRVT_NomCalque XPORTRVT_TypeLigne XPORTRVT_EpLigne XPORTRVT_CouleurCalque / *error*)

(defun *error* (MsgErreur)
  	(princ "\nErreur : ")
  	(princ MsgErreur)
	(princ)
); Fin de defun

(if (not (tblsearch "LAYER" XPORTRVT_NomCalque) )
	(entmakex
		(list
			'(0 . "LAYER")
			'(100 . "AcDbSymbolTableRecord")
			'(100 . "AcDbLayerTableRecord")
			'(70 . 0)
			(cons 2 XPORTRVT_NomCalque)
			(cons 62 (atoi XPORTRVT_CouleurCalque) )
			(cons 6 XPORTRVT_TypeLigne)
			(cons 370 (atoi XPORTRVT_EpLigne) )
		); Fin de list
	); Fin de entmake
); Fin de if
); Fin de la fonction XPORTRVT_CreationCalque
; --------------------------------------------------

; ----------------------------------------------------------
; Fonction permettant de les éléments d'un calque à un autre
(defun XPORTRVT_DeplacementElements ( XPORTRVT_CalqueOrigine XPORTRVT_CalqueDestination XPORTRVT_TypeElement XPORTRVT_CouleurElement XPORTRVT_TypeLigne XPORTRVT_MotifHach XPORTRVT_NouvelleCouleur / *error*)

(defun *error* (MsgErreur)
  	(princ "\nErreur : ")
  	(princ MsgErreur)
	(princ)
); Fin de defun

; On créé les filtres de sélection en fonction du type d'élément
(cond
	((= XPORTRVT_TypeElement "HATCH")
		(setq XPORTRVT_FiltreSelection 
			(list
				(cons 0 XPORTRVT_TypeElement)
				(cons 2 XPORTRVT_MotifHach)
				(cons 8 XPORTRVT_CalqueOrigine)
				(cons 62 XPORTRVT_CouleurElement)
			)
		)
	)
	((or (= XPORTRVT_TypeElement "LINE,CIRCLE") (= XPORTRVT_TypeElement "INSERT") )
		(setq XPORTRVT_FiltreSelection 
			(list
				(cons 0 XPORTRVT_TypeElement)
				(cons 6 XPORTRVT_TypeLigne)
				(cons 8 XPORTRVT_CalqueOrigine)
				(cons 62 XPORTRVT_CouleurElement)
			)
		)
	)
)

(if (setq XPORTRVT_Selection (ssget "_X" XPORTRVT_FiltreSelection ) ) ; On créé le jeu de sélection
	(progn
		(setq XPORTRVT_n 0)
		
		(while (ssname XPORTRVT_Selection XPORTRVT_n)
	
			(setq XPORTRVT_NomEntite (ssname XPORTRVT_Selection XPORTRVT_n) ); On récupére le Entity name de l'objet DXF
			(setq XPORTRVT_DonneesEntite (entget XPORTRVT_NomEntite)) ; On récupére les infos de l'objet DXF numéro n

			; On change le type de ligne de l'élément
			(setq XPORTRVT_DonneesEntite (subst (cons 6 "Bylayer") (assoc 6 XPORTRVT_DonneesEntite) XPORTRVT_DonneesEntite) )

			; On change le calque de l'élément
			(setq XPORTRVT_DonneesEntite (subst (cons 8 XPORTRVT_CalqueDestination) (assoc 8 XPORTRVT_DonneesEntite) XPORTRVT_DonneesEntite) )
			
			; On change la couleur de l'élément
			(setq XPORTRVT_DonneesEntite (subst (cons 62 XPORTRVT_NouvelleCouleur) (assoc 62 XPORTRVT_DonneesEntite) XPORTRVT_DonneesEntite) )
			
			
			(if (= XPORTRVT_TypeElement "HATCH")
				(cond
					((= XPORTRVT_MotifHach "AR-SAND")
						(setq XPORTRVT_DonneesEntite (subst (cons 41 5.0) (assoc 41 XPORTRVT_DonneesEntite) XPORTRVT_DonneesEntite))
					)
					((= XPORTRVT_MotifHach "CROSS")						
						(setq XPORTRVT_DonneesEntite (subst (cons 41 50.0) (assoc 41 XPORTRVT_DonneesEntite) XPORTRVT_DonneesEntite))
					)
				); Fin de cond
			); Fin de if	

			(entmod XPORTRVT_DonneesEntite)
			
			(setq XPORTRVT_n (1+ XPORTRVT_n)) ; On incrémente le compteur XPORTRVT_n de +1
		); Fin de while
	); Fin de progn
); Fin de if


); Fin de la fonction XPORTRVT_DeplacementElements
[size=2]; ----------------------------------------------------------[/size]

 

Mon pense bête : Mon blog fourre-tout

Ma bible : Aide AutoCAD

Mon futur calvaire : Revit

Lien vers le commentaire
Partager sur d’autres sites

Bonjour à tous !

 

Je reviens à a charge concernant ces hachures (non non, je ne suis pas du tout un acharné =D)

 

Et en bonus, j'ai d'autres questions :

  1. Est-il possible via la méthode que j'utilise depuis le début de modifier les entités d'un bloc ? Si oui comment ?
  2. Peut-on jouer sur l'ordre de tracé des éléments ? Si oui, comment ?
  3. Pour modifier l'épaisseur de ligne d'un élément, est-ce bien le code DXF 370 ? Sinon, lequel ?

Merci par avance de vos réponse et bon après-midi !

Mon pense bête : Mon blog fourre-tout

Ma bible : Aide AutoCAD

Mon futur calvaire : Revit

Lien vers le commentaire
Partager sur d’autres sites

  • 3 semaines après...

Salut,

 

Ci-joint un lien pour récupérer trois fichiers:

  1. Fichier issu de l'export (brut)
  2. Fichier après utilisation de la routine
  3. Fichier souhaité

Merci <img src='http://cadxp.com/public/style_emoticons/<#EMO_DIR#>/laugh.gif' class='bbc_emoticon' alt=':(rires forts):' />

 

Lien pour récupérer les fichiers

Salut

 

Dans le fichier n°2, tes hachures sont du type personnalisées.

Dans le fichier n°3, tes hachures sont du type prédéfinies.

 

Pour corriger

Sélection d'une hachure

(setq hatch (vlax-ename->vla-object (car (entsel))))

 

Et pour obtenir le résultat souhaité

(vlax-invoke hatch 'setpattern acHatchPatternTypeUserDefined (vla-get-patternname hatch))

 

@+

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

Lien vers le commentaire
Partager sur d’autres sites

Merci beaucoup ! Je vais m'empresser d’essayer ça ! Je te tiens au jus ! :D

De rien.

 

J'ai continué mes recherches et si tu es allergique au vlisp, c'est le code dxf 76 qui est incriminé.

 

@+

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

Lien vers le commentaire
Partager sur d’autres sites

Hello,

 

Du coup, j'ai essayé avec le code dxf 76 (vu que je suis parti pour fonctionner comme ça...) La hachure prend bien en compte la modification, cependant, visuellement parlant, rien ne se passe...

 

Ci-joint mon lisp à jour.

xportrvt.lsp

Mon pense bête : Mon blog fourre-tout

Ma bible : Aide AutoCAD

Mon futur calvaire : Revit

Lien vers le commentaire
Partager sur d’autres sites

Et avec un regen ?

Avec un entupd ?

 

Sinon, ça fonctionne bien en vlisp.

 

@+

 

Hello,

 

Du coup je n'arrive pas au résultat souhaité. Est-ce que tu peux m'aider sur l'intégration exacte du code en Vlisp ? Je n'ai pas encore abordé le sujet.

 

Merci !

Mon pense bête : Mon blog fourre-tout

Ma bible : Aide AutoCAD

Mon futur calvaire : Revit

Lien vers le commentaire
Partager sur d’autres sites

Salut

 

(and (ssget "x" (list (cons 0 "HATCH") (cons 76 2)))
 (progn
   (vlax-for ele (setq sel (vla-get-activeselectionset (vla-get-activedocument (vlax-get-acad-object))))
     (vlax-invoke ele 'setpattern acHatchPatternTypeUserDefined (vla-get-patternname ele))
   )
   (vla-delete sel)
 )
)

 

@+

  • Upvote 1

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

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é