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

    Cercles concentriques

    Salut, Une boucle alors? ((lambda ( / ptc rad) (initget 1) (setq ptc (getpoint "\nCentre du cercle: ")) (while (setq rad (getdist ptc "\nDonnez le rayon: ")) (command "_.circle" "_none" ptc rad) ) (prin1) ))
  2. bonuscad

    cotation en lisp

    J'ai édité le code lisp précédent pour inclure la création d'un nouveau style de cotation nommé "CADXP" qui sera plus approprié pour ce style de cotation. Donc ce code va coter le delta Z entre les sommets de la polyligne et la ligne de référence. Je te laisse maintenant voir pour coter les distances entre sommets (ou en cumulé), je rappelle que le temps me manque <_<
  3. bonuscad

    cotation en lisp

    Bonjour, Je suis tombé ces derniers mois sur un bout de code sur un forum US (je n'ai pas retrouvé le lien) qui je pense est à creuser pour faire ce que tu désire. D'ailleurs je l'avais mis de coté dans cette attention de le peaufiner, mais le temps me manque... Voici le bout de code trouvé et non travaillé. Pour faire un test, dessiner une polyligne optimisée et brisée (comme une ligne de TN d'un profil en travers ET une ligne (en mode ortho) qui sera la ligne du plan de comparaison. (defun c:DimTwo(/ adoc space obj_dim pl refl pt pt2 ss) (vl-load-com) (setq adoc (vla-get-activedocument (vlax-get-acad-object)) space (if (= 1 (getvar "CVPORT")) (vla-get-paperspace adoc) (vla-get-modelspace adoc) ) obj_dim (vla-add (vla-get-Dimstyles adoc) "CADXP") ) (vla-put-activedimstyle adoc obj_dim) (mapcar '(lambda (dimvar value / ) (vla-setvariable adoc dimvar Value)) '("DIMPOST" "DIMAPOST" "DIMSCALE" "DIMASZ" "DIMEXO" "DIMDLI" "DIMEXE" "DIMRND" "DIMDLE" "DIMTP" "DIMTM" "DIMTXT" "DIMCEN" "DIMTSZ" "DIMALTF" "DIMLFAC" "DIMTVP" "DIMTFAC" "DIMGAP" "DIMALTRND" "DIMTOL" "DIMLIM" "DIMTIH" "DIMTOH" "DIMSE1" "DIMSE2" "DIMTAD" "DIMZIN" "DIMALT" "DIMALTD" "DIMTOFL" "DIMSAH" "DIMTIX" "DIMSOXD" "DIMCLRD" "DIMCLRE" "DIMCLRT" "DIMADEC" "DIMDEC" "DIMTDEC" "DIMALTU" "DIMALTTD" "DIMAUNIT" "DIMFRAC" "DIMLUNIT" "DIMDSEP" "DIMTMOVE" "DIMJUST" "DIMSD1" "DIMSD2" "DIMTOLJ" "DIMTZIN" "DIMALTZ" "DIMALTTZ" "DIMUPT" "DIMATFIT") '("" "" 1.0 2.5 0.625 3.75 1.25 0.0 0.0 0.0 0.0 2.5 2.5 0.0 0.0393701 1.0 0.0 1.0 0.625 0.0 0 0 0 0 1 1 1 8 0 3 1 0 0 0 0 0 0 0 2 2 2 3 0 0 2 "." 0 2 1 1 0 8 0 0 0 3) ) (vla-copyfrom obj_dim adoc) (princ "\nSelectionner la Polyligne: ") (if (and (setq pl (ssget "_:E:S:L" '((0 . "LWPOLYLINE")))) (progn (princ "\nSelectionner la ligne du Plan de Comparaison: ") (setq refl (ssget "_:E:S:L" '((0 . "*LINE")))) ) ) (progn (setq refl (vlax-ename->vla-object (ssname refl 0))) (foreach pt (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 10)) (entget (ssname pl 0)) ) ) (vla-addDimRotated space (vlax-3d-point (append pt '(0.0))) (vlax-3d-point (setq pt2 (vlax-curve-getclosestpointto refl pt)) ) (vlax-3d-point (mapcar (function (lambda (a B) (* (+ a B) 0.5))) pt pt2) ) (* pi 0.5) ) ) ) ) (princ) ) Pour avoir une cotation avec une présentation correcte façon profil en travers ou long, il suffirait d'utiliser un style de cotation approprié. Je pense que ça peut être un bon départ, en plus si l'on fait un groupe de toutes les cotations, de la polyligne et de la ligne; une modification à l'aide des "grips" sur les sommets ou le déplacement de la ligne de comparaison mettrait à jour les cotations automatiquement (ou après un Regen). Y a déjà de la matière! ;)
  4. bonuscad

    le nord en haut

    Bon, je crois que je n'arrive pas à me faire comprendre. On va reproduire la vidéo de didier sans aucun lisp. On va partir des figures en image du post un cercle et une ligne radiante à coter. Tu réalise ta cotation avec le style que tu veux. (cela fonctionne, mais plus facile à comprendre avec le style standard). Pour cela tu lance la commande _DIMANGULAR tu valide à BLANC pour définir le sommet et là tu t'accroche au centre du cercle. puis tu t'accroche au quadrant voulu de ton cercle (ceci pour définir l'origine de l'angle) et pour finir le dernier point l'extrémité de ta ligne Pour la position de la ligne de cote, l'importance du lieu du clic détermine le sens de l'angle (avec le style standard on comprend mieux ce point de position) Donc avec un style sans ligne d'attache, de ligne de cote, bien valider le bon angle ! Maintenant pour faciliter la chose on va créer un groupe constitué de ta ligne et de la cote crée. commande _-GROUP option _Create tu peux mettre TRIGO comme nom de groupe et enfin tu sélectionne la ligne et la cotation. Maintenant quitte à me répéter on va utiliser les GRIPS clique à BLANC sur ta ligne et des petits carrés bleu vont apparaitre. tu clique sur le carré bleu désignant l'extrémité de ta ligne (elle va passer en rouge et en ligne de commande du vas passer en mode **ETIRER** et là tu la repositionne en DYNAMIQUE (comme sur la vidéo) à un autre endroit sur le périmètre du cercle. Ceci autant de fois que tu veux. Si le style n'est pas standard il peut sembler qu'il y a un grip perdu dans la nature, c'est celui de la position de la ligne de cote. Si tu active ce grip en rouge et que tu l'étire au-delà de l'angle coté, c'est l'angle complémentaire à 2PI qui sera coté en texte, donc pour toi le sens trigo inverse. PS: Il va de soit que les cotes sont associatives. J'en reviens à ma première réponse: qu'une bonne macro pour LT pourrait faire la même chose que des lisp (avec ou sans réacteur) Reinventing the wheel
  5. bonuscad

    le nord en haut

    Comme certain ont du mal avec le sens de rotation, voici le code qui mettra en place les 2 solutions de cotation. Bien que cela me semble inutile car on peut faire cela simplement avec les grips (Changer le sens de rotation, la position du segment mesuré, la cote se met à jour, je vois pas trop l'utilité de créer des réacteurs) ((lambda ( / AcDoc Space js dxf_cod rad pt ang p pto pti nw_obj ptxt ss1 nw_obj2 ptxt1 ss2 key e_name) (vl-load-com) (setq AcDoc (vla-get-ActiveDocument (vlax-get-acad-object)) Space (if (= 1 (getvar "CVPORT")) (vla-get-PaperSpace AcDoc) (vla-get-ModelSpace AcDoc) ) ) (while (null (setq js (ssget "_+.:E:S" '((0 . "ARC,CIRCLE")))))) (setq dxf_cod (entget (ssname js 0)) rad (cdr (assoc 40 dxf_cod)) pt (cdr (assoc 10 dxf_cod)) ) (initget "Nord Est Sud Ouest _North East South West") (setq ang (getorient pt "\nOrigine de la mesure angulaire [Nord/Est/Sud/Ouest] <Nord>: ")) (setq ang (cond ((or (not ang) (eq ang "North")) (* 0.5 pi)) ((eq ang "East") 0.0) ((eq ang "South") (* 1.5 pi)) ((eq ang "West") pi) (T ang) ) ) (while (setq p (getpoint pt "\nPoint: ")) (setq pto (polar pt ang rad) pti (polar pt (angle pt (trans p 1 0)) rad) nw_obj (vla-AddDim3PointAngular Space (vlax-3d-point pt) (vlax-3d-point pto) (vlax-3d-point pti) (vlax-3d-point (setq ptxt (polar pt (angle pt (mapcar '* (mapcar '+ pto pti) '(0.5 0.5 0.5))) rad))) ) ss1 (ssget "_L") nw_obj1 (vla-AddDim3PointAngular Space (vlax-3d-point pt) (vlax-3d-point pto) (vlax-3d-point pti) (vlax-3d-point (setq ptxt1 (polar pt (+ pi (angle pt (mapcar '* (mapcar '+ pto pti) '(0.5 0.5 0.5)))) rad))) ) ss2 (ssget "_L") ) (if (and ss1 ss2 (= 0 (getvar "CMDACTIVE"))) (progn (sssetfirst nil ss2) (princ "\n<Déplacer Curseur> pour choix; <Entrée>/[Espace]/Click+droit pour finir!.") (while (and (not (member (setq key (grread T 4 2)) '((2 13) (2 32)))) (/= (car key) 25)) (cond ((eq (car key) 5) (if (< (distance ptxt (cadr key)) (distance ptxt1 (cadr key))) (setq e_name (ssname (cadr (sssetfirst nil ss1)) 0)) (setq e_name (ssname (cadr (sssetfirst nil ss2)) 0)) ) ) ) ) (entdel e_name) ) ) ) (prin1) ))
  6. bonuscad

    le nord en haut

    "une utilisation avec le nord à l'Est." On est vraiment en plein basculement des pôles Plus sérieusement tu place l'origine avec polar dans le code (polar pt 0.0 (cdr (assoc 40 dxf_cod))) ; origine à l'est (polar pt (* 0.5 pi) (cdr (assoc 40 dxf_cod))) ; origine au nord (polar pt pi (cdr (assoc 40 dxf_cod))) ; origine à l'ouest (polar pt (* 1.5 pi) (cdr (assoc 40 dxf_cod))) ; origine au sud "et le sens trigo" dans le code, lors de la pause, c'est suivant la position donné au texte de cote que tu vas déterminer l'angle à mesurer. (ce voit mieux avec le style standard)
  7. bonuscad

    le nord en haut

    Une suggestion ! Je ne me suis pas occupé du style de cote. En macro cela doit être réalisable aussi ((lambda ( / js dxf_cod pt p) (while (null (setq js (ssget "_+.:E:S" '((0 . "ARC,CIRCLE")))))) (setq dxf_cod (entget (ssname js 0))) (setq pt (trans (cdr (assoc 10 dxf_cod)) 0 1)) (while (setq p (getpoint pt "\nPoint: ")) (command "_.dimangular" "" "_none" pt "_none" (polar pt (* 0.5 pi) (cdr (assoc 40 dxf_cod))) "_none" p pause) ) ))
  8. Bonjour, Comme tu parles d'étiquetage, je suppose que la précision du centroid n'est pas spécialement recherché. Est ce que le point de grip central pourrait convenir? Si oui un (cdr (assoc 11 (entget (car (entsel))))) sur un MPOLYGON serait suffisant pour l'obtenir. La différence avec (ade_expreval obj_acad ".center" "point"); sur un mpolygon unique c'est pratiquement le même point que celui du grip par contre sur un mpolygon constitué de plusieurs surface fermée distincte, le point ne sera pas le même. En fait dans ce dernier cas la fonction (ade_expreval obj_acad ".center" "point") ne renvoi que le point de la dernière surface crée dans le groupe MPolygon
  9. Salut, Si ces verticales ont été construite dans le même sens (de bas en haut / haut vers bas) et dans l'ordre régulier croissant, alors ces quelques lignes devraient te simplifier la vie. NB: Dé-commenter/commenter la ligne pour 1er ou 2eme sommet. (defun c:PLby1End (/ nb js n nb dxf_ent dxf_210 lst_pt e_next dxf_next) (cond ((eq (getvar "cvport") 1) (princ "\n** Commande autorisée uniquement dans l'espace objet.") ) (T (princ "\nSélectionner les Lignes/Polylignes à relier par les extrèmités") (setq js (ssget '((0 . "LINE,LWPOLYLINE"))) n -1 nb 0 lst_pt nil) (cond (js (repeat (sslength js) (setq dxf_ent (entget (ssname js (setq n (1+ n)))) dxf_210 (cdr (assoc 210 dxf_ent)) nb (1+ nb)) (cond ((eq (cdr (assoc 0 dxf_ent)) "LINE") (setq lst_pt (cons (list (cdr (assoc 10 dxf_ent)) (cdr (assoc 11 dxf_ent))) lst_pt)) ) ((eq (cdr (assoc 0 dxf_ent)) "LWPOLYLINE") (setq lst_pt (cons (mapcar '(lambda (x) (trans x dxf_210 0)) (mapcar '(lambda (x) (append x (list (cdr (assoc 38 dxf_ent))))) (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 10)) dxf_ent)) ) ) lst_pt ) ) ) ) ) (command "_.pline") (while lst_pt ;(command "_none" (trans (caar lst_pt) 0 1)); choix 1er sommet (command "_none" (trans (cadar lst_pt) 0 1)); choix 2eme sommet (setq lst_pt (cdr lst_pt)) ) (command "") (princ (strcat "\n" (itoa nb) " sommets tracés.")) ) (T (princ "\nSélection non valide ou vide.")) ) ) ) (prin1) )
  10. Bonjour Pour mois, sans problème, mais il va falloir adapter à ton besoin pour pouvoir tester car je l'ai écrit ponctuellement pour résoudre MA problématique. Une fois la conversion effectuée, je n'aurais plus besoin de le faire, ce qui explique que le code est très sommaire, mais il donne l'essentielle de la procédure. Le code était destiné à traiter les feuilles cadastrales de l'ensemble du département. Une partie était en Lambert3 et l'autre en RGF93.CC45. Le script m'a permis de faire la projection vers le Lambert93 et ainsi de faire une superposition de la BD-Ortho et du cadastre. J'avais essayé avec les commandes de conversion de projection de Covadis mais les hachures ne suivaient pas, alors qu'avec la projection de Map, tout à suivi. (defun c:make_script-map_setcdrsys ( / prefix allias file_scr l_mdir syscoord l_sdir ) (setq prefix (strcat (setq alias (vl-filename-directory (getfiled "Sélectionner un fichier dessin TEMOIN" "" "dwg" 16))) "\\") file_scr (open (strcat prefix "traiter_dossier.scr") "w") ) (write-line "_.undo" file_scr) (write-line "_control" file_scr) (write-line "_none" file_scr) (setq l_mdir (vl-remove ".." (vl-remove "." (vl-directory-files prefix nil -1)))) (foreach folder l_mdir (if (member folder '("com-002" "com-005" "com-019" "com-024" "com-029" "com-031" "com-032" "com-042" "com-053" "com-055" "com-061" "com-076" "com-081" "com-088" "com-090" "com-096" "com-101" "com-110" "com-115" "com-116" "com-118" "com-122" "com-131" "com-132" "com-134" "com-138" "com-145" "com-154" "com-156" "com-157" "com-159" "com-168" "com-176" "com-181" "com-183" "com-186" "com-189" "com-190" "com-191" "com-196" "com-199" "com-201" "com-202" "com-207" "com-208" "com-213" "com-223" "com-229" "com-231" "com-238" "com-240" "com-241" "com-242" "com-247" "com-254" "com-255" "com-272" "com-275" "com-280" "com-289" "com-302" "com-304" "com-319" "com-329" "com-330" "com-331" "com-334" "com-336" "com-340" "com-341" "com-346" "com-348" "com-349")) (setq syscoord "NTF.Lambert-3") (setq syscoord "RGF93.CC45") ) (setq l_sdir (vl-remove ".." (vl-remove "." (vl-directory-files (strcat prefix folder) nil -1)))) (foreach sfolder l_sdir (foreach dwg (vl-directory-files (strcat prefix folder "\\" sfolder) "*.dwg" 1) (write-line "_.new" file_scr) (write-line "\"C:\\Program Files\\Autodesk\\AutoCAD Map 3D 2011\\Template\\map2Diso.dwt\"" file_scr) (write-line "cmddia" file_scr) (write-line "0" file_scr) (write-line "_ADESETCRDSYS" file_scr) (write-line "_sourceDrawings" file_scr) (write-line (strcat "CADASTRE:" "\\" folder "\\" sfolder "\\" dwg) file_scr) (write-line syscoord file_scr) (write-line "_currentSession" file_scr) (write-line "Lambert93" file_scr) (write-line "_exit" file_scr) (write-line "_ADEDRAWINGS" file_scr) (write-line "_ALias" file_scr) (write-line "_Update" file_scr) (write-line "CADASTRE" file_scr) (write-line "CADASTRE" file_scr) (write-line "I:\\DEPART07\\BD_CADASTRE-07" file_scr) (write-line "_exit" file_scr) (write-line "_ATtach" file_scr) (write-line (strcat "CADASTRE:" "\\" folder "\\" sfolder "\\" dwg) file_scr) (write-line "_exit" file_scr) (write-line "_ADEQUERY" file_scr) (write-line "_Define" file_scr) (write-line "_Location" file_scr) (write-line "_all" file_scr) (write-line "_exit" file_scr) (write-line "_execute" file_scr) (write-line "_draw" file_scr) (write-line "_.zoom" file_scr) (write-line "_extent" file_scr) (write-line "_.saveas" file_scr) (write-line "2010" file_scr) (write-line (strcat "I:\\Depart07\\L93-BD_CADASTRE-07\\" folder "\\" sfolder "\\" dwg) file_scr) (write-line "cmddia" file_scr) (write-line "1" file_scr) (write-line "_.close" file_scr) ) ) (write-line "_.new" file_scr) (write-line "\"C:\\Program Files\\Autodesk\\AutoCAD Map 3D 2011\\Template\\map2Diso.dwt\"" file_scr) (write-line "cmddia" file_scr) (write-line "0" file_scr) (write-line "_ADESETCRDSYS" file_scr) (write-line "_sourceDrawings" file_scr) (write-line (strcat "CADASTRE:" "\\" folder "\\" folder ".dwg") file_scr) (write-line syscoord file_scr) (write-line "_currentSession" file_scr) (write-line "Lambert93" file_scr) (write-line "_exit" file_scr) (write-line "_ADEDRAWINGS" file_scr) (write-line "_ALias" file_scr) (write-line "_Update" file_scr) (write-line "CADASTRE" file_scr) (write-line "CADASTRE" file_scr) (write-line "I:\\DEPART07\\BD_CADASTRE-07" file_scr) (write-line "_exit" file_scr) (write-line "_ATtach" file_scr) (write-line (strcat "CADASTRE:" "\\" folder "\\" folder ".dwg") file_scr) (write-line "_exit" file_scr) (write-line "_ADEQUERY" file_scr) (write-line "_Define" file_scr) (write-line "_Location" file_scr) (write-line "_all" file_scr) (write-line "_exit" file_scr) (write-line "_execute" file_scr) (write-line "_draw" file_scr) (write-line "_.zoom" file_scr) (write-line "_extent" file_scr) (write-line "_.saveas" file_scr) (write-line "2010" file_scr) (write-line (strcat "I:\\Depart07\\L93-BD_CADASTRE-07\\" folder "\\" folder ".dwg") file_scr) (write-line "cmddia" file_scr) (write-line "1" file_scr) (write-line "_.close" file_scr) ) (close file_scr) (princ (strcat "\Vous pouvez lancer le SCRIPT :" prefix "traiter_dossier.scr")) (prin1) )
  11. Bonjour, Normalement, il faut double-quoter (""). Alors fait bizarre, j'ai essayé avec MODEMACRO l'expression: ""$(substr,$(getvar,dwgname),1,$(-,$(strlen,$(getvar,dwgname)),4))"" Cela fonctionne bien, mais si je retranscrit pour la macro de bouton, et bien ça va plus :( Peut être passer la chaine par une variable USER et la récupérer ensuite ... (pas essayé)
  12. Bonjour, Voir la réponse récente de Bryce 275.5/2 = 2755/20
  13. Je confirme, C'est bien Patrick_35 le dévoileur de l'astuce. Je l'avais déjà cité plusieurs fois en rappel, mais cette fois-ci; je ne l'ai pas fait. Désolé... NB:Pour info avec Autocad Map, on a aussi le même comportement avec ses commandes propres (ADExxxx). Je viens de me pencher dessus pour faire des scripts de traitement par lots pour un changement de système de coordonnées (avec CMDDIA à 0) et ça a fonctionné à merveille: 2000 fichiers traités dans l'après midi.
  14. Bonjour, Une technique que j'utilise pour avoir les options en Anglais. Pour me mettre en configuration d’exécution de lisp ou de script, je met d'abord CMDDIA et FILEDIA à 0 Je tape la commande en Français, puis aux messages des options je prend l'option dans le menu contextuel (clic-droit) en FRANCAIS. Suivant les cas, la plus part du temps (ESC) pour annuler la dernière option, parfois je relance la commande. J'utilise alors la flèche haute pour faire défiler l'historique des options, et là il me propose en premier la dernière option utilisée mais en ANGLAIS (sans l'underscore placé devant), j'ai donc ma traduction.... Par exemple:
  15. Bonjour, Pour les mordus (ou en utilisation ludique), une page web sympathique avec une animation flash interactive qui vous plonge dans notre système solaire. Le lien vers solarsystemscope
  16. bonuscad

    exploser textmult

    Fais attention au (if Regroupe simplement les actions a exécuter dans un (progn .....) quand la condition est vérifiée. (if (= (vla-get-objectname ent) "AcDbMText") (progn (setq ent2 (vlax-vla-object->ename ent)) (command "_explode" ent2 "") ) ) ou alors plus simplement: (if (= (vla-get-objectname ent) "AcDbMText") (command "_explode" (vlax-vla-object->ename ent) "") )
  17. J'aurais du écrire le message comme ceci: "choix d'un objet MODELE pour le filtrage" Cela veut dire que l'entité unique sélectionnée va servir à constituer le filtre de sélection suivant la même correspondance que le modèle. (Même objet sur le même calque et dans le même espace (objet ou papier) ayant éventuellement le même code couleur et un type de ligne identique (si ceux ci sont défini dans le modèle) et pour les polylignes tiendra compte aussi du bit 70 (3Poly, Maillage, close, ouverte, typeligne etc...)
  18. bonuscad

    métré de surface

    Bonjour babatche06 Il me semble que ce j'ai écrit CurveArea_Field qui répond de façon proche à ce que tu désire. A la différence que ce sont des champs qui ne sont pas inscrits dans le même calques que les hachures et que le point d'insertion du champs n'est pas le centre de gravité mais le centre de la "Bounding Box" (forme rectangulaire enveloppante de l'objet). Après des modifications du code restent possible...
  19. Bonjour, Si on veut! <_< Cependant je pense que CECIpeut répondre à ton besoin, à tester...
  20. Attention (getkword) retourne une clé sous forme de chaine, donc (itoa diam_plb_sd_coll) et (itoa diam_plb_sd_piq) sont incorrects. (Voir le strcat fait dans le code proposé) NB:Une parenthèse fermante en trop dans ton dernier code posté.
  21. Bonjour, Pour faire un choix restreint, utilise plutôt (getkword) et tu défini tes choix restreints avec (initget) Par exemple (avec une valeur par défaut): (initget "100 125 150") (setq diam_plb_sd_coll (getkword "\nDiamètre collecteur[100/125/150] <100>: ")) (if (not diam_plb_sd_coll) (setq diam_plb_sd_coll "100")) (initget "40 50") (setq diam_plb_sd_piq (getkword "\nDiamètre piquage [40/50] <50>: ")) (if (not diam_plb_sd_piq) (setq diam_plb_sd_piq "50")) (princ (strcat "assemblage_PVC_" diam_plb_sd_coll "_" diam_plb_sd_piq "_c.dwg")) (prin1) En plus de cette manière, tes différents choix seront accessibles avec le click-droit, même pas besoin de taper les caractères (Attention à la variable SHORTCUTMENU si elle n'a pas sa valeur par défaut)
  22. Bonjour, Le plus simple "Ctrl" + "R". Avec ceci tu navigue dans la boucle n+1 de l'ordre de création des fenêtres.
  23. Juste une suggestion vite fait pour déterminer automatiquement les points cardinaux d'une parcelle, sans les désigner, en s'appuyant sur la BoundingBox d'une LWPOLYLINE. ((lambda ( / js pt_lst ename ll ur north_east south_west south_east north_west) (defun more_near (pt lst / lst_d) (setq lst_d (mapcar '(lambda (x) (distance x pt)) lst)) (nth (- (length lst_d) (length (member (apply 'min lst_d) lst_d))) lst) ) (while (not (setq js (ssget "_+.:E:S" '((0 . "LWPOLYLINE")))))) (setq pt_lst (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 10)) (entget (ssname js 0))))) (setq ename (vlax-ename->vla-object (ssname js 0))) (vla-GetBoundingBox ename 'll 'ur) (setq ll (safearray-value ll) ur (safearray-value ur) ) (setq north_east (more_near ur pt_lst)) (setq south_west (more_near ll pt_lst)) (setq south_east (more_near (list (car ur) (cadr ll) 0.0) pt_lst)) (setq north_west (more_near (list (car ll) (cadr ur) 0.0) pt_lst)) (command "_.line" "_none" south_west "_none" north_east "") (command "_.line" "_none" south_east "_none" north_west "") )) les instructions _.line en fin de code sont juste là pour te montrer les points déterminés par la routine
  24. Si la variable PICKBOX est à 0, cela reproduit ta galère pour la sélection.
  25. bonuscad

    Talus avec barbules

    Les polylignes 2D à nombreux sommets, et si ceux-ci sont rapprochés (< à la définition du motif LIN), peuvent empêcher un affichage correct du type de ligne. La commande PEDIT à une option "TYpeligne gén" C'est aussi accessible par le panneau des propriétés. Lors de l'activation de ce mode, Autocad applique le type de ligne du 1er point au dernier, sans tenir compte des sommets intermédiaire pour un nouveau départ de répétition. Si inactif, Autocad tente de d'appliquer la répétition du motif à partir de chaque sommet jusqu'au suivant. (Si les sommets sont rapprochés, et que la répétition n'est pas possible, le type continu semblera appliqué entre ces sommets: Ce qui peut donner l'impression que le type de ligne ne fonctionne pas. Est-ce plus clair?
×
×
  • 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é