Aller au contenu

Messages recommandés

Posté(e)

Salut!

 

J'ai fait un petit lisp afin que toutes les entités se retrouvent en altitude 0. Mais cela ne fonctionne pas correctement :(

 

Pour exemple: il me reste des blocs qui si j'ouvre la fenêtre des propriétés, pour le Z je trouve -50 alors que si je fait un entget sur le bloc dans le Z il y a 0.0 :casstet:

par contre pour les valeurs en X et Y ceux sont les mêmes (à peu de chose près, car le entget me retourne un arrondi)

 

Merci. :)

Tous pour lisp, Lisp pour tous!

Avec Revit, cela ne vas trop vite...

Posté(e)

Salut,

 

Difficile de répondre sans voir le code.

 

Est-ce que ton LISP utilise la méthode qui consiste à déplacer tous les objets de 0,0,0 vers 0,0,1e99 puis de 0,0,0 à 0,0,-1e99 ?

 

(command "_.move"
 (ssget "_X")
 ""
 '(0 0 0)
 '(0 0 1e99)
 "_.move"
 "_p"
 ""
 '(0 0 0)
 '(0 0 -1e99)
) 

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

Posté(e)

Salut Gile,

 

Le pseudo code du lisp est du genre:

ssget type (je fais type par type : insert, line, polyline)

je boucle sur les éléments:

je test le code qui contient les coordonnées, je test le Z: si (> (abs (Z -0.0)) epsilon)

alors je change le code en mettant (code X Y 0.0)

 

Je ne sais pas comment mettre du code pour l'afficher correctement sur le site.

 

 

Tous pour lisp, Lisp pour tous!

Avec Revit, cela ne vas trop vite...

Posté(e)

En procédant comme tu le fait, il faut tenir compte du système de coordonnées dans lequel sont définis les points (code DXF 10 par exemple).

Pour beacoup d'entités 2d (références de bloc, cercles, arcs, textes ...) ce point est défini dans le SCO de l'objet, et mettre le Z de ce point à 0.0 ne place pas forcément l'objet sur le 0.0 du SCG si le SCO de l'objet n'est pas parallèle au SCG (voir ce sujet).

 

Essaye la méthode données plus haut, elle devrait fonctionner.

 

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

Posté(e)

Re-salut,

 

Je me doutais qu'il devait y avoir un problème de ce genre, car si je déplace manuellement le bloc, son code contient +50 pour le Z alors que le Z de la fenetre des propriétés est bien à 0.0.

 

Ta commande est bizarre :casstet: , je l'ai essayé sur mon dessin de test, je ne vois plus gd chose!

Il ne mes reste que des petits points :exclam:

 

Mon but est de mettre uniquement le Z à zéro, afin que lorsque l'on regarde le dessin avec la vue gauche ou droite, on obtienne une belle droite (multicolore) et pas des traits partout, afin d'éviter les bugs avec autofluid lorsque les dessinateur font des raccords.

 

Merci

 

Tous pour lisp, Lisp pour tous!

Avec Revit, cela ne vas trop vite...

Posté(e)

Un truc très ancien que j'avais réalisé, si ça peut te servir comme base...

 

Il est à remanier, par exemple les LWPOLYLINE ne sont pas prises en compte.

Les résultats sont à vérifier, je n'ai jamais repris ce code car la commande "FLATTEN" des express répond a ce genre de souhait

 

(defun mdf_10 (lst cod / nw_pt)
(setq nw_pt (trans (cdr (assoc cod lst)) (cdar lst) 0))
(subst
	(cons cod (list (car nw_pt) (cadr nw_pt) 0.0))
	(assoc cod lst)
	lst
)
)
(defun mdf_210 (lst / )
(subst
	'(210	0.0	0.0 1.0)
	(assoc 210 lst)
	lst
)
)
(defun chg_lst (dx_lst dx_cod / )
(while dx_cod
	(cond
		((eq (car dx_cod) 10)
			(setq dx_lst (mdf_10 dx_lst 10))
		)
		((eq (car dx_cod) 11)
			(setq dx_lst (mdf_10 dx_lst 11))
		)
		((eq (car dx_cod) 12)
			(setq dx_lst (mdf_10 dx_lst 12))
		)
		((eq (car dx_cod) 13)
			(setq dx_lst (mdf_10 dx_lst 13))
		)
		((eq (car dx_cod) 210)
			(setq dx_lst (mdf_210 dx_lst))
		)
	)
	(setq dx_cod (cdr dx_cod))
)
(entmod dx_lst)
)
(defun id_ent (name / )
(setq dxflst (entget name))
(setq dxfnam (cdr (assoc 0 dxflst)))
(cond
	((eq dxfnam "LINE")
		(chg_lst dxflst '(10 11 210))
	)
	((or
		(eq dxfnam "POINT")
		(eq dxfnam "CIRCLE")
		(eq dxfnam "ARC")
		(eq dxfnam "ATTDEF")
		(eq dxfnam "SHAPE")
	 )
		(chg_lst dxflst '(10 210))
	)
	((eq dxfnam "TEXT")
		(if (assoc 11 dxflst)
			(chg_lst dxflst '(10 11 210))
			(chg_lst dxflst '(10 210))
		)
	)
	((or
		(eq dxfnam "TRACE")
		(eq dxfnam "SOLID")
		(eq dxfnam "3DFACE")
	 )
	 (chg_lst dxflst '(10 11 12 13 210))
	)
	((eq dxfnam "POLYLINE")
		(setq s_lst (entget (entnext (cdar dxflst))))
		(while (/= (cdr (assoc 0 s_lst)) "SEQEND")
			(chg_lst s_lst '(10))
			(setq s_lst (entget (entnext (cdar s_lst))))
		)
		(setq dxflst (subst '(10 0.0 0.0 0.0) (assoc 10 dxflst) dxflst))
		(entmod dxflst)
		(chg_lst dxflst '(210))
		(entupd (cdar dxflst))
	)
	((eq dxfnam "INSERT")
		(cond
			((and (assoc 66 dxflst) (not (zerop (cdr (assoc 66 dxflst)))))
				(setq s_lst (entget (entnext (cdar dxflst))))
				(while (= (cdr (assoc 0 s_lst)) "ATTRIB")
					(if (assoc 11 s_lst)
						(chg_lst s_lst '(10 11 210))
						(chg_lst s_lst '(10 210))
					)
					(setq s_lst (entget (entnext (cdar s_lst))))
				)
			)
		)
		(chg_lst dxflst '(10 210))
		(entupd (cdar dxflst))
	)
	((eq dxfnam "VIEWPORT")
		(prompt "\nNe peut modifier une entitée fenêtre, valeurs inchangées.")
	)
	((eq dxfnam "DIMENSION")
	)
)
)
(defun c:3DTO2D ()
(setq ind 0)
(setq js (ssget))
(repeat (sslength js)
	(setq n_ent (ssname js ind))
	(setq ind (1+ ind))
	(if (= ind 32768)
		(setq ind (float ind))
	)
	(id_ent n_ent)
)
(prin1)
)

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Posté(e)

Salut Bonuscad!

 

Trop cool :D , c'était exactement ce que je cherchais à faire. Maintenant il ne mes reste plus qu'à comprendre le code et voir pour les LWPOLYLINE.

 

donc le jeune padawan du lisp dit mille fois merci à maitre yoda! ;)

Tous pour lisp, Lisp pour tous!

Avec Revit, cela ne vas trop vite...

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é