Aller au contenu

bonuscad

Membres
  • Compteur de contenus

    5 029
  • Inscription

  • Dernière visite

  • Jours gagnés

    56

Tout ce qui a été posté par bonuscad

  1. bonuscad

    Express Tools

    Bonjour, Je viens de découvrir (Autocad 2011),une commande des Express que je ne connaissais pas: TSPACEINVADERS D'après mon test, elle détecte les textes qui se chevauchent et les place dans une sélection. Ce que je trouve navrant, c'est que dans l'aide des express elle n’apparaît pas! Curieux j'ai cherché un fichier dans le dossier des express, mais j'ai rien trouvé. Pourtant cela à l'air d'être une fonction lisp car on peut l'appeler aussi par (c:tspaceinvaders) depuis un autre lisp par exemple. Ma question: Connaissez vous d'autres fonctions non répertoriées des express?
  2. Autre proposition qui pourrait approcher ta demande à la différence que le tableau est fait dans Autocad: mult-info_po2cell.lsp
  3. Bonjour, A voir si cela te convient: Exporter vers un fichier CSV ? PtDef2CSV.lsp
  4. Je me suis trouvé devant un dilemme, pour que tu puisses comprendre il a fallu que j'écrive un code qui fonctionne pour pouvoir l'analyser de A à Z. Mais tu peux continuer avec ta première démarche (command "coupure" ....) (ce n'est pas irréalisable non-plus!) Un exemple de résolution de la problématique (analyse vectorielle), je te laisse le soin de l'intégrer dans le code. ((lambda ( / js dxf_ent p10 p11 v1 v2 det_or) (setq js (ssget "_+.:E:S" '((0 . "LINE")))) (cond (js (initget 1) (setq dxf_ent (entget (ssname js 0)) p10 (cdr (assoc 10 dxf_ent)) p11 (cdr (assoc 11 dxf_ent)) v1 (mapcar '- p10 p11) v2 (mapcar '- p10 (getpoint "\nPoint?: ")) det_or (apply '(lambda (x1 y1 z1 x2 y2 z2) (- (* x1 y2) (* y1 x2))) (append v1 v2) ) ) (cond ((> det_or 0.0) (princ "\nVous avez cliqué à gauche!")) ((< det_or 0.0) (princ "\nVous avez cliqué à droite!")) (T (princ "\nVous avez cliqué sur la ligne!")) ) ) ) (prin1) )) Cela vas te dire si tu as cliqué à gauche ou à droite de l'entité (par rapport à sons sens de construction origine vers fin)
  5. Bonjour, Quand tu fais ceci: (setq nom (ssget "_X" '((0 . "INSERT")(2 . "annotation")(10 28482.7 408.153 0.0)))) tu 'quote ton point '((10 28482.7 408.153 0.0)) Ce qui n'est pas du tout la même chose que: (cons 10 pt_ins) même si !pt_ins te retourne (28482.7 408.153 0.0) Si tu fais (rtos (car pt_ins) 2 12) tu pourrais obtenir par exemple: "28482.729563457823" <> 28482.7 Quand tu 'quote tu perds la précision, donc la sélection échoue si le point est quelconque... (repeat (setq n (sslength nom)) (print (ssname nom (setq n (1- n))))) Dans ton cas vas retourner tout les noms d'entités contenu dans le jeu de sélection "nom"
  6. Comme tu as l'air de "patauger", j'ai commencé à t'écrire un code correspondant à tes désirs. Il faudra encore peaufiner le code pour avoir le décalage du bon coté (Il faut bien te laisser quelque points ardus à résoudre) et l'affectation des calques (plus simple) mogo.lsp
  7. Bonjour, Tu as choisi dès le départ de construire ton programme en utilisant (command), bien que cela soit plus facile au départ pour faire certaine choses simples, on se heurte lorsqu'on veut améliorer son programme à certaine difficultés, surtout avec des commandes d'édition tel que Coupure Ajuster Prolonger Raccord Chamfrein. En effet ces commandes ont besoin d'un point sélection pour réaliser la commande correctement selon nos désirs et c'est là que les choses se complique pour le réaliser en programmation. Ce n'est pas infaisable mais la suggestion de départ d'utiliser les fonctions (vlax-curve-xxxx) aurait été au bout du compte beaucoup plus simple pour faire ce que tu désire. Si tu veux continuer avec (command) il te faut fournir une variable sous forme de liste comme celle que te retourne la fonction (entsel): donc une liste (<nom de entité> (point de sélection)) Avec cette méthode cela fonctionne bien SI tes entités sont affichées entièrement à l'écran et si on gère bien les SCU si ceux-ci sont utilisés.
  8. Oui tu peux prendre l'option Non-ajuster
  9. bonuscad

    lisp aligner des blocs

    Bonjour, En gardant ta séquence d'extraction de l'attribut: (assoc 1 (entget (entnext (entnext ent)))) Est ce que ceci conviendrait? ((lambda ( / js n ent dxf_ent new_pt) (setq js (ssget '((0 . "INSERT") (66 . 1)))) (cond (js (repeat (setq n (sslength js)) (setq ent (ssname js (setq n (1- n))) dxf_ent (entget ent) new_pt (list (atof (cdr (assoc 1 (entget (entnext (entnext ent)))))) 0.0 0.0) ) (entmod (subst (cons 10 new_pt) (assoc 10 dxf_ent) dxf_ent)) ) ) ) )) Éventuellement suivi de la commande ATTSYNC pour resynchroniser la position des attributs. NB: Tu peux affiner le filtre de sélection de (ssget) en donnant le groupe (2 . "Nom du bloc")
  10. Bonjour, Peut être comme ceci, à vérifier car je n'ai pas fait de tests approfondis... (vla-Put-LastSavedBy (vla-get-SummaryInfo (vla-get-Database (vla-get-ActiveDocument (vlax-get-acad-object)))) "Entreprise Tartempion")
  11. Intégrée complétement (plus simple que d'y faire appel) J'ai modifié le code précédent.
  12. Oupss! Après d'autre tests, j'ai remarqué un petit oubli de ma part Dans la phase finale d'entmake à la place de: '((210 0.0 0.0 1.0)) mettre plutôt: (list (assoc 210 dxf_ent)) Cela pour que cela fonctionne correctement depuis le SCU des mpolygones d'origine... PS: Si COPY_OD n'est pas chargé il ne fait simplement pas les copies des OD mais trace bien le contour.
  13. Si j'ai bien saisi ! (defun c:MP2LW ( / js key n ent dxf_ent l_pt p11 sdata apps elst cdata ) (setq js (ssget '((0 . "MPOLYGON") (91 . 1)))) (cond (js (initget "Oui Non _Yes No") (setq key (getkword "\nSupprimer les polygones sources [Oui/Non]? <O>: ")) (if (not key) (setq key "Yes")) (repeat (setq n (sslength js)) (setq ent (ssname js (setq n (1- n))) dxf_ent (entget ent '("*")) l_pt (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 10)) dxf_ent)) p11 (cdr (assoc 11 dxf_ent)) l_pt (mapcar '(lambda (x) (list (+ (car x) (car p11)) (+ (cadr x) (cadr p11)) (caddr x))) (cdr l_pt)) ) (entmake (append (list '(0 . "LWPOLYLINE") '(100 . "AcDbEntity") (assoc 67 dxf_ent) (assoc 410 dxf_ent) (assoc 8 dxf_ent) (if (assoc 62 dxf_ent) (assoc 62 dxf_ent) '(62 . 256)) (if (assoc 6 dxf_ent) (assoc 6 dxf_ent) '(6 . "BYLAYER")) (if (assoc 370 dxf_ent) (assoc 370 dxf_ent) '(370 . -1)) '(100 . "AcDbPolyline") (cons 90 (1- (length l_pt))) '(70 . 1) '(43 . 0.0) (cons 38 (cadddr (assoc 10 dxf_ent))) '(39 . 0.0) ) (apply 'append (mapcar '(lambda (x) (list (cons 10 x) (cons 40 0.0) (cons 41 0.0) (cons 42 0.0))) l_pt)) (list (assoc 210 dxf_ent)) ) ) (if copy_data (COPY_DATA ent (entlast) "All")) (setq sdata (cdr (assoc -3 dxf_ent)) apps (mapcar 'car sdata) elst (entget (entlast) '("*")) cdata (cdr (assoc -3 elst)) elst (vl-remove (assoc -3 elst) elst) ) (entmod (append elst (list (cons -3 (append (vl-remove-if (function (lambda (x) (member (car x) apps) ) ) cdata ) sdata ) ) ) ) ) (if (eq key "Yes") (entdel ent)) ) ) ) (prin1) )
  14. bonuscad

    Création de bloc

    Bonjour, Pour la création d'un bloc par entmake, un exemple: (tu copies-colles directement en ligne de commande) (foreach n '( ( (0 . "BLOCK") (8 . "0") (2 . "NORDLAMB") (70 . 0) (8 . "0") (62 . 0) (6 . "ByBlock") (370 . -2) (10 0.0 0.0 0.0) ) ( (0 . "LWPOLYLINE") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (62 . 0) (6 . "ByBlock") (370 . -2) (100 . "AcDbPolyline") (90 . 3) (70 . 0) (38 . 0.0) (39 . 0.0) (10 0.0140625 0.0) (40 . 0.0) (41 . 0.00124296) (42 . 0.0) (10 0.00300077 -0.000621481) (40 . 0.00124296) (41 . 0.0) (42 . 0.0) (10 0.0 0.0) (40 . 0.0) (41 . 0.0) (42 . 0.0) (210 0.0 0.0 1.0) ) ( (0 . "LWPOLYLINE") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (62 . 0) (6 . "ByBlock") (370 . -2) (100 . "AcDbPolyline") (90 . 3) (70 . 0) (38 . 0.0) (39 . 0.0) (10 0.00994369 -0.00994369) (40 . 0.0) (41 . 0.00124296) (42 . 0.0) (10 0.00168241 -0.00256132) (40 . 0.00124296) (41 . 0.0) (42 . 0.0) (10 0.0 0.0) (40 . 0.0) (41 . 0.0) (42 . 0.0) (210 0.0 0.0 1.0) ) ( (0 . "LWPOLYLINE") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (62 . 0) (6 . "ByBlock") (370 . -2) (100 . "AcDbPolyline") (90 . 2) (70 . 0) (43 . 0.0) (38 . 0.0) (39 . 0.0) (10 0.0 -0.0140625) (40 . 0.0) (41 . 0.0) (42 . 0.0) (10 0.00124296 -0.00300077) (40 . 0.0) (41 . 0.0) (42 . 0.0) (210 0.0 0.0 1.0) ) ( (0 . "LWPOLYLINE") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (62 . 0) (6 . "ByBlock") (370 . -2) (100 . "AcDbPolyline") (90 . 3) (70 . 0) (38 . 0.0) (39 . 0.0) (10 0.00994369 0.00994369) (40 . 0.0) (41 . 0.00124296) (42 . 0.0) (10 0.00256132 0.00168241) (40 . 0.00124296) (41 . 0.0) (42 . 0.0) (10 0.0 0.0) (40 . 0.0) (41 . 0.0) (42 . 0.0) (210 0.0 0.0 1.0) ) ( (0 . "LWPOLYLINE") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (62 . 0) (6 . "ByBlock") (370 . -2) (100 . "AcDbPolyline") (90 . 3) (70 . 0) (38 . 0.0) (39 . 0.0) (10 0.0 0.025) (40 . 0.0) (41 . 0.00124296) (42 . 0.0) (10 0.000621481 0.00300077) (40 . 0.00124296) (41 . 0.0) (42 . 0.0) (10 0.0 0.0) (40 . 0.0) (41 . 0.0) (42 . 0.0) (210 0.0 0.0 1.0) ) ( (0 . "LWPOLYLINE") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (62 . 0) (6 . "ByBlock") (370 . -2) (100 . "AcDbPolyline") (90 . 3) (70 . 0) (38 . 0.0) (39 . 0.0) (10 0.0 -0.0140625) (40 . 0.0) (41 . 0.00124296) (42 . 0.0) (10 -0.000621481 -0.00300077) (40 . 0.00124296) (41 . 0.0) (42 . 0.0) (10 0.0 0.0) (40 . 0.0) (41 . 0.0) (42 . 0.0) (210 0.0 0.0 1.0) ) ( (0 . "LWPOLYLINE") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (62 . 0) (6 . "ByBlock") (370 . -2) (100 . "AcDbPolyline") (90 . 3) (70 . 0) (38 . 0.0) (39 . 0.0) (10 -0.00994369 -0.00994369) (40 . 0.0) (41 . 0.00124296) (42 . 0.0) (10 -0.00256132 -0.00168241) (40 . 0.00124296) (41 . 0.0) (42 . 0.0) (10 0.0 0.0) (40 . 0.0) (41 . 0.0) (42 . 0.0) (210 0.0 0.0 1.0) ) ( (0 . "LWPOLYLINE") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (62 . 0) (6 . "ByBlock") (370 . -2) (100 . "AcDbPolyline") (90 . 2) (70 . 0) (43 . 0.0) (38 . 0.0) (39 . 0.0) (10 -0.00994369 -0.00994369) (40 . 0.0) (41 . 0.0) (42 . 0.0) (10 -0.00124296 -0.00300077) (40 . 0.0) (41 . 0.0) (42 . 0.0) (210 0.0 0.0 1.0) ) ( (0 . "LWPOLYLINE") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (62 . 0) (6 . "ByBlock") (370 . -2) (100 . "AcDbPolyline") (90 . 2) (70 . 0) (43 . 0.0) (38 . 0.0) (39 . 0.0) (10 0.0 0.025) (40 . 0.0) (41 . 0.0) (42 . 0.0) (10 -0.00124296 0.00300077) (40 . 0.0) (41 . 0.0) (42 . 0.0) (210 0.0 0.0 1.0) ) ( (0 . "LWPOLYLINE") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (62 . 0) (6 . "ByBlock") (370 . -2) (100 . "AcDbPolyline") (90 . 3) (70 . 0) (38 . 0.0) (39 . 0.0) (10 -0.0140625 0.0) (40 . 0.0) (41 . 0.00124296) (42 . 0.0) (10 -0.00300077 0.000621481) (40 . 0.00124296) (41 . 0.0) (42 . 0.0) (10 0.0 0.0) (40 . 0.0) (41 . 0.0) (42 . 0.0) (210 0.0 0.0 1.0) ) ( (0 . "LWPOLYLINE") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (62 . 0) (6 . "ByBlock") (370 . -2) (100 . "AcDbPolyline") (90 . 2) (70 . 0) (43 . 0.0) (38 . 0.0) (39 . 0.0) (10 -0.0140625 0.0) (40 . 0.0) (41 . 0.0) (42 . 0.0) (10 -0.00300077 -0.00124296) (40 . 0.0) (41 . 0.0) (42 . 0.0) (210 0.0 0.0 1.0) ) ( (0 . "LWPOLYLINE") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (62 . 0) (6 . "ByBlock") (370 . -2) (100 . "AcDbPolyline") (90 . 3) (70 . 0) (38 . 0.0) (39 . 0.0) (10 -0.00994369 0.00994369) (40 . 0.0) (41 . 0.00124296) (42 . 0.0) (10 -0.00168241 0.00256132) (40 . 0.00124296) (41 . 0.0) (42 . 0.0) (10 0.0 0.0) (40 . 0.0) (41 . 0.0) (42 . 0.0) (210 0.0 0.0 1.0) ) ( (0 . "LWPOLYLINE") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (62 . 0) (6 . "ByBlock") (370 . -2) (100 . "AcDbPolyline") (90 . 2) (70 . 0) (43 . 0.0) (38 . 0.0) (39 . 0.0) (10 -0.00994369 0.00994369) (40 . 0.0) (41 . 0.0) (42 . 0.0) (10 -0.00300077 0.00124296) (40 . 0.0) (41 . 0.0) (42 . 0.0) (210 0.0 0.0 1.0) ) ( (0 . "LWPOLYLINE") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (62 . 0) (6 . "ByBlock") (370 . -2) (100 . "AcDbPolyline") (90 . 2) (70 . 0) (43 . 0.0) (38 . 0.0) (39 . 0.0) (10 0.00994369 -0.00994369) (40 . 0.0) (41 . 0.0) (42 . 0.0) (10 0.00300077 -0.00124296) (40 . 0.0) (41 . 0.0) (42 . 0.0) (210 0.0 0.0 1.0) ) ( (0 . "LWPOLYLINE") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (62 . 0) (6 . "ByBlock") (370 . -2) (100 . "AcDbPolyline") (90 . 2) (70 . 0) (43 . 0.0) (38 . 0.0) (39 . 0.0) (10 0.0140625 0.0) (40 . 0.0) (41 . 0.0) (42 . 0.0) (10 0.00300077 0.00124296) (40 . 0.0) (41 . 0.0) (42 . 0.0) (210 0.0 0.0 1.0) ) ( (0 . "LWPOLYLINE") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (62 . 0) (6 . "ByBlock") (370 . -2) (100 . "AcDbPolyline") (90 . 2) (70 . 0) (43 . 0.0) (38 . 0.0) (39 . 0.0) (10 0.00994369 0.00994369) (40 . 0.0) (41 . 0.0) (42 . 0.0) (10 0.00124296 0.00300077) (40 . 0.0) (41 . 0.0) (42 . 0.0) (210 0.0 0.0 1.0) ) ( (0 . "LWPOLYLINE") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (62 . 0) (6 . "ByBlock") (370 . -2) (100 . "AcDbPolyline") (90 . 2) (70 . 0) (43 . 0.0) (38 . 0.0) (39 . 0.0) (10 0.00994369 0.00994369) (40 . 0.0) (41 . 0.0) (42 . 0.0) (10 0.00124296 0.00300077) (40 . 0.0) (41 . 0.0) (42 . 0.0) (210 0.0 0.0 1.0) ) ( (0 . "ENDBLK") (8 . "0") (62 . 0) (6 . "ByBlock") (370 . -2) ) ) (entmake n) ) Cela va créer un bloc NORDLAMB qui a toutes les propriété "du bloc" et constitué sur le calque "0" .
  15. bonuscad

    MNT avec autocad

    Si c'est le cas, alors je t'invite à essayer la routine de notre ami ElpanovEvgeniy qui est pour moi une des meilleure routine en lisp pur que j'ai pu testé. Tu la charge et la commande est : TRIANGULATE
  16. Si tu as nettoyé le registre sans sauvegarde préalable, aucune! Mais ce n'est peut être pas ça. Tu peux essayer la commande "_EXPRESSTOOLS" en ligne de commande, peut être que ... Comme les fonctions des express sont bien entremêlées, tu peux espérer que cela remette de l'ordre. Autrement tu reprend ton CD d'install pour installer/réinstaller seulement les Express.
  17. Salut, Quand je regarde dans le fichier revert.lsp, on voit ceci: Ce qui me fait poser la question: As tu utilisé un nettoyeur de registre? Il faut se méfier des nettoyeurs qui peuvent être trop efficace! Ou alors un problème avec le VBA
  18. Merci Lecrabe, D'habitude j'y pense, mais là effectivement... oubli corrigé! On peut se poser la question... En tout cas cela peut faire de jolies moulures en partant simplement de lignes brisées.
  19. J'ai encore peaufiné: Correction pour tenir compte des largeurs éventuelle des segments et en respectant l'affectation. Correction pour un fonctionnement dans ou depuis n'importe quel SCU Ajout des contrôles des saisies de sommets non valide.
  20. J'ai résolu le problème de signe des arrondis, et un autre qui déplaçait les arrondis de segments. Dans l'ensemble cela devrait mieux fonctionner. Il reste des contrôles à faire (que je n'ai pas fais!): La polyligne doit avoir + de 2 sommets et la sélection du 1er et dernier sommet doit être prohibé. J'ai modifié le code précédent.
  21. N'ayant pas trop de temps non plus, voici une base à creuser (je pense qu'il reste un problème de signe d'arrondi suivant les cas) (vl-load-com) (defun c:AddBulgeAtvertex ( / js e_name obj_vla oldsmd pt prm@pt pt1 t1 rtx1 pt2 t2 rtx2 pt_cen ang_cen vertexlist cnt nbv newlist new_bulge new_ewidth bulgelist ewidthlist index indexlist sw ew) (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))) oldsmd (getvar "osmode") ) (cond ((> (cdr (assoc 90 (entget e_name))) 2) (setq doc (vla-get-activedocument (vlax-get-acad-object))) (vla-startundomark doc) (setvar "osmode" 1) (initget 9) (setq pt (getpoint "\nDonner le sommet à traiter: ")) (while (or (null (setq prm@pt (vlax-curve-getparamatpoint obj_vla (trans pt 1 0)))) (equal (vlax-curve-getStartParam obj_vla) prm@pt 1E-13) (equal (vlax-curve-getEndParam obj_vla) prm@pt 1E-13) ) (princ "\nLe sommet choisi ne convient pas!") (initget 9) (setq pt (getpoint "\nDonner le sommet à traiter: ")) ) (setvar "osmode" oldsmd) (setq pt1 (trans (vlax-curve-getpointatparam obj_vla (- prm@pt 0.5)) 0 e_name) t1 (vlax-curve-getfirstderiv obj_vla (- prm@pt 0.5)) rtx1 (- (atan (cadr t1) (car t1)) (* 0.5 pi)) pt2 (trans (vlax-curve-getpointatparam obj_vla (+ prm@pt 0.5)) 0 e_name) t2 (vlax-curve-getfirstderiv obj_vla (+ prm@pt 0.5)) rtx2 (- (atan (cadr t2) (car t2)) (* 0.5 pi)) pt_cen (inters pt1 (polar pt1 rtx1 (distance (trans pt 1 e_name) pt1)) pt2 (polar pt2 rtx2 (distance (trans pt 1 e_name) pt2)) nil) ang_cen (- (angle pt_cen (trans (vlax-curve-getpointatparam obj_vla (1+ prm@pt)) 0 e_name)) (angle pt_cen (trans (vlax-curve-getpointatparam obj_vla (1- prm@pt)) 0 e_name))) vertexlist (vlax-get obj_vla "Coordinates") cnt 0 nbv -1 newlist '() new_bulge '() bulgelist '() new_ewidth '() ewidthlist '() index (* 2 (fix (+ 0.5 (vlax-curve-getparamatpoint obj_vla (trans pt 1 0))))) indexlist (list index (1+ index)) ) (repeat (fix (* 0.5 (length vertexlist))) (setq bulgelist (cons (vla-GetBulge obj_vla (setq nbv (1+ nbv))) bulgelist)) ) (setq nbv -1) (repeat (if (zerop (vlax-get obj_vla "Closed")) (fix (* 0.5 (length vertexlist))) (1- (fix (* 0.5 (length vertexlist))))) (vla-GetWidth obj_vla (setq nbv (1+ nbv)) 'sw 'ew) (setq ewidthlist (cons (list sw ew) ewidthlist)) ) (foreach ordinate vertexlist (if (not (vl-position cnt indexlist)) (setq newlist (cons ordinate newlist)) ) (setq cnt (1+ cnt)) ) (setq cnt 0) (foreach bulge (reverse bulgelist) (if (not (vl-position cnt (list (fix (* 0.5 index))))) (setq new_bulge (cons bulge new_bulge)) ) (setq cnt (1+ cnt)) ) (setq cnt 0) (foreach ewidth (reverse ewidthlist) (if (not (vl-position cnt (list (fix (* 0.5 index))))) (setq new_ewidth (cons ewidth new_ewidth)) ) (setq cnt (1+ cnt)) ) (vl-catch-all-apply 'vlax-put (list obj_vla "Coordinates" (reverse newlist)) ) (setq nbv -1) (foreach bulge (reverse new_bulge) (vla-SetBulge obj_vla (setq nbv (1+ nbv)) bulge) ) (setq nbv -1) (foreach ewidth (reverse new_ewidth) (vla-SetWidth obj_vla (setq nbv (1+ nbv)) (car ewidth) (cadr ewidth)) ) (vla-SetBulge obj_vla (1- prm@pt) (/ (sin (/ ang_cen 4.0)) (cos (/ ang_cen 4.0)))) (if (not (vlax-curve-getparamatpoint obj_vla (trans pt 1 0))) (vla-SetBulge obj_vla (1- prm@pt) (- (/ (cos (/ ang_cen 4.0)) (sin (/ ang_cen 4.0))))) ) (vla-endundomark doc) ) (T (princ "\nLa polyligne doit avoir au moins 3 sommets!") ) ) (prin1) )
  22. En ramenant le code aux simples LWPOLYLINE (seules celle-ci peuvent avoir une largeur constante, code DXF 43), ça donnerait ceci (je ne me suis pas cassé la tête et fait au plus rapide): (defun def_bulg_pl (ls lb flag_closed / ls lb rad a l_new) (if (not (zerop flag_closed)) (setq ls (append ls (list (car ls))))) (while (cadr ls) (if (zerop (car lb)) (setq l_new (append l_new (list (car ls)))) (progn (setq rad (/ (distance (car ls) (cadr ls)) (sin (* 2.0 (atan (abs (car lb))))) 2.0) a (- (/ pi 2.0) (- pi (* 2.0 (atan (abs (car lb)))))) ) (if (< a 0.0) (setq a (- (* 2.0 pi) a))) (if (or (and (< (car lb) 0.0) (> (car lb) -1.0)) (> (car lb) 1.0)) (setq l_new (append l_new (reverse (cdr (reverse (bulge_pts (polar (car ls) (- (angle (car ls) (cadr ls)) a) rad) (car ls) (cadr ls) rad (car lb))))))) (setq l_new (append l_new (reverse (cdr (reverse (bulge_pts (polar (car ls) (+ (angle (car ls) (cadr ls)) a) rad) (car ls) (cadr ls) rad (car lb))))))) ) ) ) (setq ls (cdr ls) lb (cdr lb)) ) (append l_new (list (car ls))) ) (defun bulge_pts (pt_cen pt_begin pt_end rad sens / inc ang nm p1 p2 lst) (setq inc (angle pt_cen (if (< sens 0.0) pt_end pt_begin)) ang (+ (* 2.0 pi) (angle pt_cen (if (< sens 0.0) pt_begin pt_end))) nm (fix (/ (rem (- ang inc) (* 2.0 pi)) (/ (* pi 2.0) 36.0))) ) (repeat nm (setq p1 (polar pt_cen inc rad) inc (+ inc (/ (* pi 2.0) 36.0)) lst (append lst (list p1)) ) ) (setq p2 (polar pt_cen ang rad) lst (append lst (list p2)) ) (if (< sens 0.0) (reverse lst) lst) ) (defun c:po2ml ( / jspl nbr ent dxf_ent typent name_layer closed lst l_bulg oldlayer oldosm) (princ "\nChoix des polylignes à transformer en multilignes: ") (setq jspl (ssget '((0 . "LWPOLYLINE"))) nbr 0 ) (cond (jspl (setq oldlayer (getvar "clayer") oldosm (getvar "osmode")) (setvar "osmode" 0) (setvar "cmdecho" 0) (setvar "cmljust" 1) (command "_.ucs" "_world") (repeat (sslength jspl) (setq typent (cdr (assoc 0 (setq dxf_ent (entget (setq ent (ssname jspl nbr)))))) name_layer (cdr (assoc 8 dxf_ent)) ) (setq closed (boole 1 (cdr (assoc 70 dxf_ent)) 1) lst (mapcar '(lambda (x) (trans x ent 1)) (mapcar 'cdr (vl-remove-if '(lambda (x) (/= (car x) 10)) dxf_ent))) l_bulg (mapcar 'cdr (vl-remove-if '(lambda (x) (/= (car x) 42)) dxf_ent)) lst (def_bulg_pl lst l_bulg closed) ) (setvar "cmlscale" (cdr (assoc 43 dxf_ent))) (cond (lst (setvar "clayer" name_layer) (command "_.mline") (foreach n lst (command n)) (if (not (zerop closed)) (command "_close") (command "")) (entdel ent) ) ) (setq nbr (1+ nbr) lst nil l_bulg nil) ) (command "_.ucs" "_previous") (setvar "clayer" oldlayer) (setvar "osmode" oldosm) (setvar "cmdecho" 1) ) (T (princ "\nSélection vide")) ) (prin1) )
  23. A mon humble avis je pense pas que ce soit possible, ici cela touche les algos interne du noyau d'autocad. Si vraiment cela te pose problème, il faudrait te tourner vers les multilignes. Voir éventuellement ceci pour faire la conversion. Les multilignes respectent les sifflets à la façon de DECALER "_OFFSET".
  24. Toujours connu ça! C'est quelque peu compréhensible, car plus ton angle est fermé, plus le sifflet partira loin du sommet (ce qui peut être disgracieux aussi). Il ont choisi une limite à 29°, il en fallait bien une. C'est observable aussi avec des TRACE. La solution ? Utiliser les épaisseurs de ligne (au moins elle fait des arrondis au lieu d'angles aiguës) à la place des largeurs de polylignes.
  25. Ah les vaccins ...! Personnellement, il n'y a plus que le tétanos que je suis encore prêt à accepter. Voici le site d'une journaliste de la santé Sylvie Simon qui ne mâche pas ses mots à propos des vaccins. Après à chacun d'en retirer ce qu'il doit penser des bénéfices des vaccins. Ce qui semble poser le plus de problème en fait, sont les adjuvants utilisés PS: Ton site en lien est mal jugé par WOT (plugin mozilla)
×
×
  • 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é