Aller au contenu

Tranformer ligne2d / a des points 3d


Messages recommandés

Posté(e)

Salut,

 

Je ne suis pas sûr d'avoir bien compris, mais tu peux essayer ce LISP.

 

Il faut le lancer dans le SCG, en vue de dessus, zoom étendu, pour que les points correspondent avec l'extrémités des lignes.

 

Taper TEST pour lancer la commande, on peut faire U pour annuler si ça ne convient pas.

 

(defun c:test (/ ssline elst pt10 pt11 ss10 ss11)
 (vl-load-com)
 (vla-StartUndoMark (vla-get-ActiveDocument (vlax-get-acad-object)))
 (command "_.undo" "_begin")
 (if (setq ssline (ssget "_A" '((0 . "LINE"))))
   (foreach line (mapcar 'cadr (ssnamex ssline))
     (setq elst (entget line)
    pt10 (cdr (assoc 10 elst))
    pt11 (cdr (assoc 11 elst))
     )
     (if (and (setq ss10 (ssget pt10 '((0 . "POINT"))))
       (setq ss11 (ssget pt11 '((0 . "POINT"))))
  )
(progn
  (setq	elst (subst (assoc 10 (entget (ssname ss10 0)))
		    (assoc 10 elst)
		    elst
	     )
	elst (subst (cons 11 (cdr (assoc 10 (entget (ssname ss11 0)))))
		    (assoc 11 elst)
		    elst
	     )
  )
  (entmod elst)
  (entupd line)
)
     )
   )
 )
 (vla-EndUndoMark (vla-get-ActiveDocument (vlax-get-acad-object)))
 (princ)
)

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

Posté(e)

Impossible avec la méthode proposée : une LWPOLYLINE est obligatoirement un objet 2D

la seule chose qu'on puisse faire c'est modifier son altitude

Il serait possible moyennant un plus gros effort de programmation de la placer dans un SCU particulier à condition que l'ensemble des points soient dans un même plan.

 

Posté(e)

Pour des LWPOLYLINE, avec les mêmes restrictions que gilles (zoom, scg ...) sans fonction de test de sélection ni contrôle d'erreur. Donc à peaufiner....

 

((lambda ( / l_2d l_z l_3d)
(setq l_2d (mapcar 'cdr (vl-remove-if '(lambda (x) (/= (car x) 10)) (entget (car (entsel))))))
(setq l_z
(mapcar
	'(lambda (x)
		(setq js (ssget "_C" x x '((0 . "POINT"))))
		(if js
			(caddr (cdr (assoc 10 (entget (ssname js 0)))))
			0.0
		)
	)
	l_2d
)
)
(setq l_3d (mapcar 'append l_2d (mapcar 'list l_z)))
(command "_.3dpoly")
(repeat (length l_3d)
(command "_none" (car l_3d))
(setq l_3d (cdr l_3d))
)
(command "")
))

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

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é