Aller au contenu

Transformer une "Face 3D" en LWPolyligne


Messages recommandés

Posté(e)

Bonjour à tous.

 

Voilà, je viens de voir que les fichiers du Cadastre comporte des bâtiments formés avec des Faces 3D et non des polylignes fermées...

 

Donc, est-ce que quelqu'un aurait un lisp qui transformerait ces faces 3D en polyligne ?

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Posté(e)

Hello Denis

 

Requete sur mes 2000 noms de routines LSP: *3DF*

 

Tu vas essayer la routine ci-dessous ... Non testee ...

Tu nous diras si c OK et avec quelle version d'AutoCAD tu as travaille ??

 

Bon WE, Bye, lecrabe

 

 

;;
;; Creation de Polylignes 3D depuis Toutes les 3DFaces d'UN calque precis ... 
;; Les 3DPOLYs sont creees sur le Calque "xxxxxx_POLY3D" 
;; 

(defun c:3DF_P3D ()
(if (setq c (getstring nil "\nNom du calque des Faces 3D : "))
 (if (setq j (ssget "X" (list (cons 8 c)(cons 0 "3DFACE"))))
  (progn
   (command "CMDECHO" 0)
   (command "OSMODE" 0)
   (setq nc (strcat c "_POLY3D"))
   (command "_-LAYER" "_M" nc "")
   (setq l (sslength j))
   (while (>= (setq l (1- l)) 0)
    (setq d (entget (ssname j l)))
    (setq p1 (cdr (assoc 10 d)))
    (setq p2 (cdr (assoc 11 d)))
    (setq p3 (cdr (assoc 12 d))) 
;;   (command "POLY3D"   p1 p2 p3 "C")
    (command "_3DPOLY"  p1 p2 p3 "C")
   )
   (command "CMDECHO" 1)
  )
 )
)
(princ)
)

(alert "Taper 3DF_P3D pour lancer la commande ! ")

Autodesk Expert Elite Team

Posté(e)

Bonjour,

 

Il y aussi celle ci qui fait le distinguo entre 3 et 4 côtés

 

(defun C:3dfto3dpo ( / js ind e_name ent dxf_10 dxf_11 dxf_12 dxf_13)
(setvar "cmdecho" 0)
(princ "\nChoix des 3Dfaces.")
(setq js (ssget '((0 . "3DFACE"))) ind 0)
(cond
	(js
		(setvar "osmode" (+ 16384 (rem (getvar "osmode") 16384)))
		(while (setq e_name (ssname js ind))
			(setq
				ind (1+ ind)
				ent (entget e_name)
				dxf_10 (trans (cdr (assoc 10 ent)) 0 1)
				dxf_11 (trans (cdr (assoc 11 ent)) 0 1)
				dxf_12 (trans (cdr (assoc 12 ent)) 0 1)
				dxf_13 (trans (cdr (assoc 13 ent)) 0 1)
			)
			(if (not (equal dxf_12 dxf_13 1E-012))
				(command "_.3dpoly" dxf_10 dxf_11 dxf_12 dxf_13 "_close")
				(command "_.3dpoly" dxf_10 dxf_11 dxf_12 "_close")
			)
		)
		(princ (strcat "\n" (itoa ind) " 3Dpoly crées à partir de 3Dface."))
		(setvar "osmode" (rem (getvar "osmode") 16384))
	)
	(T (prompt "\nAucune sélection valide."))
)
(setvar "cmdecho" 1)
(prin1)
)

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

Posté(e)

Hello Bruno

 

YES ta routine est arrivee en 2eme position dans mes recherches locales !

 

Elle date de Decembre 2010 ...

 

Par contre toutes les routines dont je dispose, creent des 3DPolys

Ce qui est LOGIQUE !!

Et non pas des LWPolyligne comme semble le demander Denis !?

 

Bon WE, Bye, lecrabe

Autodesk Expert Elite Team

Posté(e)

Bonjour à vous, et merci pour votre aide...

 

Je suis sous AutoCAD Map 2018.

 

@LeCrabe : La routine ne me fait que des polylignes à trois sommets. Et elle me créé des sommets qui n'existent pas.

 

@BonusCAD : la routine me créé des sommets qui correspondent à d'autres sommets d'autres Faces 3D et ne sont donc pas superposés aux Faces 3D, et je n'ai pas d'accroche objet d'activés...

 

En tout cas, je regarderais vos lisp ce week-end, si je trouve le temps...

 

Merci encore à vous...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Posté(e)

Créer des polylignes (LWPOLYLINE), entités 2D par excellence, à partir de faces 3D, entités 3d qui, de plus, peuvent ne pas être plane n'est pas si simple.

 

Il faudrait plus de précisions sur la nature de ces Faces 3D et la manière de les convertir.

Doit on les considérer comme toutes planes (même si elles ont 4 sommets distincts) et parallèles au plan XY ? Autrement dit, les polylignes seraient la project des faces sur le plan XY

. Si c'est le cas, les codes ci-dessus peuvent assez facilement modifiés.

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

Posté(e)

Hello

 

Bien sur que "ma" routine (je la suppose de Bruno ou Gilles) ne fait que 3 sommets !

 

Par contre je ne suis pas sur de bien te suivre !?

SVP peux tu nous fournir ton DWG ou plutot un extrait significatif par un WBLOC ?

Par un lien Download Free, WETransfert, etc ...

 

Bye, lecrabe

 

PS: j'ai supprime mon message suivant qui donnait une routine ne correspondant pas a la demande ! ... ( PLines to Surfaces with SURFPATCH )

Autodesk Expert Elite Team

Posté(e)

Coucou

 

Je viens faire l'oiseau de mauvaise augure pour certains mais je dis ce que je pense :

Extraire les sommets des faces par entget et code dxf par un assoc 10, 11, 12 et 13 si 4 côtés

Faire une liste de ces valeurs sans les éventuelles altitudes et créer une polyligne avec

Franchement DenisHen, avec le niveau que tu as en lisp je suis certain que tu sais faire ça.

non ?

Sans vouloir te refuser de l'aide bien sûr mais des fois on a l'impression que tu cries au loup et tu connais la fable :

Le jour où il y aura vraiment un loup personne ne répondra.

 

Amicalement comme toujours

 

 

 

Posté(e)

S'il s'agit, comme je le suggérais, de "projeter les faces en polylignes sur le plan XY, la routine ci-dessous devrait le faire.

 

(defun c:3dFace2Polyline (/ distinct ss i face pts)

 (defun distinct (l)
   (if l
     (cons (car l) (distinct (vl-remove (car l) l)))
   )
 )
 (if (setq ss (ssget "_X" '((0 . "3DFACE"))))
   (repeat (setq i (sslength ss))
     (setq face (ssname ss (setq i (1- i)))
           pts  (distinct
                  (mapcar '(lambda (p)
                             (list (cadr p) (caddr p))
                           )
                          (vl-remove-if-not
                            '(lambda (x) (member (car x) '(10 11 12 13)))
                            (entget face)
                          )
                  )
                )
     )
     (command "_.pline")
     (foreach p pts (command p))
     (command "_close")
     (command "_.erase" face "")
   )
 )
 (princ)
)

  • Upvote 1

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

Posté(e)

Bonsoir à tous, et merci pour votre aide...

 

@LeCrabe : si j'en ai le temps, je ferais ça ce week-end.

 

@Didier : toujours friand de tes remarques, je te remercie pour mon "avec le niveau que tu as en lisp je suis certain que tu sais faire ça". malgré tout, tu me flatte... ;)

