Aller au contenu

encore des poly3d


x_all

Messages recommandés

bonjour

 

j'avais créer un bout de lisp pour afficher les fils d'eau sur une poly 2d. (http://cadxp.com/topic/38702-fil-deau-et-interpolations-lineaires/)

 

c'est bien utile, mais je fait de plus en plus de 3d à la maison, et comme je dois pas être le seul je me dis qu'il faudrait faire le même genre de truc pour des poly3d, histoire de faire des canalisation en 3d suivant un axe vite tracé.

 

c'est la charrette aujourd'hui, j'ai pas trop le temps de m'y mettre, mais si un spécialiste du codage à un peu de temps, c'est peut être pas super compliqué quand on sait ce qu'on fait.

 

le but du jeu.

en partant une poly 2d le lisp trace une poly3d

2 cas

soit on donne une alti de départ et la pente

soit on donne l'alti de départ et l'alti d'arrivée

 

le peu que j'ai regardé, les poly 3d marche quand même pas bien comme les poly 2d et c'est peut etre pas si simple... en tout cas pour moi...

 

 

au passage, ya moyen de faire ça avec Covadis, mais je ne me rappelle plus du mode opératoire... si qq1 peu me rafraichir la mémoire

 

merci

 

edit, yaé pour covadis, c'est dans cov3d /édition des poly3d, il y a tous ces outils et bien d'autres...

Lien vers le commentaire
Partager sur d’autres sites

Avec COVADIS, plusieurs solutions:

 

 

1 point topo à chaque extrémité, puis Cov3D / Construction3D / Transfo 2D-3D

 

ou

 

Cov3D / Poly2D / Convertir en 3D, puis tu fixes le Z du 1er point et du dernier (si connu) soit par l'OPM d'AutoCAD, soit par la grille de Covadis (sélection de la poly3D, puis clic-droit Opération3D / grille de modif) , puis sélection de la poly3D, clic-droit "pente fixée entre 2d points", sélection du 1er jusqu'au dernier, puis U pour interpoler une pente uniforme entre le Z dbut et le Z fin, ou bien tu saisis la pente à fixer depuis le 1er point. Si tu dois fixer la pente, tu peux aussi le faire directement dans le grille (plus besoin de la commande "pente fixée entre 2 points)

ATTENTION : cette méthode supprime la poly2D

 

ou

 

Cov3D / Poly3D / Construire clic-droit "Saisir l'altitude", cliquer le 1er point et saisir son Z, puis clic-droit "Altitude interpolée", puis option G (seGment) pour suivre la géométrie de la poly2D à suivre, puis clic-droit "Saisir l'altitude" et cliquer sur le dernier point et rentrer son altitude. Les sommets intermédiaires seront interpolés.

 

Dans tous les cas, les segments de poly2D en arcs sont discrétisés selon la valeur de flêche (Cova3D / Gestion poly3D / Flêche de discrétisation)

 

Olivier

Lien vers le commentaire
Partager sur d’autres sites

J'avais oublier la grille... c'est quand même autre chose que la fenêtre des propriété :)

Salut,

je n'avais jamais repéré cette fonctionnalité !

effectivement, elle est très utiles, car l'accrochage aux objet en 3d laisse très souvent à désirer, et il n'est par rare qu'une polyligne 3d créée par accrochage aux objet ait qq point avec z = 0 ...

Gérald

----------------------------------------------------------------------

Site: https://www.g-eaux.fr

Blog: http://g-eaux.over-blog.com

Lien vers le commentaire
Partager sur d’autres sites

mais bon pour la maison les 2 ptite routines me dépanneraient quand même bien..

 

le but du jeu.

en partant une poly 2d le lisp trace une poly3d

2 cas

soit on donne une alti de départ et la pente

soit on donne l'alti de départ et l'alti d'arrivée

 

Bonjour,

 

J'ai pas trop testé..., surtout dans des SCU

Cela devrait fonctionner avec des polylignes légères (LWPOLYLINE) qui ne comporte pas d'arc.

Pour les pentes, fournir un réel, par exemple pour 15.25% taper 15.25

 

