Aller au contenu

x_all

Membres
  • Compteur de contenus

    3 609
  • Inscription

  • Dernière visite

  • Jours gagnés

    30

Tout ce qui a été posté par x_all

  1. bonjour je cherche à faire un bout de code que je croyais simple.... j'avais fait une petite routine avec des rotations qui s’enchaînent avec un angle constant défini au départ... je voulais améliorer cette fonction pour qu'elle tienne compte de la position du départ (rotation avec référence). exemple du résultat attendu http://joch04.free.fr/tmp/RTF.png je voudrais que la poly en rouge se copie dans la position des noires... Voila mon code, mais il continu a fonctionner comme si je n'avais rien modifier c'est a dire comme une rotation normale en partant de l'axe des X ( remplacement de la ligne en commentaire : (command "_rotate" obj "" pts "C" ang2)) une idée de pourquoi ou de comment faire? merci (defun c:rtf (/ pts pt1 pt2 ang ang1 ang2 continu ) (setq ptc (getpoint "centre de rotation /n") pt1 (getpoint "pts de départ ") pt2 (getpoint "pts d'arrivée ") ang 0.0 continu T ) (setq ang1 (angle ptc pt1) ang2 (angle ptc pt2) ang (- ang2 ang1) ) (princ (strcat "\n angle" (rtos (* ang (/ 180 pi))))) (setq obj (ssget) ang (* ang (/ 180 pi)) ang2 ang ptc (trans ptc 1 0) pt1 (trans pt1 1 0) ) (command "_rotate" obj "" ptc "C" "R" ptc pt1 ang2) (while continu (setq ang2 (+ ang ang2)) ;;; (command "_rotate" obj "" pts "C" ang2) (command "_rotate" obj "" ptc "C" "R" ptc pt1 ang2) (princ "\n cliquer pour sortir ou espace pour une autre copie ") (setq continu (= nil (getpoint))) ) (princ "sortie de rtf") (princ)
  2. (gile) m'avait pondu une routine pour joindre des lignes ou poly (il faut au moins une ligne dans la sélection il passait pas par "joindre" peut etre peux tu t'en inspirer? (defun c:jpl (/ ss) (and (or (and (= (getvar "pickfirst") 1) (setq ss (ssget "_I" '((0 . "ARC,LINE,LWPOLYLINE")))) ) (setq ss (ssget '((0 . "ARC,LINE,LWPOLYLINE")))) ) (if (= (getvar "peditaccept") 1) (vl-cmdf "_.pedit" "_m" ss "" "_j" 0.0 "") (vl-cmdf "_.pedit" "_m" ss "" "_y" "_j" 0.0 "") ) ) (princ) )
  3. et puis c'était des vacances studieuses le 2eme tuyau pour les largeurs des poly, c'est aussi un truc CVC en gaines circulaires. J'avais fait ça pour aider au dimensionnement des gaines en fonction des vitesses d'air. A la fin, en ligne de commande, j'affiche un récap des longueurs par diamètres si le schéma est calé sur le plan ça peut être une bonne 1ere approximation. Je l'ai amélioré pour que ça trace une poly avec épaisseur sur le schéma dans un calque temporaire. Grace à l'astuce de (gile) J'ai pu ajouter une fonction pour tracer des coudes (R=1D) pour faire un presque réseau vite fait en APD (passer fillmode à 0 pour avoir un aspect correct avant traçage ou supportez les gros à plats) Le code et un exemple dans ce fichier joch04.free.fr/tmp/vsom6.zip
  4. plop de bonne année.. alors oui, c'est bien des métré, mais de gaines aéro. l'exemple qui m'occupe est ici joch04.free.fr/tmp/combles3d.dwg en l'état, ça marche si le modèle 3d est composé d'éléments autorisés, des extrusions de cercle pour les gaines circulaires et, et des blocs dynamiques pour les gaines rectangulaires (nom ft des longueurs largeurs par exemple 0.50x0.5) ça liste également les blocs, si le nom du bloc commence par "cd" c'est un coude de 1.00m mis à l’échelle du diamètre du tube. Il faudra voir comment éliminer les objets 3d indésirables (les extrusions de polylignes plantent) et tester un peu pour débugger... mais bon, il fait moins froid, j'ai du jardinage... ;;; MG (v4) métré de gaine 3d, exemple ici joch04.free.fr/tmp/combles3d.dwg ;;; cette routine implique l'installation des LispExtension de (gile)téléchargeable sur cette page. ;;; http://gilecad.azurewebsites.net/DotNet.aspx (accès à gc-Brep ) ;;; version "work in progress" à compléter par des règles de construction du modèle 3d ;;; les variables sont pas super calées et il en reste qui ne servent qu'aux test et débuggage ;;; remerciements à cadXp en général; (gile) en particulier et mention spéciale à Lee Mac pour ;;; les longueurs de blocs dynamiques ;;;http://cadxp.com/topic/46322-devoir-de-vacances-objet-3d/page__pid__270178#entry270178 ;;;http://cadxp.com/topic/32932-acceder-aux-donnees-des-solides-3d-fonction-lisp/ ;;;http://cadxp.com/topic/39982-metres-block-dynamique/ ;;;http://cadxp.com/topic/34377-automatisation-de-metres/ ;;;http://cadxp.com/topic/41466-algorithme-de-trie-x-y/ ;;; ... (defun c:mg (/ ssel ent j lsol ldata toto) ; initialisation VL (vl-load-com) (setq doc (vla-get-activedocument (vlax-get-acad-object))) (vla-startundomark doc) ; Activer le début de l'undo ; sélection des éléments on ne garde que les blocs et les solides (while (not ssel) (setq ssel (ssget '((0 . "3DSOLID,INSERT")))) ) (setq j 0) (repeat (sslength ssel) (setq ent (ssname ssel j)) (if (= "3DSOLID" (cdr (assoc 0 (entget ent))) ) (progn (setq lsol (list (traite-solide ent))) (setq ldata (append lsol ldata)) ) (progn (setq lsol (list (traite-bloc ent))) (setq ldata (append lsol ldata)) ) ) ; (print ldata) (setq j (+ 1 j)) ) ;f repeat (setq ldata (consolidation ldata)) (setq ldata (Ordone ldata)) (ecrit-fichier ldata) ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Ordone ft qui classe la liste suivant ses 2 1er éléments ;;; si elles ont la meme 1ere colonne on classe suivant la 2eme par ordre croissant ;;; (transfomée de string en réel) ;;; si non par la 1ere colonne pas ordre décroissant. (defun Ordone (lst-b / e1 e2) (setq lst-b (vl-sort lst-b '(lambda (e1 e2) (if (equal (car e1) (car e2)) (> (atof (cadr e1)) (atof (cadr e2))) (< (car e1) (car e2)) ) ) ) ) ) ;fin Ordone ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defun consolidation (lst / nlst i tour ty d1 d2 l el nel sec surf test nb nty nd1 nd2 nl nsec nsurf nnb) (setq nlst (list (car lst)) lst (cdr lst) ) (setq tour 1) (foreach el lst (setq ty (NTH 0 el) d1 (NTH 1 el) d2 (NTH 2 el) l (NTH 3 el) nb (NTH 4 el) sec (NTH 5 el) surf (NTH 6 el) test 0 ) (foreach nel nlst (setq nty (NTH 0 nel) nd1 (NTH 1 nel) nd2 (NTH 2 nel) nl (NTH 3 nel) nnb (NTH 4 nel) nsec (NTH 5 nel) nsurf (NTH 6 nel) ) (cond ;; si même nom même d1 (pour les cylindres) et pas une réduction ni un coude ((and (= nty ty) (= nd1 d1) (/= ty "reduc") (/= "cd" (substr ty 1 2))) (setq nl (rtos (+ (atof nl) (atof l))) nnb (+ 1 nnb) nsurf (rtos (+ (atof nsurf) (atof surf)) 2 2) test 1 ) (setq nlst (subst (list nty nd1 nd2 nl nnb nsec nsurf) nel nlst)) ) ; c1 ;; si une réduction avec le même d1. ((and (= nty ty) (= ty "reduc") (= nd1 d1)) (setq nnb (+ 1 nnb) test 1 ) (setq nlst (subst (list nty nd1 nd2 nl nnb nsec nsurf) nel nlst)) ) ;c2 ;; si coude ((and (= nty ty) (= "cd" (substr ty 1 2)) (= nd1 d1)) (setq nnb (+ 1 nnb) test 1 ) (setq nlst (subst (list nty nd1 nd2 nl nnb nsec nsurf) nel nlst)) ) (t) ) ; f cond ) ; f foreach nel (setq tour (+ 1 tour)) (if (= 0 test) (setq nlst (append (list el) nlst)) ) ) ;f foreach el nlst ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defun traite-bloc (ent / Vba-ent ty d1 d2 l nb px sec surf) (setq d1 "0.00" d2 "0.00" l "0.00" sec "np" surf "np" nb 1 ) (setq Vba-ent (vlax-ename->vla-object ent) ty (vla-get-effectivename Vba-ent) ) (cond ;; si coude ((= "cd" (substr ty 1 2)) (setq d1 (rtos (cdr (assoc 41 (entget ent))) 2 3) d2 d1 ) ) ;;si bloc dynamique avec un x dnas le nom ((and (= (vla-get-isdynamicblock Vba-ent) :vlax-true) (/= nil (vl-string-position (ascii "x") ty)) ) (setq px (vl-string-position (ascii "x") ty)) (setq l (rtos (LM:getdynpropvalue Vba-ent "long") 2 3)) (setq d1 (substr ty 1 px) d2 (substr ty (+ 2 px) (strlen ty)) sec (rtos (* (atof d1) (atof d2)) 2 3) surf (rtos (* (atof l) (* 2 (+ (atof d1) (atof d2)))) 2 3) ) ) ) (list ty d1 d2 l nb sec surf) ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defun traite-solide (ent / ls-brep c1 c2 ty d1 d2 l nb sec surf d) ;;; (setq ls-brep (cddr (car (cdr (gc-brep ent))))) ;;; (Setq c1 (car (cdr (car (cdr (car ls-brep))))) ;;; c2 (car (cdr (car (cdr (cadr ls-brep))))) ;;; ) ;vertion sans getBases pas de controle d'erreur (setq ls-brep (getBases (gc-brep ent))) ;(print ls-brep) (setq c1 (car ls-brep) c2 (cadr ls-brep)) (Setq d1 (rtos (round (* 2 (cdr (assoc 40 c1))) 0.005) 2 2) d2 (rtos (round (* 2 (cdr (assoc 40 c2))) 0.005) 2 2) l (rtos (distance (cdr (assoc 10 c1)) (cdr (assoc 10 c2))) 2 2) sec "np" surf "np" Nb 1 ) (if (/= d1 d2) (setq ty "reduc" l "np" ) (setq ty "cyl" d (atof d1) sec (rtos (* 0.25 pi d d) 2 2) surf (rtos (* pi d (atof l)) 2 2) ) ) (list ty d1 d2 l nb sec surf) ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Get Dynamic Block Property Value - Lee Mac ;; Returns the value of a Dynamic Block property (if present) ;; blk - [vla] VLA Dynamic Block Reference object ;; prp - [str] Dynamic Block property name (case-insensitive) (defun LM:getdynpropvalue (blk prp) (setq prp (strcase prp)) (vl-some '(lambda (x) (if (= prp (strcase (vla-get-propertyname x))) (vlax-get x 'value) ) ) (vlax-invoke blk 'getdynamicblockproperties) ) ) ;;; ROUND (gile) ;;; Arrondit à la valeur la plus proche en fonction de prec ;;; (round pi 0.01) -> 3.14 ;;; (round pi 1e-5) -> 3.14159 ;;; (round 5456.50 1) -> 5457 ;;; (round 5456.50 100.0) -> 5500.0 (defun round (num prec) (if (zerop (setq prec (abs prec))) num (* prec (fix ((if (minusp num) - + ) (/ num prec) 0.5 ) ) ) ) ) ;;routine d'écriture dans un fichier odieusement pompée de metre_2, lisp de (gile) ;; post d'origine ici http://cadxp.com/topic/36638-lisp-calculer-le-metre-de-differente-type-de-ligne-selon-son-calque/ (defun ecrit-fichier (lst / sep filename file l) ; (print lst) (setq sep (vl-registry-read "HKEY_CURRENT_USER\\Control Panel\\International" "sList" ) filename (strcat (getvar 'dwgprefix) (vl-filename-base (getvar 'dwgname)) "_metre.csv" ) file (open filename "w") ) (write-line (strcat "type" sep "dim" sep "dim2" sep "longueur" sep "section" sep "surface" sep "nombre" ) file ) (foreach l lst (print l) (write-line (strcat (NTH 0 l) sep (NTH 1 l) sep (NTH 2 l) sep (NTH 3 l) sep (NTH 5 l) sep (NTH 6 l) sep (itoa (NTH 4 l)) ) file ) ) (close file) (startapp "notepad" filename) ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;fonction de (gile) pour choper directement les code DXF d'un gc-brep ;; voir ici http://cadxp.com/topic/46322-devoir-de-vacances-objet-3d/page__view__findpost__p__270198 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defun getBases (brepList / shells faces bases winding) (if (and ;; une seule entrée "COMPLEX" (= (car brepList) "COMPLEX") ;; une seule entrée "SHELL" (= (length (setq shells (cdr brepList))) 1) ;; trois entrées "FACE" (= (length (setq faces (cdar shells))) 3) ;; dont deux faces avec une seule entrée "LOOP" (= (length (setq bases (mapcar 'cadadr (vl-remove-if-not '(lambda (face) (= 2 (length face)) ) faces ) ) ) ) 2 ) ;; et une face avec deux entrées "LOOP" (= (length (setq winding (vl-some '(lambda (face) (if (= (length face) 3) (mapcar 'cadr (cdr face)) ) ) faces ) ) ) 2 ) ;; qui sont identiques à celles des deux autres faces (member (car bases) winding) (member (cadr bases) winding) ;; et qui représentent toutes deux des cercles ou des ellipses (vl-every '(lambda (loop) (member (cdar loop) '("CIRCLE" "ELLIPSE"))) bases) ) bases ) )
  5. pou lala.... je voyais pas du tout par quel bout le prendre. super merci encore une fois... et bonnes fêtes à tous :)
  6. et bien merci beaucoup c'est plus propre, mon extraction "à la sauvage" n'avait aucun contrôle d'erreur. ça marche impec :) ps pour le post précédent, je suis effectivement sur un lissage.. et j'ai une 2017.. et effectivement, avec getBases le résultat est conforme. Je me suis peut être pris la mémoire dans le tapis de mes nombreux essais car j'ai bien galéré quand même... rien à voir si ce n'est que c'est aussi des devoirs de vacances, quand je clique sur une polyligne l'ors d'une sélection. y a t il un moyen de trouver sa largeur à l'endroit ou je clique (largeur constante entre 2 sommets)?
  7. je crois que tu cherches un développer de famille personnalisée. la création d'une famille révit est un métier à part. il te faut prendre conseil chez un spécialiste car c'est pas en 1 stages d'une semaine que l'on peu apprendre à faire des familles efficaces (mais à les utiliser oui). Je suis sur qu'il doit exister des BE spécialisé. Ici on est peut être pas assez dans le bain du BIM (en tout cas moi) pour te donner des noms. Des forums comme Village BIM sauront mieux te répondre et t'orienter tient nous au courant?
  8. il est grand le mystère d'autocad... une autre mystère, si je fait un gc-brep sur un balayage avec 2 cercles de diamètres différents, j'ai 2 cercles de diamètre identiques... va comprendre, du coup, pour modéliser une réduction, il faut faire un cylindre et le modifier avec la poignée en tête... rien de grave, mais c'est mystérieux...
  9. j'ai remplacer traite-solide par ta version, recopier getWindingLoops à la fin du code, mais ça ne marche pas. (tester avec un cylindre unique) dans getWindingLoops j'ai rajouté un point d’arrêt pour tester, on passe bien les 3 tests, mais (mapcar 'cadr (cdar (vl-remove-if-not '(lambda (x) (= (caadr x) "LOOPWINDING")) faces)))il renvoie nil, en regardant brepList je ne trouve pas de trace de "LOOPWINDING", j'ai essayé de remplacer au doigt levé par "LOOPEXTERIOR", mais pas mieux....les mapcar j'y comprend rien... tout ce qui est de haut niveau du reste... le remouve if not m'intimide...et le lamba m'inquiète, je ne comprends jamais ce qu'il traite (surtout avec les sous listes) qui est "x" ?
  10. je ne suis pas assez à l'aise en lisp pour faire ça au travail, et puis c'est plus pour le fun car j'adore ça. Même si comme à chaque fois je fini par sortir un truc qui me fait gagner beaucoup de temps je le prend pas pour du boulot. En ces périodes de fêtes et de froid j'ai pas mal de temps à glander, j'aime finalement plus ça que les autres activités d'intérieur diurnes. L'été c'est pas pareil, mais là...
  11. bon, je m'auto répond, en re épluchant un post ou (gile) une fois de plus m'avait débloqué pour trier des blocs en ft de leur position X/Y http://cadxp.com/top...me-de-trie-x-y/ j'ai fini par comprendre comment l'adapter Du coup ça donne ça. ;;; MG métré de gaine 3d, exemple ici joch04.free.fr/tmp/combles3d.dwg ;;; cette routine implique l'installation des LispExtension de (gile)téléchargeable sur cette page. ;;; http://gilecad.azurewebsites.net/DotNet.aspx (accès à gc-Brep ) ;;; version "work in progress" à compléter par des règles de construction du modèle 3d ;;; les variables sont pas super calées et il en reste qui ne servent qu'aux test et débuggage ;;; remerciements à cadXp en général; (gile) en particulier et mention spéciale à Lee Mac pour ;;; les longueurs de blocs dynamiques ;;;http://cadxp.com/topic/46322-devoir-de-vacances-objet-3d/page__pid__270178#entry270178 ;;;http://cadxp.com/topic/32932-acceder-aux-donnees-des-solides-3d-fonction-lisp/ ;;;http://cadxp.com/topic/39982-metres-block-dynamique/ ;;;http://cadxp.com/topic/34377-automatisation-de-metres/ ;;;http://cadxp.com/topic/41466-algorithme-de-trie-x-y/ ;;; ... (defun c:mg (/ ssel ent j lsol ldata toto) ; initialisation VL (vl-load-com) (setq doc (vla-get-activedocument (vlax-get-acad-object))) (vla-startundomark doc) ; Activer le début de l'undo ; sélection des éléments on ne garde que les blocs et les solides (while (not ssel) (setq ssel (ssget '((0 . "3DSOLID,INSERT")))) ) (setq j 0) (repeat (sslength ssel) (setq ent (ssname ssel j)) (if (= "3DSOLID" (cdr (assoc 0 (entget ent))) ) (progn (setq lsol (list (traite-solide ent))) (setq ldata (append lsol ldata)) ) (progn (setq lsol (list (traite-bloc ent))) (setq ldata (append lsol ldata)) ) ) ; (print ldata) (setq j (+ 1 j)) ) ;f repeat (setq ldata (consolidation ldata)) (setq ldata (Ordone ldata)) (ecrit-fichier ldata) ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Ordone ft qui classe la liste suivant ses 2 1er éléments ;;; si elles ont la meme 1ere colonne on classe suivant la 2eme par ordre croissant ;;; (transfomée de string en réel) ;;; si non par la 1ere colonne pas ordre décroissant. (defun Ordone (lst-b / e1 e2) (setq lst-b (vl-sort lst-b '(lambda (e1 e2) (if (equal (car e1) (car e2)) (> (atof (cadr e1)) (atof (cadr e2))) (< (car e1) (car e2)) ) ) ) ) ) ;fin Ordone ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defun consolidation (lst / nlst i tour ty d1 d2 l el nel test nb nty nd1 nd2 nl nnb) (setq nlst (list (car lst)) lst (cdr lst) ) (setq tour 1) (foreach el lst (setq ty (car el) d1 (cadr el) d2 (caddr el) l (cadddr el) nb (last el) test 0 ) (foreach nel nlst (setq nty (car nel) nd1 (cadr nel) nd2 (caddr nel) nl (cadddr nel) nnb (last nel) ) (cond ;; si même nom même d1 (pour les cylindres) et pas une réduction ni un coude ((and (= nty ty) (= nd1 d1) (/= ty "reduc") (/= "cd" (substr ty 1 2))) (setq nl (rtos (+ (atof nl) (atof l))) nnb (+ 1 nnb) test 1 ) (setq nlst (subst (list nty nd1 nd2 nl nnb) nel nlst)) ) ; c1 ;; si une réduction avec le même d1. ((and (= nty ty) (= ty "reduc") (= nd1 d1)) (setq nnb (+ 1 nnb) test 1 ) (setq nlst (subst (list nty nd1 nd2 nl nnb) nel nlst)) ) ;c2 ;; si coude ((and (= nty ty) (= "cd" (substr ty 1 2)) (= nd1 d1)) (setq nnb (+ 1 nnb) test 1 ) (setq nlst (subst (list nty nd1 nd2 nl nnb) nel nlst)) ) (t) ) ; f cond ) ; f foreach nel (setq tour (+ 1 tour)) (if (= 0 test) (setq nlst (append (list el) nlst)) ) ) ;f foreach el (print nlst) ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defun traite-bloc (ent / Vba-ent ty d1 d2 l nb px) (setq d1 "0.00" d2 "0.00" l "0.00" nb 1 ) (setq Vba-ent (vlax-ename->vla-object ent) ty (vla-get-effectivename Vba-ent) ) (cond ;; si coude ((= "cd" (substr ty 1 2)) (setq d1 (rtos (cdr (assoc 41 (entget ent))) 2 3) d2 d1 ) ) ;;si bloc dynamique avec un x dnas le nom ((and (= (vla-get-isdynamicblock Vba-ent) :vlax-true) (/= nil (vl-string-position (ascii "x") ty)) ) (setq px (vl-string-position (ascii "x") ty)) (setq l (rtos (LM:getdynpropvalue Vba-ent "long") 2 3)) (setq d1 (substr ty 1 px) d2 (substr ty (+ 2 px) (strlen ty)) ) ) ) (list ty d1 d2 l nb) ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defun traite-solide (ent / ls-brep c1 c2 ty d1 d2 l nb) (setq ls-brep (cddr (car (cdr (gc-brep ent))))) (Setq c1 (car (cdr (car (cdr (car ls-brep))))) c2 (car (cdr (car (cdr (cadr ls-brep))))) ) (Setq d1 (rtos (round (* 2 (cdr (assoc 40 c1))) 0.005) 2 2) d2 (rtos (round (* 2 (cdr (assoc 40 c2))) 0.005) 2 2) l (rtos (distance (cdr (assoc 10 c1)) (cdr (assoc 10 c2))) 2 2) Nb 1 ) (if (/= d1 d2) (setq ty "reduc" l "np" ) (setq ty "cyl") ) (list ty d1 d2 l nb) ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Get Dynamic Block Property Value - Lee Mac ;; Returns the value of a Dynamic Block property (if present) ;; blk - [vla] VLA Dynamic Block Reference object ;; prp - [str] Dynamic Block property name (case-insensitive) (defun LM:getdynpropvalue (blk prp) (setq prp (strcase prp)) (vl-some '(lambda (x) (if (= prp (strcase (vla-get-propertyname x))) (vlax-get x 'value) ) ) (vlax-invoke blk 'getdynamicblockproperties) ) ) ;;; ROUND (gile) ;;; Arrondit à la valeur la plus proche en fonction de prec ;;; (round pi 0.01) -> 3.14 ;;; (round pi 1e-5) -> 3.14159 ;;; (round 5456.50 1) -> 5457 ;;; (round 5456.50 100.0) -> 5500.0 (defun round (num prec) (if (zerop (setq prec (abs prec))) num (* prec (fix ((if (minusp num) - + ) (/ num prec) 0.5 ) ) ) ) ) ;;routine d'écriture dans un fichier odieusement pompée de metre_2, lisp de (gile) ;; post d'origine ici http://cadxp.com/topic/36638-lisp-calculer-le-metre-de-differente-type-de-ligne-selon-son-calque/ (defun ecrit-fichier (lst / sep filename file l) (print lst) (setq sep (vl-registry-read "HKEY_CURRENT_USER\\Control Panel\\International" "sList" ) filename (strcat (getvar 'dwgprefix) (vl-filename-base (getvar 'dwgname)) "_metre.csv" ) file (open filename "w") ) (write-line (strcat "type" sep "dim" sep "dim2" sep "longueur" sep "nombre") file ) (foreach l lst (print l) (write-line (strcat (car l) sep (cadr l) sep (caddr l) sep (cadddr l) sep (itoa (last l)) ) file ) ) (close file) (startapp "notepad" filename) )
  12. plop... je ne suis pas arrivé à faire fonctionner getWindingLoops, par contre, je suis arrivé à me dépatouillé avec gc-brep. Le but du jeu était de faire des métrés d'une solution 3D alternative à révit (oui revit, c'est l'avenir, mais j'ai pas d'entreprises sous la main pour franchir le pas et déja la 3d sour autocad ça leur fait un peu peur mais ce n'est pas le débat svp) l'exemple qui m'occupe est ici joch04.free.fr/tmp/combles3d.dwg j'arrive au bout d'un code qui marche a peu près pour peut qu'on respecte les modalités de création du projet, que je détaillerai si du monde est intéressé.Il me reste un truc à faire, mais je ne sais pas comment m'en sortir. c'est de trier la liste finale pour la rendre présentable..Grace à un bout de code piqué sur un programme de (gile) cette routine exporte un CVC et je fait ce trie sous excel, mais pour l’intérêt pédagogique, j'aurai bien aimer savoir comment ou pourrait faire. la sortie du programme est une suite de liste à cette forme :type;dim;dim2;longueur;nombrecyl;0.25;0.25;4.57;1 reduc;0.44;0.60;np;1 cyl;0.60;0.60;4.000;4 0.4x0.5;0.4;0.5;1.500;3 reduc;1.14;0.60;np;2 cyl;0.40;0.40;1.000;3 cd-3d-90;0.450;0.450;0.0;4 cd-3d-45;0.315;0.315;0.0;1 j'aurai aimé regrouper les types par ordre alfa, et en second critère dim par diamètre croissant... Voici le code(je ne doute pas que les puriste vont le trouvé un peu lourd, mais je fait ce que je peux à mon petit niveau et reste ouvert à la critique) ;;; MG métré de gaine 3d, exemple ici joch04.free.fr/tmp/combles3d.dwg ;;; version "work in progress" à compléter par des règles de construction du modèle ;;; les variables sont pas super callées et il en reste qui ne servent qu'aux test et débuggage ;;; remercimenemts à cadXp en général; (gile) en particulier et menstion spéciale à LeeMac pour les longueus de blocs dynamiques ;;;http://cadxp.com/topic/46322-devoir-de-vacances-objet-3d/page__pid__270178#entry270178 ;;;http://cadxp.com/topic/39982-metres-block-dynamique/ ;;;http://cadxp.com/topic/34377-automatisation-de-metres/ ;;; ;;; ... (defun c:mg (/ ssel ent j lsol ldata toto) ; initialisation VL (vl-load-com) (setq doc (vla-get-activedocument (vlax-get-acad-object))) (vla-startundomark doc) ; Activer le début de l'undo ; sélection des éléments on ne garde que les blocs et les solides (while (not ssel) (setq ssel (ssget '((0 . "3DSOLID,INSERT")))) ) (setq j 0) (repeat (sslength ssel) (setq ent (ssname ssel j)) (if (= "3DSOLID" (cdr (assoc 0 (entget ent))) ) (progn (setq lsol (list (traite-solide ent))) (setq ldata (append lsol ldata)) ) (progn (setq lsol (list (traite-bloc ent))) (setq ldata (append lsol ldata)) ) ) ; (print ldata) (setq j (+ 1 j)) ) ;f repeat (setq ldata (consolidation ldata)) (ecrit-fichier ldata) ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defun consolidation (lst / nlst i tour ty d1 d2 l el nel test nb nty nd1 nd2 nl nnb) (setq nlst (list (car lst)) lst (cdr lst) ) (setq tour 1) (foreach el lst (setq ty (car el) d1 (cadr el) d2 (caddr el) l (cadddr el) nb (last el) test 0 ) (foreach nel nlst (setq nty (car nel) nd1 (cadr nel) nd2 (caddr nel) nl (cadddr nel) nnb (last nel) ) (cond ;; si même nom même d1 (pour les cylindres) et pas une réduction ni un coude ((and (= nty ty) (= nd1 d1) (/= ty "reduc") (/= "cd" (substr ty 1 2))) (setq nl (rtos (+ (atof nl) (atof l))) nnb (+ 1 nnb) test 1 ) (setq nlst (subst (list nty nd1 nd2 nl nnb) nel nlst)) ) ; c1 ;; si une réduction avec le même d1. ((and (= nty ty) (= ty "reduc") (= nd1 d1)) (setq nnb (+ 1 nnb) test 1 ) (setq nlst (subst (list nty nd1 nd2 nl nnb) nel nlst)) ) ;c2 ;; si coude ((and (= nty ty) (= "cd" (substr ty 1 2)) (= nd1 d1)) (setq nnb (+ 1 nnb) test 1 ) (setq nlst (subst (list nty nd1 nd2 nl nnb) nel nlst)) ) (t) ) ; f cond ) ; f foreach nel (setq tour (+ 1 tour)) (if (= 0 test) (setq nlst (append (list el) nlst)) ) ) ;f foreach el (print nlst) ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defun traite-bloc (ent / Vba-ent ty d1 d2 l nb px) (setq d1 "np" d2 "np" l "0.0" nb 1 ) (setq Vba-ent (vlax-ename->vla-object ent) ty (vla-get-effectivename Vba-ent) ) (cond ;; si coude ((= "cd" (substr ty 1 2)) (setq d1 (rtos (cdr (assoc 41 (entget ent)))) d2 d1 ) ) ;;si bloc dynamique avec un x dnas le nom ((and (= (vla-get-isdynamicblock Vba-ent) :vlax-true) (/= nil (vl-string-position (ascii "x") ty)) ) (setq px (vl-string-position (ascii "x") ty)) (setq l (rtos (LM:getdynpropvalue Vba-ent "long") 2 2)) (setq d1 (substr ty 1 px) d2 (substr ty (+ 2 px) (strlen ty)) ) ) ) (list ty d1 d2 l nb) ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defun traite-solide (ent / ls-brep c1 c2 ty d1 d2 l nb) (setq ls-brep (cddr (car (cdr (gc-brep ent))))) (Setq c1 (car (cdr (car (cdr (car ls-brep))))) c2 (car (cdr (car (cdr (cadr ls-brep))))) ) (Setq d1 (rtos (round (* 2 (cdr (assoc 40 c1))) 0.005) 2 2) d2 (rtos (round (* 2 (cdr (assoc 40 c2))) 0.005) 2 2) l (rtos (distance (cdr (assoc 10 c1)) (cdr (assoc 10 c2))) 2 2) Nb 1 ) (if (/= d1 d2) (setq ty "reduc" l "np" ) (setq ty "cyl") ) (list ty d1 d2 l nb) ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Get Dynamic Block Property Value - Lee Mac ;; Returns the value of a Dynamic Block property (if present) ;; blk - [vla] VLA Dynamic Block Reference object ;; prp - [str] Dynamic Block property name (case-insensitive) (defun LM:getdynpropvalue (blk prp) (setq prp (strcase prp)) (vl-some '(lambda (x) (if (= prp (strcase (vla-get-propertyname x))) (vlax-get x 'value) ) ) (vlax-invoke blk 'getdynamicblockproperties) ) ) ;;; ROUND (gile) ;;; Arrondit à la valeur la plus proche en fonction de prec ;;; (round pi 0.01) -> 3.14 ;;; (round pi 1e-5) -> 3.14159 ;;; (round 5456.50 1) -> 5457 ;;; (round 5456.50 100.0) -> 5500.0 (defun round (num prec) (if (zerop (setq prec (abs prec))) num (* prec (fix ((if (minusp num) - + ) (/ num prec) 0.5 ) ) ) ) ) ;;routine d'écriture dans un fichier odieusement pompée de metre_2, lisp de (gile) ;; post d'origine ici http://cadxp.com/topic/36638-lisp-calculer-le-metre-de-differente-type-de-ligne-selon-son-calque/ (defun ecrit-fichier (lst / sep filename file l) (print lst) (setq sep (vl-registry-read "HKEY_CURRENT_USER\\Control Panel\\International" "sList" ) filename (strcat (getvar 'dwgprefix) (vl-filename-base (getvar 'dwgname)) "_metre.csv" ) file (open filename "w") ) (write-line (strcat "type" sep "dim" sep "dim2" sep "longueur" sep "nombre") file ) (foreach l lst (print l) (write-line (strcat (car l) sep (cadr l) sep (caddr l) sep (cadddr l) sep (itoa (last l)) ) file ) ) (close file) (startapp "notepad" filename) )
  13. Encore une fois merci... Je cherchai déja des pistes avec des blocs étirables pour modéliser ces cylindres, mais les mailles pour faire des tubes, ça à l'inconvénient d'être beaucoup plus lourd si on veux un rendu un peu lisse. ça à l'air tout simple comme ça mais je n'ose imaginer la tambouille derrière tes lispextensions. En tout cas, le résultat est miraculeux merci merci merci...
  14. Bonjour je cherche à faire une somme de longueur de solide3d. Ces solides sont tous des extrusions. J'ai chercher à faire un Dump des propriétés ou de chercher les codes DXF d'un cylindre (extrusion d'un cercle) mais pas moyen de trouver une définition du diamètre du cercle avec ces deux méthodes. D'ou ma question, peut on retrouver la polyligne à l'origine de l'extrusion pour l'utiliser dans un lisp?
  15. clap clap clap...
  16. x_all

    echelle annotative

    pop pop pop ! c'est Noël !! merci à vous trois, même sans rien dire il y a toujours un peu de (gile) dans un tread de ce forum. Comme je me sert jamais de cette fonction, je me disait que je ne savais pas bien les utiliser... apparemment, je ne suis pas le seul. Au tant tout mettre à plat. ça devrai faire des miracle.. je testerai, mais là, c'est les vacances :) alors bonne fêtes à tous...
  17. x_all

    dynamo

    dynamo? sous autocad? jamais entendu parlé. Mais, on me dit pas tout...
  18. x_all

    echelle annotative

    Bonjour Je bosse sur mes lots technique avec un fond de plan en Xref (en fait j'en ai 4)L'archi utilise les échelle anotative pour ses nom de pièces, ces noms sont encadrés avec une polyligne.Pour que le texte soit bien cadré dans l'Xref, il faut que je place l’échelle annotative sur 1/200Dans l'espace objet, je règle mon echelle sur cette valeur, et ça marche.Le problème, c'est que j'imprime au 1/50. dans mon espace objet, les texte se replace par défaut au 1/100 (?) il sont donc 2 fois trop gros et sortent du cadre Comment faire revenir les textes à la bonne hauteur? merci...
  19. ça me parait pas déconnant. Sans vidéo, sans images (à part les avatars) CadXp doit pas être hyper lourd.Avec la méthode du "enregistrer sous", tu récupères toutes les icônes et images de la page dans des sous dossiers, ça peut paraitre beaucoup sur une page mais c'est redondant avec les autres.Dans ma jeunesse, j'ai eu ''ripper'' qqs sites et effectivement un forum n'est pas un site particulièrement groumant en terme de ressources (https://www.httrack.com/) peut etre pour ça que le propriétaire nous laisse relativement pénard. Peu d'investissement en temps et en ressource pour se targuer d'un nombre de connexion important. Noyé sur le global de leur catalogue c'est un argument markéting à peu de frais.
  20. une idée comme ça, tu fais plusieurs fichier avec chacun sa découpe, plus une Xref globale avec un calque par Xref de découpe(une seule Xref unique pour les rassembler toutes comme Sauron)
  21. x_all

    Autofluid

    Bonjour on regarde du coté d'une aide au dessin pour la partie CVC, plomberie, et possiblement élec (la partie chemin de câbles). On a pas vraiment besoin de BIM même s'il est parfois indispensable de sortir des perceptives et d'habiller directement des coupes archi Vue les moyens limité de notre BE on regarde du coté d'Autofluid. En effet notre parc de licence autocad est complètement dans les choux, et qu'un applicatif métier demande toujours un moteur CAO à jour. On tourne toujours avec des 2009 et une seule 2019.Comme cette évolution concerne 3 postes si on ajoute 3 licences métier et 2 autocad, on dépasse largement le budget (étude faite avec STABIPLAN) Qui à un retour d'expérience sur ce soft et quel sont ses avantages inconvénients. Un Be EXE l'utilise sur un chantier en cours, ses plans sont propres, mais j'en sais pas plus. D'autre part, on prendrai des licences Briscad ou ZWcad, là aussi si vous aviez qqs arguments pour faire un choix, merci pour vos retour d'expérience.
  22. bha, ya qu'a demander un devis non? mais un devis pour quoi? louer le site en l'état et payer la bande passante, ou ajouter qqs fonctions synonyme de travail, et de plus de bande passante Par exemple, au stockage de fichiers dans les messages mais c'est un exemple, les liens me vont bien (c'est que ça déroute les nouveaux)
  23. pour les recherches performantes car Wx est une daube en recherche j'utilise https://freecommander.com/fr/description/ mais entre nous, cours vite, efface ce machin, charge la 2018. il n'y a pas d'avancée significatives et beaucoup plus de bugs.
  24. ho !ça me rappelle une histoire, les pdf issus de la 3d ne sont pas vectoriels. Je parle pas d'un rendu, mais d'une impression d'objet 3d sur une vue en plan... je retrouve plus la discutions, c'est quand je voulais récupérer des coupes ou vue de dessus d'objet 3d en pdf pour les replacer en plan avec les bonnes couleurs sans passer par trace coupe... et bien ça pixélise... après un peu de recherche c'était là http://cadxp.com/top..._p__253543 reste à voir si on parle bien de ce problème..
  25. Bonjour j'ai un archi qui a la salle habitudes de poser tous ses textes dans le même calque. De tous ces textmult je voudrai passer sur un autre calque (Nom-piece) tous les texte ayant la même taille qu'un que je sélectionne. Quelle est la propriété à interroger?
×
×
  • 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é