IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Lisp Discussion :

comment trouver un centre


Sujet :

Lisp

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2010
    Messages : 2
    Points : 2
    Points
    2
    Par défaut comment trouver un centre
    Bonjour,
    Comment trouver le point centre d'un arc créé en polyligne
    L'entité me retourne

    ((-1 . <Entity name: 4009d450>) (0 . LWPOLYLINE) (330 . <Entity name:
    40086cc0>) (5 . B032) (100 . AcDbEntity) (67 . 0) (410 . Model) (8 . MESP) (100
    . AcDbPolyline) (90 . 2) (70 . 0) (43 . 0.0) (38 . 0.0) (39 . 0.0) (10 2972.91
    464.572) (40 . 0.0) (41 . 0.0) (42 . 0.3268) (10 3563.16 333.767) (40 . 0.0)
    (41 . 0.0) (42 . -35.1074) (210 0.0 0.0 1.0))

    J'ai mes deux x,y de mes chaques point, mais aucun point centre.

    C'est surment en faisant un (assoc 42 <entity>) mais comment le calculer ?

    Merci d'avance
    Alex

  2. #2
    Membre du Club
    Inscrit en
    Juillet 2010
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 33
    Points : 42
    Points
    42
    Par défaut
    Salut

    Pour faire au plus simple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    (defun cenpoly(ent / doc reg res)
      (vl-load-com)
      (setq doc (vla-get-activedocument (vlax-get-acad-object)))
      (and (eq (type ent) 'ENAME) (setq ent (vlax-ename->vla-object ent)))
      (and (eq (vla-get-objectname ent) "AcDbPolyline")
           (eq (vla-get-closed ent) :vlax-true)
        (setq reg (vlax-invoke (if (eq (getvar "cvport") 1)
    			     (vla-get-paperspace doc)
    			     (vla-get-modelspace doc)
    			   )
    			   'addregion
    			   (list ent)
    	      )
    	res (trans (vlax-get (car reg) 'centroid) 1 0)
        )
        (vla-delete (car reg))
      )
      res
    )
    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (cenpoly (car (entsel)))
    @+

  3. #3
    Membre habitué
    Inscrit en
    Juin 2002
    Messages
    198
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 198
    Points : 139
    Points
    139
    Par défaut
    Un truc que j'ai écris il y a longtemps:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
     
    ;22-04-2007
    ;th. Ma.
    ;draw the center lines of a pline arc
    ;dessine les axes d'un arc d'une pline
    ;CenterLinePline : cpl.lsp
     
    (defun c:cpl(/ axe apoint1 apoint2 orientation mpoint distP1P2 angleP1P2 
    		fleche centre rayon p1 p2 p3 p4 oldlay)
     
    	(setq apline (entsel "\nSelect arc of polyline...:"))
    	(setq apoint (cadr apline))
    	(setq 	axe (vlax-ename->vla-object(car apline)))
     
    	(setq position (vlax-curve-getClosestPointTo axe apoint))
    	(setq indexPosition (fix(vlax-curve-getParamAtPoint axe position)))
    	(setq orientation(* 4 (atan(vla-getbulge axe IndexPosition))))
    	(setq aPoint1(vlax-safearray->list(vlax-variant-value(vlax-get-property axe 'coordinate indexPosition))))
    	(setq indexPosition (+ 1 indexPosition))
    	(if (and(> indexPosition (-(/(length(vlax-get axe 'coordinates)) 2.0)2))
    			(/= (vlax-get axe 'closed)0)
    		)
    		(setq indexPosition 0)
    	)
    	(setq aPoint2(vlax-safearray->list(vlax-variant-value(vlax-get-property axe 'coordinate indexPosition))))
    	(if (= orientation 0.0)
    		(setq orientation(* 4 (atan(vla-getbulge axe IndexPosition))))
    	)
    	(vlax-release-object axe)
    	(setq mpoint (list
    			(/ (+(car apoint1)(car apoint2))2)
    			(/ (+(cadr apoint1)(cadr apoint2))2)
    	))
     
    	(setq distP1P2 (distance apoint1 apoint2))
    	(setq angleP1P2 (angle apoint1 apoint2))
    	(setq fleche (/ distP1P2 (* 2(tan (/ orientation 2.0)))))
    	(setq centre (polar mPoint (+ angleP1P2 (/ pi 2)) fleche))
    	(setq rayon (* 1.1(distance apoint1 centre)))
    	(setq p1 (list (car centre)(+(cadr centre)rayon)))
    	(setq p2 (list (car centre)(-(cadr centre)rayon)))
    	(setq p3 (list (+(car centre)rayon)(cadr centre)))
    	(setq p4 (list (-(car centre)rayon)(cadr centre)))
     
    	(command "undo" "be")
    	(setq oldlay (getvar"clayer"))
    	;(setvar "clayer" "am_7")
    	(command "line" "none" p1 p2 "")
    	(command "line" "none" p3 p4 "")
    	;(setvar "clayer" oldlay)
     
    	(command "undo" "E")
     
    	(princ)
    )

Discussions similaires

  1. comment trouver le centre d'une empreinte
    Par usto2005 dans le forum Traitement d'images
    Réponses: 5
    Dernier message: 04/05/2008, 15h55
  2. Comment trouver de vieux outils (MASM51 CL PROM86 XLINK86)
    Par CFred dans le forum Choisir un environnement de développement
    Réponses: 2
    Dernier message: 11/01/2005, 17h54
  3. Réponses: 3
    Dernier message: 21/01/2004, 08h47
  4. Comment trouver le répertoire démarrage sous 98?
    Par PHILOSOPHE dans le forum API, COM et SDKs
    Réponses: 6
    Dernier message: 18/11/2003, 20h10
  5. [CR] Comment trouver un champs dans un report ??
    Par Madduck dans le forum SAP Crystal Reports
    Réponses: 4
    Dernier message: 18/09/2003, 08h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo