Aller au contenu
  • Qui est en ligne   0 membre, 0 anonyme, 37 invités (Afficher la liste complète)

    • Il n’y a aucun utilisateur enregistré actuellement en ligne

Routines LISP

Postez ici vos routines LISP. Une routine est du code court destiné à être réutilisé. Par exemple, un programme mettant à jour la valeur d'un attribut de bloc est une routine. Ne postez pas d'applications ici!


1 350 sujets dans ce forum

    • 2 réponses
    • 2,1 k vues
  1. Piping 3D

    • 7 réponses
    • 13,2 k vues
    • 2 réponses
    • 2,3 k vues
    • 6 réponses
    • 2,3 k vues
  2. purgearchicad, le retour...

    • 3 réponses
    • 1,8 k vues
  3. centre de gravite

    • 2 réponses
    • 2,2 k vues
  4. Bissectrice et médiatrice

    • 6 réponses
    • 7,3 k vues
    • 3 réponses
    • 3,9 k vues
    • 36 réponses
    • 6 k vues
    • 2 réponses
    • 2 k vues
  5. joindre deux polylines

    • 1 réponse
    • 2,2 k vues
  6. Lotus Notes

    • 0 réponse
    • 1,6 k vues
    • 6 réponses
    • 7,2 k vues
    • 0 réponse
    • 1,5 k vues
  7. Ma routine

    • 1 réponse
    • 1,7 k vues
  8. RECH (Patrick_35)

    • 4 réponses
    • 2 k vues
    • 45 réponses
    • 8,9 k vues
    • 0 réponse
    • 2,2 k vues
    • 1 réponse
    • 1,6 k vues
    • 5 réponses
    • 4,2 k vues
  9. EXPORT-TEXT 1 2 3

    • 56 réponses
    • 7,3 k vues
  10. CARTOUCHE DE BONUSCAD

    • 18 réponses
    • 4,6 k vues
  11. creer fichier point xyz

    • 0 réponse
    • 1,6 k vues
    • 6 réponses
    • 2 k vues
  12. LISP \"BOX_TEXT

    • 5 réponses
    • 2,2 k vues


  • Statistiques des forums

    • Total des sujets
      49 k
    • Total des messages
      297,3 k
  • Sujets

  • Messages

    • Bonjour @Didj05,   Voilà un code qui devrait faire l'affaire en récupérant à droite et à gauche des codes dont je me suis inspiré ; inspiré du code de DIDIER disponible : https://www.da-code.fr/polyligne-3d/ (defun lsVtxPoly3D (oPoly / n oPolyDxf lsPts) (if (= (cdr (assoc 0 (setq oPolyDxf (entget oPoly)))) "POLYLINE") (progn (setq oPoly (entnext oPoly)) (while (/= (cdr (assoc 0 (setq oPolyDxf (entget oPoly)))) "SEQEND") (setq lsPts (append lsPts (list (cdr (assoc 10 oPolyDxf))))) (setq oPoly (entnext oPoly)) ); fin du WHILE );progn (alert "le choix n'est pas une POLY 3D") );if poly3d lsPts ); fin de DEFUN ; inspiré du code de LeeMac : https://www.cadtutor.net/forum/topic/18257-entmake-functions/ (defun MakeLWPoly (lst cls dElev vDir / p) (entmakex (append (list (cons 0 "LWPOLYLINE") (cons 100 "AcDbEntity") (cons 100 "AcDbPolyline") (cons 90 (length lst)) (cons 70 cls) (cons 38 dElev) ) (mapcar (function (lambda (p) (cons 10 p))) lst) (list (cons 210 vDir)) ) ) ) ; Transforme un point 3D en point à Z=0 (defun Point2D (PT) (list (car PT) (cadr PT) 0.) ) ; reconstruit des polylignes 2D dans un plan vertical à partir de polyligne 3D supposée être dans ce plan vertical (defun C:ProfilP3DtoP2D ( / ssP3D sLayerP3D vAUNITS vANGBASE vANGDIR I oP3D lsPts dAng PT PT1 PT2 PT2D PT1_2D PT2_2D dDist dDistMax vDir lsPts2D) (setq sLayerP3D "Ptrav_ENROCHEMENTS SECS_3D") (if (setq ssP3D (ssget (list (cons 0 "POLYLINE") (cons 8 sLayerP3D) (cons -4 "&") (cons 70 8)))) (progn (setq vAUNITS (getvar "AUNITS")) (setq vANGBASE (getvar "ANGBASE")) (setq vANGDIR (getvar "ANGDIR")) (setvar "AUNITS" 3) (setvar "ANGDIR" 0.) (setvar "ANGBASE" 0.) (setq I 0) (repeat (sslength ssP3D) (setq oP3D (ssname ssP3D I)) (setq I (1+ I)) (setq lsPts (lsVtxPoly3D oP3D)) ; recherche les 2 points les plus éloignés en 2D (setq PT1 (car lsPts)) (setq PT1_2D (Point2D PT1)) (setq iVtx 0) (setq dDistMax 0.) (while (< (setq iVtx (1+ iVtx)) (length lsPts)) (setq PT (nth iVtx lsPts)) (setq PT2D (Point2D PT)) (if (> (setq dDist (distance PT1_2D PT2D)) dDistMax) (setq PT2_2D PT2D dDistMax dDist) ) ) ; calcule l'angle entre ces 2 points (setq dAng (angle PT1_2D PT2_2D)) ; construit le SCU orienté, puis vertical (command "_UCS" "_W") (command "_UCS" "_Z" dAng) (command "_UCS" "_X" (* PI 0.5)) (setq vDir (getvar "UCSXDIR")) (setq vDir (list (cadr vDir) (* -1. (car vDir)) 0.)) ; convertit le liste des sommets 3D en sommet 2D dans le SCU vertical (setq lsPts2D nil) (foreach PT lsPts (setq lsPts2D (append lsPts2D (list (Point2D (trans PT 0 1))))) ) ; Contruit la poly2D vertical (MakeLWPoly lsPts2D (logand (cdr (assoc 70 (entget oP3D))) 1) (caddr (trans (car lsPts) 0 1)) vDir) ) (setvar "ANGDIR" vANGDIR) (setvar "ANGBASE" vANGBASE) (setvar "AUNITS" vAUNITS) (command "_UCS" "_W") ) ) ) Ce code présuppose un certain nombre d'hypothèse : - les polylignes 3D sont définies dans un plan vertical - les polylignes 3D ont une longueur 2D projetée non nulle - dessine les poly2D dans le calque courant.   A tester, car aucun contrôle dans ce code, tout est supposé être bien dessiné. Ce n'est pas forcément très rapide, puisque ça passe par les commandes de création de SCU pour chaque polyligne, mais ça traduit la méthode manuelle de construction/dessin.   Olivier ProfilP3DtoP2D.lsp
    • Bonjour, Il y a aussi les objets 3D "de base" → type boîte, cylindre etc.. qui sont encore différents.
    • Bonjour, @Didj05 est-il facile pour toi de générer ces polyligne3d cyan et rouge : Si oui, alors : -génère les 2 MNT issus de ces poly3d : dessus et dessous enrochement. (attention aux verticalités) -Cov3d/Visualisation relief/transformation en solide autocad (VOLUMNT). Ensuite choisi "contour = aucun", "Alti de référence = 0". -fais ceci pour les 2 MNTS, tu auras 2 solides. -que tu soustrais l'un à l'autre (SOUSTRACTION) -pour sortir les métrés : je sèche Et si j'ai mal compris tes besoins au début, c'est que comme tu l'as constaté on est tous parti en "projet linéaire" en voyant ces capture d'écrans.
    • Bonjour @Kai Est-ce un objet "primaire" ?, c'est-à-dire réalisé par extrusion ou est-ce un objet "complexe" ?, c'est-à-dire ayant déjà subi des modifications, booléen ou autre.
    • Bonjour @Didj05 Je veux bien que les bretons disent qu'il n'y a pas de possibilité, mais ça m'étonne quand même. Si on décompose le souci dans un projet simple, quelles polylignes faut-il relier ? que ça parait si simple : je n'ai toujours pas "vraiment" compris ce qu'il fallait faire, c'est pourquoi je demande un projet SIMPLE et ensuite si on trouve une solution, on l'adaptera au projet initial.  
  • Sujets

×
×
  • 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é