(vl-load-com)
(defun draw_pt (pt col / rap)
 (setq rap (/ (getvar "viewsize") 50))
 (foreach n
   (mapcar
     '(lambda (x)
       (list
         ((eval (car x)) (car pt) rap)
         ((eval (cadr x)) (cadr pt) rap)
         (caddr pt)
       )
     )
     '((+ +) (+ -) (- +) (- -))
   )
   (grdraw pt n col)
 )
)
(defun c:lwpolto3d ( / js ent AcDoc Space vlaobj perim_obj loop q_dep pt_start z_start z_end k_z l_pt nwl_pt flag)
 (princ "\nSélectionner la polyligne légère à convertir en 3D: ")
 (while
   (not
     (setq js
       (ssget "_+.:E:S" 
         (list
           (cons 0 "LWPOLYLINE")
           (cons 67 (if (eq (getvar "CVPORT") 2) 0 1))
           (cons 410 (if (eq (getvar "CVPORT") 2) "Model" (getvar "CTAB")))
         )
       )
     )
   )
 )
 (redraw (setq ent (ssname js 0)) 3)
 (setq
   AcDoc (vla-get-ActiveDocument (vlax-get-acad-object))
   Space
   (if (eq (getvar "CVPORT") 1)
     (vla-get-PaperSpace AcDoc)
     (vla-get-ModelSpace AcDoc)
   )
   vlaobj (vlax-ename->vla-object ent)
   perim_obj (vlax-curve-getDistAtParam vlaobj (vlax-curve-getEndParam vlaobj))
   loop 1
 )
 (draw_pt (setq pt_start (trans (vlax-curve-getStartPoint vlaobj) 0 1)) 1)
 (initget "Autre _Other")
 (while (eq (setq q_dep (getkword "\nChoisir l'autre extrémité comme point de départ? [Autre]: ")) "Other")
   (redraw)
   (draw_pt (setq pt_start (trans (if (zerop (rem (setq loop (1+ loop)) 2)) (vlax-curve-getEndPoint vlaobj) (vlax-curve-getStartPoint vlaobj)) 0 1)) 1)
   (initget "Autre _Other")
 )
 (redraw)
 (initget 1)
 (setq z_start (getreal "\nAltitude de départ de l'extrémité sélectionnée?: "))
 (initget 1 "Pente _Slope")
 (setq z_end (getreal "\nAltitude de fin de l'autre extrémité ou [Pente]?: "))
 (if (eq z_end "Slope")
   (progn
     (initget 1)
     (setq
       z_end (getreal "\nPente (valeur en %) désirée?: ")
       z_end (+ z_start (* perim_obj (/ z_end 100.0)))
     )
   )
 )
 (setq
   k_z (/ (- z_end z_start) perim_obj)
   l_pt (mapcar 'cdr (vl-remove-if '(lambda (x) (/= (car x) 10)) (entget ent)))
   nwl_pt nil
 )
 (redraw ent 4)
 (if (not (equal (list (car pt_start) (cadr pt_start)) (car l_pt))) (setq l_pt (reverse l_pt) flag T) (setq flag nil))
 (foreach el l_pt
   (setq nwl_pt (cons (append el (list (+ z_start (* k_z (if flag (- perim_obj (vlax-curve-getDistAtPoint vlaobj el)) (vlax-curve-getDistAtPoint vlaobj el)))))) nwl_pt))
 )
 (vlax-invoke Space 'Add3DPoly (apply 'append (reverse nwl_pt)))
 (prin1)
)

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

yo super merci :)

 

je comptais m'y mettre au prochain pont car pour les 2 premiers, "ma ministre du temps libre" avait trouvé pas mal de bricolages à me faire faire... j'ai rien contre la peinture et la menuiserie, mais les vacances ça fait des journées parfois pire que celle du boulot :)

 

bref je te remercie beaucoup et je vais tester tout ça.

 

En premier test, ça à l'air de marcher impeccable... super l'idée de demander le point de départ... mais à la lecture toute diagonale du code, j'ai bien du mal à te suivre... comme dans Starmania, j'aurai voulu être un artiste... j'aurai peut être compris d'ou sort ce " '((+ +) (+ -) (- +) (- -)) " je me doute que c'est pas des lols évolués mais ça fait drole ...

 

pour les scu, il y a effectivement un pb, dans mon cas d'utilisation, xy sont toujours dans le même plan, mais il m'arrive de tourner le repère. Dans ce cas, un pente donnée de 1 n'est plus montante mais descendante, idem quand on donne des alti de départ et d'arrivée. c'est comme si le point de départ s'inversait...

 

en le sachant, rien de rédhibitoire, mais pour la beauté du code tu voudra surement savoir d'ou ça vient..

 

en tout cas merci, ça me permettra de préparer mes plateformes à la maison quand je suis charrette et que le ministère du temps libre m'autorise à bosser :)

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é