Aller au contenu

Traitement d\'un dessin


Messages recommandés

Posté(e)

Bonjour,

 

J'ai un soucis avec des DXF que je dois reprendre. Ce DXF vient d'un programme permettant de faire un DXF depuis un PDF. Malheureusement tous les cercles sont devenus des splines.

 

Ma question est :

 

Existe-il un programme (VBA ou LISP) permettant de traiter un dessin autocad en remplaçant toutes les splines en cercle ?

 

Merci pour vos réponses.

Slts

Dom

 

 

Posté(e)

Salut,

 

Un petit LISP qui devrait fonctionner dans les SCU parallèles au SCG.

 

Nouvelle version qui devrait fonctionner quelque soit le SCU courant et le plan de la spline/cercle

 

(defun c:sp2c
      (/ AcDoc Space ss n ent obj long p1 p2 p3 p4 p5 norm l1 l2 cen)
 (setq	AcDoc (vla-get-ActiveDocument (vlax-get-acad-object))
Space (if (= (getvar "CVPORT") 1)
	(vla-get-PaperSpace AcDoc)
	(vla-get-ModelSpace AcDoc)
      )
 )
 (prompt
   "\nSélectionnez les splines (ou ENTER pour toutes)."
 )
 (if (not (setq ss (ssget '((0 . "SPLINE") (-4 . "&") (70 . 8)))))
   (setq ss (ssget "_X" '((0 . "SPLINE") (-4 . "&") (70 . 8))))
 )
 (if ss
   (progn
     (vla-StartUndoMarK AcDoc)
     (repeat (setq n (sslength ss))
(setq ent  (ssname ss (setq n (1- n)))
      obj  (vlax-ename->vla-object ent)
      long (vlax-curve-getDistAtParam
	     obj
	     (vlax-curve-getEndParam obj)
	   )
      p1   (vlax-curve-getStartPoint obj)
      p2   (vlax-curve-getPointAtDist obj (* 0.3 long))
      p3   (vlax-curve-getPointAtDist obj (* 0.6 long))
      p4   (mapcar '(lambda (x y) (/ (+ x y) 2)) p1 p2)
      p5   (mapcar '(lambda (x y) (/ (+ x y) 2)) p2 p3)
      norm (norm_3pts p1 p2 p3)
      l1   (vla-addLine Space (vlax-3d-Point p4) (vlax-3d-Point p2))
      l2   (vla-addLine Space (vlax-3d-Point p5) (vlax-3d-Point p3))
)
(vla-rotate3d l1 (vlax-3d-point p4) (vlax-3d-point (mapcar '+ p4 norm)) (/ pi 2))
(vla-rotate3d l2 (vlax-3d-point p5) (vlax-3d-point (mapcar '+ p5 norm)) (/ pi 2))
(setq cen (vl-catch-all-apply
	    'vlax-invoke
	    (list l1 'IntersectWith l2 acExtendBoth)
	  )
)
(if (not (vl-catch-all-error-p cen))
  (progn
    (vla-put-Normal (vla-addCircle Space (vlax-3d-point cen) (distance cen p1)) (vlax-3d-point norm))
    (mapcar 'vla-delete (list l1 l2 obj))
  )
)
     )
     (vla-EndUndoMark AcDoc)
   )
 )
 (princ)
)

;;; NORM_3PTS retourne le vecteur normal du plan défini par 3 points

(defun norm_3pts (org xdir ydir / norm)
 (foreach v '(xdir ydir)
   (set v (mapcar '- (eval v) org))
 )
 (mapcar '(lambda (x) (/ x (distance '(0 0 0) norm)))
  (setq norm (v^v xdir ydir))
 )
)

;;; V^V Retourne le produit vectoriel (vecteur) de deux vecteurs

(defun v^v (v1 v2)
 (if (inters '(0 0 0) v1 '(0 0 0) v2)
   (list (- (* (cadr v1) (caddr v2)) (* (caddr v1) (cadr v2)))
  (- (* (caddr v1) (car v2)) (* (car v1) (caddr v2)))
  (- (* (car v1) (cadr v2)) (* (cadr v1) (car v2)))
   )
 )
) 

 

[Edité le 3/10/2006 par (gile)]

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

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é