Aller au contenu

Inserer des Vertex sur une Polyligne 2D/3D


lecrabe

Messages recommandés

 

Hello

 

SVP je fais appel comme d'habitude "aux developpeurs fous" de ce forum ! :)

 

Je n'ai pas trouve (ou retrouve) de routines pour faire la chose suivante : :o

 

1) Poser une question : Longueur maximum = xx.xx

 

2) A partir d'une selection classique AutoCAD, on ne retient que les polylignes 2D (normale, lissee, splinee) ou 3D (normale, splinee) et Closes ou Non !

 

Pour chaque segment de la polyligne trop long (longueur superieure > xx.xx), on genere un nouveau point (au milieu) sur le segment et on recommence l'analyse sur le segment pour retraiter eventuellement et ainsi de suite ...

- Polyligne 2D et 3D : sur les segments c OK

- Polyligne 2D avec Arc : on coupe en 2 l'arc

- Polyligne Lisse ou Spline, on fait comment ?

 

Ainsi cela permet de complexifier une polyligne "trop simple ou trop directe par endroit" !

 

Bien entendu, je desire conserver les eventuels XDATAs

et AUSSI les eventuels Object Data de MAP/CIVIL ! ;)

 

A votre bon coeur et je vous remercie d'avance, le Decapode

 

 

 

 

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Salut,

lecrabe pourrait tu preciser à quoi sa peut servir à part alourdir les dessins et peut generer des MNT plus incorrect ???

Sinon en addaptant Addvtx de Gile...

 

Par hasard aurait tu projeter point/MNT ????

DAO: AutoCAD(2D & 3D), Covadis

CAO: 3D's MAX, Rhinoceros 3D, REVIT

GeoModeliSation: AutoCAD MEP, RhinoTerrain

Rendu: Vray for Rhino, Keyshot, Lumion

Programmation: Grasshopper, Dynamo, VisualStudio

 

C.V.

Profil LinkedIn

Book

Site web

 

http://nsa37.casimages.com/img/2016/09/26/160926023334168603.jpg

Lien vers le commentaire
Partager sur d’autres sites

 

Hello

 

Car parfois on "tombe" sur des dessins de reseaux ou canalisations avec des segments (ou meme des arcs !) de longueur "anormales" dans le sens "Realisation physique"

 

Par exemple une belle polyligne avec qq segments de grande longueur montrant une liaison fibre optique !

 

Logiquement (ou schematiquement) c correct mais physiquement il faut par exemple poser une chambre (ou autre dispositif quelconque pour re-amplifier le signal) tous les xxx.xx metres

 

Idem avec des dessins de canalisation ou il faudrait un regard/tampon tous les xxx.xx metres ou une vanne ou etc ...

 

On peut supposer qu'il y aurait eventuellement un equipement a chaque vertex existant !

 

Attention je ne veux pas couper la polyligne sinon j'aurais utiliser les excellentes routines DIVCUT et MESCUT de Gilles !

 

Par exemple j'imagine que Gilles pourrait repartir plus ou moins de DIVCUT/MESCUT mais bon il faudrait etre sans doute "un peu recursif" pour subdiviser N fois les segments / arcs tres longs !

 

En resume : je desire que la routine insere des vertex automatiquement des qu'elle trouve des segments ou arcs trop longs !

 

Le Decapode

 

 

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Je le redit mais je pense vraiment qu'il faut repartir de Addvtx qui ajoute des vertex au lieu de

DIVCUT et MESCUT de Gilles !
qui coupe...

DAO: AutoCAD(2D & 3D), Covadis

CAO: 3D's MAX, Rhinoceros 3D, REVIT

GeoModeliSation: AutoCAD MEP, RhinoTerrain

Rendu: Vray for Rhino, Keyshot, Lumion

Programmation: Grasshopper, Dynamo, VisualStudio

 

C.V.

Profil LinkedIn

Book

Site web

 

http://nsa37.casimages.com/img/2016/09/26/160926023334168603.jpg

Lien vers le commentaire
Partager sur d’autres sites

Je propose la routine que pour des LWPOLYLINE.

 

Elle ne sera qu'un exemple pour celles-ci. On peut après construire une boucle et faire appel à la fonction (add_vtx) avec les paramètres requis pour agir avec des mesures, des divisions ou point ponctuel.

 

Libre à vous d'en faire plus...

 

(vl-load-com)
(defun add_vtx (obj add_pt ent_name / bulg)
 (vla-addVertex
   obj
   (1+ (fix add_pt))
   (vlax-make-variant
     (vlax-safearray-fill
       (vlax-make-safearray vlax-vbdouble (cons 0 1))
         (list
           (car (trans (vlax-curve-getpointatparam obj add_pt) 0 ent_name))
           (cadr (trans (vlax-curve-getpointatparam obj add_pt) 0 ent_name))
         )
     )
   )
 )
 (setq bulg (vla-GetBulge obj (fix add_pt)))
 (vla-SetBulge obj
   (fix add_pt)
   (/
     (sin (/ (* 4 (atan bulg) (- add_pt (fix add_pt))) 4))
     (cos (/ (* 4 (atan bulg) (- add_pt (fix add_pt))) 4))
   )
 )
 (vla-SetBulge obj
   (1+ (fix add_pt))
   (/
     (sin (/ (* 4 (atan bulg) (- (1+ (fix add_pt)) add_pt)) 4))
     (cos (/ (* 4 (atan bulg) (- (1+ (fix add_pt)) add_pt)) 4))
   )
 )
 (vla-update obj)
)
(defun c:add_vertex ( / js obj_vla e_name pt)
 (while (null (setq js (ssget "_+.:E:S" '((0 . "LWPOLYLINE")))))
   (princ "\nCe n'est pas un objet valable!")
 )
 (setq obj_vla (vlax-ename->vla-object (setq e_name (ssname js 0))))
 (sssetfirst nil js)
 (while (setq pt (getpoint "\nPosition du sommet: "))
   (add_vtx obj_vla (vlax-curve-getparamatpoint obj_vla (vlax-curve-getClosestPointTo obj_vla (trans pt 1 0))) e_name)
   (sssetfirst nil js)
 )
 (sssetfirst)
 (prin1)
)

 

PS: Activer au moins une fois les grips (puis faites Esc pour les désactiver) pour bien voir les grips des nouveaux sommets se mettre en place lors de l'utilisation de la routine.

 

[Edité le 29/9/2010 par bonuscad]

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

Lien vers le commentaire
Partager sur d’autres sites

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é