Aller au contenu

[Résolu] Transformer une Polyligne


Messages recommandés

Posté(e)

Bonjour,

 

j'ai une polyligne contenant des droites et des arcs j'aimerais le convertir en droites (ligne) et cercles

 

(cercle tangent a deux droites )

 

je ne sais comment faire

 

existe t'il un utilitaire ou un lisp pouvant le faire ?

 

Merci d' avance

En devenant sincère, l'amour devient généreux.

 

Autocad Map 2015 Covadis V16  et Mensura V9

MacBook Pro 2019

Win10 64 bits

Posté(e)

Bonjour Laurent,

 

Justement j ai décomposé mais je ne veux pas des arcs et des droites je veux des cercles complet et des droites

 

Amicalement

 

Ps:j ai pas reçu le mail par ailleurs dans deux semaines es ce que tu pourra être libre

En devenant sincère, l'amour devient généreux.

 

Autocad Map 2015 Covadis V16  et Mensura V9

MacBook Pro 2019

Win10 64 bits

Posté(e)

Ouai enfin tu prend la commande cercle, tu accroche le centre de l'arc et un point sur l'arc et tu as ton cercle. Je comprend pas bien la méthode de lovecraft.

Autocad 2015 - Lumion 3D - SCIA Engineer

I7 6700K 4 cores @4.0Ghz - 32Go DDR4 - GTX980ti 6Gb - SSD 512Go - Windows 7 64 bits.

Posté(e)

Copie-colle directement ce qui suit en ligne de commande pour voir si ça te convient...

 

