Aller au contenu

Coordonnées du 1/2 cercle d'un Lwpolyline


Messages recommandés

Posté(e)

Bonjour,

Voila mon problème, j’ai une LWPOLYLINE ouverte décrivant un cercle, et je voudrais obtenir les coordonnées du centre du « cercle ».

Dans un premier temps je dois filtrer la LWpolyline par son AIRE >0 et ensuite dessiner un cercle de même rayon que cette LWpolyline.

Mon code traite plusieurs types d’objet sous cette forme (sans les Lwpolyline)

 

(defun c:dalle (/ cmdecho)

 

;selection des entités

 

(setq selection (ssget '((0 . "ARC,CIRCLE,line"))))

 

;nombre d'entitees dans la selection

 

(setq nb (sslength selection))

 

(setq nb1 0)

 

(while (< nb1 nb) ;boucle

 

(setq ptname (ssname selection nb1)) ;recuperation du nom

(setq ptcoord (cdr (assoc 10 (entget ptname)))) ;recuperation des coordonnées

(setq ptcalque (cdr (assoc 8 (entget ptname)))) ;recuperation du calque

(setq pttypeligne (cdr (assoc 6 (entget ptname)))) ;recuperation type de ligne

(setq ptrayon (cdr (assoc 40 (entget ptname)))) ;recuperation du rayon

(setq ptcouleur (cdr (assoc 62 (entget ptname)))) ;recuperation du rayon

 

;si nil c'est DUCALQUE

;(alert (strcat "Type de l'Entité selectionnée :" (cdr (assoc 0 (entget ptname)))))

 

; cas des cercle

(if (or (= (cdr (assoc 0 (entget ptname))) "CIRCLE") (= (cdr (assoc 0 (entget ptname))) "ARC"))

(progn

(if (or ( = nil pttypeligne) ( = "Continuous" pttypeligne)) (command "_circle" ptcoord "_d" 30))

) ;fin progn

) ;fin if cercle

 

; cas des lignes

(if (= (cdr (assoc 0 (entget ptname))) "LINE")

(progn

(if ( = nil ptcouleur) (command "_line" (cdr (assoc 10 (entget ptname))) (cdr (assoc 11 (entget ptname))) ""))

(if ( = "CACHE" pttypeligne) (command "_line" (cdr (assoc 10 (entget ptname))) (cdr (assoc 11 (entget ptname))) ""))

) ;fin progn

) ;fin if ligne

 

(setq nb1 (+ nb1 1))

 

); fin while

); fin defun

Posté(e)

Coucou

 

je t'ai fait un lisp vite fait, donc sans beaucoup de contrôles

et SURTOUT qui part du principe de ce qu'on voit sur ton image.

 

c'est à dire que tu cherches les coordonnées du centre d'une polyligne

qui n'est composée que d'un arc plat.

 

de toute façon c'est une piste de recherche si ce n'est pas le cas de toutes tes polylignes.

 

(setq ent (car(entsel)))

(if (and 
     (= "LWPOLYLINE" (cdr (assoc 0 (entget ent))))
     (equal 1 (cdr (assoc 42 (entget ent)))0.00000001)
     )
 
 (progn
   (setq lispol (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 10)) (entget ent))))
   (setq ray (/ (distance (nth 0 lispol)(nth 1 lispol))2)
  gis (angle (nth 0 lispol)(nth 1 lispol))
  centre (polar (nth 0 lispol) gis ray)
  )
   )
     (alert "l'ojet n'est pas une polyligne ou bien n'est pas un arc plat")
     )
 

 

NB le "equal" avec un tampon c'est pour pallier l'imprécision bien connue des nombres...

 

amicalement

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é