Aller au contenu

Prob d\'entités sur spline


Drizzt

Messages recommandés

Bonjour,

J'ai régulièrement des fichiers avec des spline en 3d et je voudrai les passer en 2d.

Je vais donc dans les entités pour récupérer les coordonnées (10 . X Y Z), seulement voila avec ma manière je n'obtiens que la dernière coordonnée.

POUQUOI ET COMMENT FAIRE ???

 

 

Ma manip :

(setq a (ssget))

(setq no (ssname a i))

(setq b (entget no))

(setq c (assoc 10 b))

 

liste d'info recup dans b (exemple):

((-1 . ) (0 . "SPLINE") (330 .

4005dcf8>) (5 . "76") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0")

(100 . "AcDbSpline") (210 0.281384 -0.467558 0.837981) (70 . 8) (71 . 3) (72 .

12) (73 . 8) (74 . 6) (42 . 1.0e-010) (43 . 1.0e-010) (44 . 1.0e-010) (40 .

0.0) (40 . 0.0) (40 . 0.0) (40 . 0.0) (40 . 51.2835) (40 . 114.295) (40 .

181.235) (40 . 257.663) (40 . 310.473) (40 . 310.473) (40 . 310.473) (40 .

310.473) (10 133.585 267.114 104.182) (10 148.551 276.601 104.45) (10 181.905

297.746 105.048) (10 241.622 288.276 79.7121) (10 294.103 255.52 43.8133) (10

281.481 171.681 1.27307) (10 234.951 172.42 17.3093) (10 215.938 172.721

23.862) (11 133.585 267.114 104.182) (11 179.35 290.117 101.65) (11 238.03

285.228 79.2179) (11 281.731 248.629 44.123) (11 266.597 181.161 11.5607) (11

215.938 172.721 23.862))

 

et liste d'info dans c :

(10 133.585 267.114 104.182)

 

Merci d'avance !!!

Lien vers le commentaire
Partager sur d’autres sites

(mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 10)) (entget

no)))

 

Essaies-voir avec (vl-load-com) avant si tu es sous 2000.

 

Je regarde de mon côté, c'est la manière la plus fumeuse d'extraire tous les codes 10, présentés par notre webmaster préféré.

 

[édité]Avec 0 à la place de i, ca marche chez moi.

 

[Edité le 13/10/2004 par Tramber]

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Lien vers le commentaire
Partager sur d’autres sites

WAHOUUUU !!!

 

Super ca fonctionne !!!!

j'ai pas compris toutes la manip mais ca fonctionne

 

MERCI TRAMBER :D

 

Je suis sous 2000 oui, mais que fait (vl-load-com) et (vl-remove-if-not ...) car je n''ai pas de doc sur ces commandes ??? (Pour mapcar et lambda j'ai, donc je vais essayer de comprendre)

 

 

Lien vers le commentaire
Partager sur d’autres sites

He oui, bien pratique cette fonction d'extraction des sommets (Merci à Serge Camiré)

 

Cequi pourrait donner comme fonction pour ton cas:

(defun c:spl3Dto2D ( / old_osmd e l_som 2d_lsom)
(setq old_osmd (getvar "osmode"))
(setvar "osmode" 0)
(setq l_som (mapcar '(lambda (x) (trans x e 0)) (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 10)) (entget (setq e (car (entsel "\nChoix de la spline 3D"))))))))
(setq 2d_lsom (mapcar '(lambda (x) (trans (list (car x) (cadr x) 0.0) 0 1)) l_som))
(command "_.pline"
	(foreach n 2d_lsom (command n))
)
(command "_.pedit" (entlast) "_spline" "")
(initget "Non Oui")
(if (eq (getkword "\nEffacer la spline3 ") "Non")
	(princ "\nBien Chef, on conserve")
	(entdel e)
)
(setvar "osmode" old_osmd)
(prin1)
)

 

Pour débuter en lisp tu n'as pas choisi le plus simple ;)

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

Lien vers le commentaire
Partager sur d’autres sites

Merci pour le fichier Bonuscad ca fonctionne très bien, mais c'est pour une spline à la fois or moi c'est plusieur d'un coup (là j'ai un fichier de 445 spline en 3d) tu vois le coup ?

Mais sinon c'est super !!!

 

Et comme tu dis je n'ai pas choisi le plus simple mais je fais avec mes prob les plus urgenntttttt !!!

 

Mais je persisite ....

Lien vers le commentaire
Partager sur d’autres sites

La pour débuter c'est plus à ta portée...

 

Flatten des Express Tools n'aurait-il pas fait l'affaire?

 

Voilà quand même pour l'exemple ce que tu veux executer.

(defun c:spl3Dto2D ( / flag_erase old_osmd e l_dxf l_som 2d_lsom )
(setvar "cmdecho" 0)
(initget "Général Courant _Wolrd Current")
(if (eq (getkword "\nProjection 2D dans SCU [Général/Courant]: ") "Wolrd")
	(command "_.ucs" "_world")
)
(initget "Oui Non _Yes No")
(if (eq (getkword "\nEffacer la spline3 [Oui/Non] ") "No")
	(progn (princ "\nBien Chef, on conserve") (setq flag_erase T))
	(setq flag_erase nil)
)
(setq old_osmd (getvar "osmode"))
(setq js (ssget "_X" '((0 . "SPLINE") (67 . 0) (410 . "Model"))))
(cond
	(js
		(command "_.undo" "_begin")
		(setvar "osmode" 0)
		(repeat (setq n (sslength js))
			(setq l_dxf (entget (setq e (ssname js (setq n (1- n))))))
			(setq l_som (mapcar '(lambda (x) (trans x e 0)) (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 10)) l_dxf))))
			(setq 2d_lsom (mapcar '(lambda (x) (trans (list (car x) (cadr x) 0.0) 0 1)) l_som))
			(command "_.pline"
				(foreach n 2d_lsom (command n))
			)
			(command "_.pedit" (entlast) "_spline" "")
			(if (not flag_erase)
				(entdel e)
			)
		)
		(setvar "osmode" old_osmd)
		(command "_.undo" "_end")
	)
	(T
		(princ "\nAucune Spline trouvée")
	)
)
(setvar "cmdecho" 1)
(prin1)
)

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

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é