Mais il est vrai que j'ai souvent peur de ce que je ne connais pas, comme les faces 3D, mais n'est-ce pas dans nos réflexes comportementaux d'avoir peur de l'inconnu ?

 

@(gile) : Merci pour ce code que je vais effectivement "décortiquer", mais dès que je vois des mapcar et des lambda... Je souris, et je pleure... :P

 

Dans tous les cas, un grand merci à vous tous...

 

C'est vrai que ce serait malheureux, et j'en serais inconsolable, que ce site disparaisse, comme on peut le redouter dans "la fuite des cerveaux"...

 

Bon week-end à vous...

 

Amicalement...

 

Denis...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Posté(e)

Coucou

 

Tu le sais depuis le temps je te taquine pour te forcer...

 

TOUT ce que j'ai appris je l'ai appris en faisant des erreurs

Faire des erreurs c'est APPRENDRE

Quand j'ai appris à marcher (il y a longtemps) je suis tombé... et pourtant on m'a soufflé la façon de faire : mets un pied devant l'autre et recommence... les croutes sur les genoux sont plus efficaces que la méthode.

Que va t'il se passer si tu fais un (enget) sur une face, tu vas pas mettre le feu à la machine !!!

Tu vois la liste et y'a plus qu'à se servir des (assoc...)

Gagné !!!!!

Tu aurais été salement malheureux aux débuts d'AutoCAD, le net était encore à inventer et les erreurs il fallait s'y coltiner pour avancer

Aujourd'hui dès qu'un copier-coller ne marche plus on ouvre un message sur un forum, je dis non .

 

Amicalement tout de même

Posté(e)

Coucou aussi...

 

Didier, j'ai toujours été d'accord avec toi, et je ne formalise jamais de tes remarques, qui m'ont très souvent servies à me sortir les doigts du c*l. Et pour cela, je t'en remercie et en profite pour remercier aussi tous les membres de ce site unique et doté de formidables membres.

 

Si je connais un peu le lisp, c'est uniquement grâce à ce site et à toutes ces personnes bien intentionnées qui y sont, il faut le dire, très actives...

 

Encore une fois, Didier, je te remercie, car même si tu ne me donnes pas le code que je cherche, tu me donne les clefs pour le faire. Et c'est, je le sais, pour toi, le meilleur apprentissage...

 

Enfin bref (et je ne suis pas un enfin "enfinbrefiste") j'ai appris énormément sur ce site, j'en apprend encore beaucoup et, j'en suis sur, en apprendrais encore beaucoup...

 

J’appréhende toujours de faire un nouveau code, l'écriture est, pour un novice comme moi, une grosse étape du code. Peut-être est-ce la raison de mes nombreux appels à l'aide...

 

Mais rassure-toi, je suis loin d'être susceptible et ai un grand sens de l'humour... En gros, tu peut me vanner comme tu le souhaite, je n'en prendrais jamais ombrage...

 

Encore une fois, merci à tous...

 

Amicalement aussi... ;)

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

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é