((lambda ( / js borne ss suivant n ent dxf_code)
 (setq js (ssget "_+.:E:S" '((0 . "LWPOLYLINE"))))
 (cond
   (js
     (setvar "CMDECHO" 0)
     (command "_.point" (getvar "VIEWCTR"))
     (setq borne (entlast))
     (command "_.explode" js)
     (setvar "CMDECHO" 1)
     (if (and borne (entget borne))
       (progn
         (setq ss (ssadd))
         (while (setq Suivant (entnext Borne))
           (if (eq (cdr (assoc 0 (entget Suivant))) "ARC")
             (ssadd Suivant ss)
           )
           (setq Borne Suivant)
         )
         (cond
           (ss
             (repeat (setq n (sslength ss))
               (setq
                 dxf_code (entget (setq ent (ssname ss (setq n (1- n)))))
                 dxf_code (subst '(0 . "CIRCLE") '(0 . "ARC") dxf_code)
               )
               (foreach n (list '(100 . "AcDbArc") (assoc 50 dxf_code) (assoc 51 dxf_code))
                 (setq dxf_code (vl-remove n dxf_code))
               )
               (entdel ent)
               (entmake dxf_code)
             )
           )
         )
       )
     )
     (entdel borne)
   )
 )
 (prin1)
))

  • Upvote 1

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

Posté(e) (modifié)

Bonjour,

 

J’ai perdu bonuscad a été le plus rapide, ma proposition de code pour une sélection unique..

 

;; Décompose une Polyligne (LWPOLYLINE):
;;      Les lignes   -> lignes
;;      Les arcs     -> cercle
;; Tapez lwp2cl pour lancer la commande
(defun c:lwp2cl	(/ space ent)
 (vl-load-com)
 (setq space (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object))))
 (cond
   ((eq (cdr (assoc 0 (entget (setq ent (car (entsel)))))) "LWPOLYLINE")
    (foreach obj (vlax-invoke (vlax-ename->vla-object ent) 'Explode)
      (if (eq (vla-get-ObjectName obj) "AcDbArc")
 ((lambda (obj1 obj2)
    (foreach prop '(Layer Color LineType LinetypeScale Normal)
      (vlax-put obj2 prop (vlax-get obj1 prop))
    )
    (vla-Delete obj1)
  )
   obj
   (vla-AddCircle space (vla-get-Center obj) (vla-get-Radius obj))
 )
      )
    )
    (entdel ent)
   )
 )
 (princ)
)

 

 

EDIT: Intégration de la propriété Normal au code pour supporter d’éventuelles rotations du SCU sur ses axes X et Y.

Modifié par VDH-Bruno
  • Upvote 1

Apprendre => Prendre => Rendre

Posté(e)

Bonsoir,

 

Merci Beaucoup à tous en particulier à Bonuscad et VDH-Bruno

 

parfait, j obtient ce donc je recherchais mais je perds autre chose la tangence .

 

Le cercle n est pas tangent aux droites j' aimerais qu'il le soit

 

http://i42.servimg.com/u/f42/15/62/62/90/01110.jpg

 

Amicalement

En devenant sincère, l'amour devient généreux.

 

Autocad Map 2015 Covadis V16  et Mensura V9

MacBook Pro 2019

Win10 64 bits

Posté(e)

Bonsoir Maxwell85,

 

Pourquoi ne passes tu pas par la création d'axe avec ajustement optimal ? Car celui-ci va te reconstruire l'axe avec les bons points de tangence (Cf capture)

 

http://img11.hostingpics.net/pics/122348Capture.jpg

 

On peut constater sur cette image que Civil reconstruit un axe avec comme support la polyligne 2D...ensuite il respecte les points de tangences

 

Cordialement,

 

Laurent

Posté(e)

Bonsoir Laurent,

 

j ai justement entendu parler de cette méthode mais je m'y connais pas trop j ai essayé de

 

bidouiller mais sans succès.

 

Amicalement

En devenant sincère, l'amour devient généreux.

 

Autocad Map 2015 Covadis V16  et Mensura V9

MacBook Pro 2019

Win10 64 bits

Posté(e)

Bonsoir Laurent,

 

Voici le lien pour le fichier :Fichier

 

Amicalement

En devenant sincère, l'amour devient généreux.

 

Autocad Map 2015 Covadis V16  et Mensura V9

MacBook Pro 2019

Win10 64 bits

Posté(e)
Le cercle n est pas tangent aux droites j' aimerais qu'il le soit

Je pense que les cercles sont bien tangents aux lignes, il peut difficilement en être autrement quand les cercles ont les mêmes centres et rayons que les arcs (si ces arcs sont eux-même tangents aux lignes).

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

Posté(e)

Bonsoir ,

voici le code que j' utilise pour créer un fichier de commande

 

(defun c:axe ( / lparam fonc_long_clotho input typf oldRSCL sslin sscer orig)

;--------------------
; Variables globales   
;--------------------

(setq lparam '(
	(RSCL 240      "Rayon minimal sans clothoide (0 pour aucune clothoide)          ")
	(KMAX 67       "Longueur maximale de clothoide en metres                        ")
	(PRECMP 5      "Nombre de decimales pour l'exportation vers Micropiste          ")
	(EXTMAP "MAP"  "Extension par defaut des fichiers d'axe en plan pour Micropiste ")
))
(_param lparam)
(setq PRECAXE 6 EXTAXE "XAP")

;-----------------------------------------------------------------
; fonction donnant la longueur de clotho en fonction du rayon 'ray'
; et KMAX, longueur maximale
;-----------------------------------------------------------------

(setq fonc_long_clotho '(min (* 6.0 (expt (Abs ray) 0.4)) KMAX) )
					


;--------------------
;
;--------------------

(PrinC "\nCouche : <")(princ (GetVar "CLAYER"))(princ "> ")
(setq lay (GetString))
(If (= lay "") (setq lay (GetVar "CLAYER")) )


(initget "O,o N,n")
(setq input (getkword "\nVoulez-vous ordonner les cercles et les droites O/N <O> "))
(if (or (null input) (= input "O")) (_ordap))


;--------------------
; lecture des entites
;--------------------

(princ "\nLecture des entites en cours...")
(SetQ sslin (ssget "x" (List '(0 . "LINE") (Cons 8 lay)) )
		sscer (ssget "x" (List '(0 . "CIRCLE") (Cons 8 lay)) )
)
(princ "\nLecture des entites terminee.")
(if (or (null sslin)
		  (null sscer)
		  (/= (sslength sscer) (1- (sslength sslin)))   )
	(progn
		(close f)
		(princ "\nIl doit y avoir (n+1) droites pour n cercles.")
		(exit)
	)
)
(princ "\n") (princ (sslength sslin)) (princ " droites.")
(princ "\n") (princ (sslength sscer)) (princ " cercles.")
(princ "\nOK.")

(princ "\nPK du premier point ")(princ (cdr (assoc 10 (entget (ssname sslin (1- (sslength sslin)))))))
(if (setq input (getreal " <0.000> ")) (setq orig input) (setq orig 0.0))

(initget "O N")
(setq input (getkword "\nMettre des clothoides O/N <O> "))
(if (= input "N")(setq oldRSCL RSCL RSCL 0)(setq oldRSCL RSCL))

(initget "3 4 A Q")
(setq typf (getkword "\nVoulez-vous generer un fichier (MicroPiste[3]/Piste+[4]/[Q]uitter) <4> "))
(if (/= typf "Q")
	(progn
		(cond
			((null typf)  (setq typf 'T)) 
			((= typf "3") (setq typf nil))
		)
		(cond
			((= typf "A") (_genxap sslin sscer fonc_long_clotho orig))
			(T            (_genmap sslin sscer fonc_long_clotho orig typf))
		)
	)
)

(setq RSCL oldRSCL)

(princ)
)
(princ "AXE ")

 

Mais ce qui me surprends c' est que j n'obtiens pas ce que je recherche pourtant les Lisp

 

posté Précédemment par Bonuscad et Bruno semblaient résoudre le problème

 

http://i42.servimg.com/u/f42/15/62/62/90/000010.jpg

 

Ps: Merci pour la modification Laurent

Amicalement

En devenant sincère, l'amour devient généreux.

 

Autocad Map 2015 Covadis V16  et Mensura V9

MacBook Pro 2019

Win10 64 bits

Posté(e)
Je pense que les cercles sont bien tangents aux lignes, il peut difficilement en être autrement quand les cercles ont les mêmes centres et rayons que les arcs (si ces arcs sont eux-même tangents aux lignes).

 

Je pense aussi la même chose, mais le problème récurent est que les entités sont définies dans un système de coordonnées générale avec une mantisse importante qui "bouffent" la précision des décimales.

En effet certains cercles deviennent impossible à ajuster aux tangentes, Autocad ne trouve plus les intersections.

 

La solution (sans applicatifs supplémentaires) est de déplacer temporairement l'axe vers l'origine avant d'appliquer les routines proposées. En faisant cela on retrouve bien les points de tangences, et les ajustements peuvent se faire.

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

Posté(e)

Bonsoir Bonuscad ,

 

J'ai effectivement déplacer l' axe vers l' origine mais le problème posté dans le précédent

 

post ( à savoir quant je lance la commande "axe" sur la polyligne converti la première droite

 

disparaît par contre quand je crée 2 droites et un cercle avec la méthode 2points de

 

tangence -rayon quand je relance la commande "axe" il crée le fichier de commande)

 

persiste.

 

Amicalement

En devenant sincère, l'amour devient généreux.

 

Autocad Map 2015 Covadis V16  et Mensura V9

MacBook Pro 2019

Win10 64 bits

Posté(e)

Bonjour maxwell85

 

En utilisant le code que j’ai posté précédemment c:lwp2cl, tu ne devrais pas avoir ce problème, au passage j’ai inclus la propriété Normal, le code devrait maintenant pouvoir supporter les rotations de SCU.

 

Je me fais en ce moment suffisamment de nœud au cerveau pour comprendre les notions de repères (SCO SCU SCG SCV), ainsi que sur les problèmes de transformation (rotations déplacements échelles) qu’il aurait été «criminel» pour moi de ne pas intégrer cette fonctionnalité dans le code que je diffuse.

 

A+

Apprendre => Prendre => Rendre

Posté(e)

Bonjour Bruno,

 

Merci pour la Modification mais le problème persiste

 

quant je lance la commande axe ayant au préalable converti la polyligne en cecle +droite la

 

premier droite disparaît

 

par contre quant je crée le cercle par la méthode (2 points de tangence +rayon) et je relance la

 

commande axe ça marche , je ne comprends pas pourquoi

 

Amicalement

 

http://i42.servimg.com/u/f42/15/62/62/90/000010.jpg

En devenant sincère, l'amour devient généreux.

 

Autocad Map 2015 Covadis V16  et Mensura V9

MacBook Pro 2019

Win10 64 bits

Posté(e)

Bonjour,

 

Dans ma réponse précédente je n’ai pas répondu sur le fonctionnement de ta commande axe, mais sur la conversion de la polyligne en cercle+ligne car le disfonctionnement que tu as relevé, je l’avais reproduit en testant la version de bonuscad, je proposais d’éventuellement de tester avec l’autre code au cas ou..

 

A+

(Ps : Pour axe difficile de tester et de répondre il manque les routines associées..)

Apprendre => Prendre => Rendre

Posté(e)

Bonsoir Bruno,

 

J'ai essayé la commande Ajusté

 

avec la mise a jour du code mais ça ne marche pas aussi.

 

c:lwp2cl

 

http://i42.servimg.com/u/f42/15/62/62/90/02222210.jpg

 

 

Amicalement

En devenant sincère, l'amour devient généreux.

 

Autocad Map 2015 Covadis V16  et Mensura V9

MacBook Pro 2019

Win10 64 bits

Posté(e)

Bonjour maxwell85,

 

J'ai essayé la commande Ajusté

avec la mise a jour du code mais ça ne marche pas aussi.

c:lwp2cl

Déjà la première droite ne s’efface plus c’est un progrès ;-)

 

Plus sérieusement j’ai essayé ta manip d’ajustement avec sur le fichier que tu as joint en exemple, alors effectivement il y a des cas où l’ajustement n’est pas possible..

 

La raison du pourquoi comment est brillamment expliqué en réponse n°17 par bonuscad, car maintenant si tu rapproches tes entités de dessin vers l’origine du SCG avant de lancer lwp2cl tu n’auras plus ce problème et tous tes cercles générés pourrons s’ajuster aux droites adjacentes.

 

J’ai testé pour toi, au passage il y a une coquille dans ton fichier dessin au niveau des sommets 11, 12, 13, de ta polyligne, en théorie il manque une courbure au cas où le détail aurait son importance.. (lance la commande liste sur la polyligne pour t’en convaincre).

 

Voilà en espérant ton problème résolu..

A+

  • Upvote 1

Apprendre => Prendre => Rendre

Posté(e)

Bonsoir Bruno,

 

Problème Résolu,

 

Merci.

 

Amicalement.

En devenant sincère, l'amour devient généreux.

 

Autocad Map 2015 Covadis V16  et Mensura V9

MacBook Pro 2019

Win10 64 bits

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é