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. A l'attention de l'admin du site: Il me semble qu'il serait assez facile de corriger tout les liens existant sur le site pour les passer en https; une sorte de rechercher/remplacer sur l'ensemble des pages du site. Cela éviterai des signalements ou des gymnastiques d’exécutions par les utilisateurs sur les anciens liens et remettrai une certaine lisibilité au site (même si elle ne peut être complète, dut aux multiples péripéties du site).
  2. Bonjour, Beaucoup de liens sont encore disponibles mais demande une gymnastique pour y accéder. Par exemple pour les liens proposés par La Lozère, appliques l'astuce d'Aleck Ultimate dont il a fait un SUJET : en cas de lien mort passez les en https
  3. A essayer (defun c:CBC ( / ) (cond ((ssget "_I") (command "_.copy" "0,0" "0,0") ) ((ssget "_P") (command "_.copy" "_previous" "" "0,0" "0,0") ) (T (command "_.copy" (ssget) "" "0,0" "0,0") ) ) (prin1) )
  4. bonuscad

    PolyAddPoint et PolyDelPoint

    Bonjour Luna, Juste un signalement, il manque la fonction (sublist) dans POLYADDPOINT. J'en profite pour t'encourager car je constate que pour un membre inscrit récemment, tu as déjà un excellent nivaux en lisp, mais tu pratique peut être déjà depuis plus longtemps? En tout cas ça fait plaisir de voir une nouvelle tête prête à prendre la relève, car les pointures sur le site sont les mêmes depuis un bon bout de temps.
  5. bonuscad

    Script d'édition de bloc

    Sans avoir d'exemple de ton bloc, ceci à adapter... (command "_.-ATTEDIT" "_Yes" "Nom du BLOC" "Nom de l'ATTRIBUT" "*" (handent "HANDLE de L'ATTRIBUT") "_Value" "_Replace" "Nouvelle Valeur" "_Next") Le "Nom du BLOC" est à adapter, ainsi que "Nom de l'ATTRIBUT" "HANDLE de L'ATTRIBUT": ici c'est le handle de l'attribut qui est requis, PAS celui de l'insertion du Bloc "Nouvelle Valeur" la nouvelle valeur que tu veut affecter à ton attribut. Je n'ai pas essayé en script....
  6. All_OD2CSV a été retouché/affiné, la stucture du fichier a un peu changé pour plus de simplicité. Le Nom de la table est seulement référencé dans le nom du fichier "nom du fichier-dwg" + "&" + "nom de la table d'objet" ".csv" Si plusieurs tables ont été sélectionnées, il y aura autant de fichiers créés que de tables. Dans ce fichier la 1ere ligne contient le nom des champs d'objet, comme précédemment la modification/ajout/suppression peut se faire sur n'importe quelle colonne, SAUF la 1ère (HANDLE), il n'y a plus la colonne du nombre d'enregistrements, les n-record sont géré automatiquement. La ligne du type de données ne figure plus (caractère, entier réel), ils sont déterminé automatiquement. CSV2OD a été également revu pour la relecture des fichiers produits par All_OD2CSV, mais aussi pour la lecture d'un fichier .csv généré autrement (donc sans "&" dans le nom du fichier, dans ce cas attention à la longueur du nom du fichier qui deviendra le nom de la table). Bien sur la 1 ère colonne des HANDLE doit être définies et valide pour le dessin ou l'importation est faite. L'intitulé HANDLE de la 1ère colonne n'est pas obligatoire, il faut alors que la ligne débute par un séparateur, puis le nom des champs. Le Handle peut être sous la forme par exemple '16D42 ou "16D42", de même les valeurs de champs peuvent aussi contenir des guillemets tel que "Type" ou "2020", dans le cas contraire le type de données sera déterminé par la lecture de la 1ère ligne de données. Donc toute les autres lignes devront être en cohérence par rapport à cette 1ère ligne. NOUVEAUTÉ: CSV2OD peut lire aussi un fichier issu de ATTOUT pour attribuer une table de données avec les attributs de blocs (attention à la longueur du nom de fichier généré par ATTOUT, renommer si besoin) Si le choix de l'option de lecture n'est pas ".csv" mais ".txt" (fichier résultant de ATTOUT), il vous sera proposé de forcé les valeurs en mode caractère. Cela permet que si des valeurs d'attributs ne sont pas constantes de les transmettre correctement à la table. Exemple un attribut ALTI est de 65.23 dans une insertion, mais dans une autre insertion vous avez "Fil d'eau 87.32". Si vous ête sur de la constance des attributs et que vous ne forcez pas la lecture, vous pouvez obtenir des champs de type de valeur déterminé automatiquement. Bien qu'il ne répondra pas surement à toutes les exigences, je ne pense pas aller au-delà dans le développement. Car plus il y a d'exigence, plus ça complexifie l'écriture du code. Les fichiers ont été mis à jour dans le post initial.
  7. J'ai essayé d'être le plus large possible aux niveaux du choix des entités, toutes ne supportent (vla-offset) (vl-load-com) (defun c:dbl_offset ( / val_offset del_ent js n vla_obj) (initget 6) (setq val_offset (getdist (strcat "\nLargeur totale du décalage <" (rtos (getvar "USERR1")) ">:"))) (if (not val_offset) (setq val_offset (getvar "USERR1")) (setvar "USERR1" val_offset)) (princ "\nChoix des objets à décaler de part et d'autre") (setq js (ssget (list (cons -4 "<AND") (cons 0 "*POLYLINE,LINE,ARC,CIRCLE,ELLIPSE,XLINE") (cons -4 "<NOT") (cons -4 "&") (cons 70 126) (cons -4 "NOT>") (cons -4 "AND>") ) ) ) (initget "Oui Non _Yes No") (setq del_ent (if (eq (getkword "\nSupprimer l'objet source [Oui/Non] <Non>: ") "Yes") T nil)) (cond (js (repeat (setq n (sslength js)) (setq vla_obj (vlax-ename->vla-object (ssname js (setq n (1- n))))) (vla-Offset vla_obj (* val_offset 0.5)) (vla-put-Layer (vlax-ename->vla-object (entlast)) (getvar "CLAYER")) (vla-Offset vla_obj (- (* val_offset 0.5))) (vla-put-Layer (vlax-ename->vla-object (entlast)) (getvar "CLAYER")) (if del_ent (vla-delete vla_obj)) ) ) ) (princ) )
  8. Ou pour rester élégant, vu que les fonction (vla-...) sont déjà utilisées et ainsi éviter un (command) (vl-load-com) (defun c:dbl_offset ( / val_offset del_ent js ent vla_obj) (initget 6) (setq val_offset (getdist (strcat "\nLargeur totale du décalage <" (rtos (getvar "USERR1")) ">:"))) (if (not val_offset) (setq val_offset (getvar "USERR1")) (setvar "USERR1" val_offset)) (initget "Oui Non _Yes No") (setq del_ent (if (eq (getkword "\nSupprimer l'entité sélectionnée [Oui/Non] <Non>: ") "Yes") T nil)) (while (/= ent "Exit") (setq js (ssadd)) (initget "Sortir _Exit") (while (or (null (setq ent (entsel "\nChoix de l'objet à décaler de part et d'autre/[sortir]: "))) (/= ent "Exit")) (cond ((not (null ent)) (setq ent (car ent)) (setq vla_obj (vlax-ename->vla-object ent)) (vla-Offset vla_obj (/ val_offset 2.0)) (setq js (ssadd (entlast) js)) (vla-put-Layer (vlax-ename->vla-object (entlast)) (getvar "CLAYER")) (vla-Offset vla_obj (- (/ val_offset 2.0))) (setq js (ssadd (entlast) js)) (vla-put-Layer (vlax-ename->vla-object (entlast)) (getvar "CLAYER")) (if del_ent (entdel ent)) ) ) (initget "Sortir _Exit") ) (if js (sssetfirst nil js)) ) (princ) )
  9. Je ne te cache pas que pour établir toutes les communes je l'ai fais sur ne machine conséquente (intel Core i7 3.60Ghz avec 16.0 Go, NVDIA Quadro P2000, pas de SSD, donc sans plus!...) un bon script me l'a constitué en une bonne demi-journée/journée sans intervention (conversion/importation ceci fichier par fichier) Mais une fois ceci fait, exploiter la base (si on se contente de quelques communes au + environ 5) ça fonctionne très bien avec une machine peu puissante. Après plus on en requête plus on mettra la machine à genoux, c'est sûr !.... Tout ça pour dire que si on est un peu "bourrin" (se "trimbaler" un SEUL fichier de 700Mo) il faut une excellente machine mais si on s'organise bien une machine convenable suffit et qu'au final on s'y retrouve car on gagne en fluidité et réactivité lors de l'exploitation des données. Donc certes c'est un exploit, mais j'adhère pas à cette méthode, cela revient un peu au même que ceux qui exploitent des dessins complets sans utiliser aucun Xref
  10. Alors certes l'ensemble de mes fichiers font aussi environ 600Mo, mais à la différence de toi je ne met pas l'ensemble dans un seul fichier, je procède différemment: Je fais un DWG par commune, tous placés dans un même dossier. Et là j'ai un gabarit qui se présente comme suit: http://pix.toile-libre.org/upload/thumb/1593772744.png Dans ce fichier ouvert, chaque utilisateur en réseau peut utiliser la routine suivante pour extraire (requêter) la commune qui l’intéresse. ;; DirBox (Patrick_35) ;; retourne le chemin complet du dossier spécifié ;; ;; Arguments ;; Message : le message à afficher dans la boite de dialogue ;; Chemin : le chemin du répertoire source ;; Drapeau : la somme des codes binaires suivants ;; ;; Valeur du Drapeau ;; 0 = Valeur par défaut ;; 1 = BIF_RETURNONLYFSDIRS = Seulement les fichiers système ;; 2 = BIF_DONTGOBELOWDOMAIN = Interdit d'explorer en dehors du domaine ;; 4 = BIF_STATUSTEXT = Inclure un secteur de statut. La fonction de rappel de service peut placer le texte de statut en envoyant des messages à la zone de dialogue. Ce drapeau n'est pas soutenu quand BIF_NEWDIALOGSTYLE est indiqué. ;; 8 = BIF_RETURNFSANCESTORS = Seulement les sous Dossiers ;; 16 = BIF_EDITBOX = Inclure une commande d'édition dans la zone de dialogue ;; 32 = BIF_VALIDATE = Verifie si l'utilisateur dactylographie un nom inadmissible dans la boîte d'édition ;; 512 = BIF_NONEWFOLDERBUTTON = Ne pas inclure le bouton Créer un nouveau dossier ;; 4096 = BIF_BROWSEFORCOMPUTER = Autorise à parcourir le réseau ;; 8192 = BIF_BROWSEFORPRINTER = Seulement le choix d'une imprimante ;; 16384 = BIF_BROWSEINCLUDEFILES = Montre tout ;; = BIF_BROWSEINCLUDEURLS = Montrer les raccourcis, Les drapeaux BIF_USENEWUI et de BIF_BROWSEINCLUDEFILES doivent également être placés ;; = BIF_NEWDIALOGSTYLE = Employer la nouvelle interface utilisateur ;; = BIF_NOTRANSLATETARGETS = Quand l'article choisi est un raccourci, renvoyer le PIDL du raccourci lui-même plutôt que sa cible. ;; = BIF_SHAREABLE = Peut montrer les ressources en commun sur les systèmes à distance. Le drapeau de BIF_NEWDIALOGSTYLE doit également être placé. ;; = BIF_UAHINT = Une fois combiné avec BIF_NEWDIALOGSTYLE, ajoute un conseil d'utilisation à la zone de dialogue au lieu de la boîte d'édition. BIF_EDITBOX dépasse ce drapeau. ;; = BIF_USENEWUI = Employer la nouvelle interface utilisateur, y compris une boîte d'édition (defun DirBox (message chemin drapeau / rep sh) (setq sh (vlax-create-object "Shell.Application")) (if (setq rep (vlax-invoke sh 'browseforfolder 0 Message Drapeau Chemin) ) (setq rep (vlax-get-property (vlax-get-property rep 'self) 'path)) (setq rep nil) ) (vlax-release-object sh) rep ) (defun c:BD_CADASTRE ( / ent_text dxf_ent key obj_sel ename com_name com_insee) ; (setvar "LIMCHECK" 0) ; (setvar "LIMMIN" '(760000.0 6345000.0)) ; (setvar "LIMMAX" '(855000.0 6485000.0)) (setvar "AUNITS" 0) (setvar "ANGDIR" 0) (setvar "ANGBASE" 0.0) (setvar "LUNITS" 2) (setvar "MEASUREMENT" 1) (setvar "MEASUREINIT" 1) (if (not (member "CADASTRE" (mapcar 'car (ade_aliasgetlist)))) (ade_aliasadd "CADASTRE" (dirbox "Designez le chemin pour l'alias CADASTRE" "" (+ 4096 512))) ) (setq ent_text (entmakex (list (cons 0 "MTEXT") (cons 100 "AcDbEntity") (cons 100 "AcDbMText") (cons 1 "") (cons 10 (trans (getvar "VIEWCTR") 0 1)) (cons 40 (/ (getvar "VIEWSIZE") 75.0)); (cons 50 (- 0 (getvar "VIEWTWIST"))) (cons 62 250) (cons 71 7) (cons 72 5) (cons 90 1) (cons 63 255) (cons 45 1.5) ) ) dxf_ent (entget ent_text) ) (while (and (setq key (grread T 4 0)) (/= (car key) 3)) (cond ((eq (car key) 5) (setq obj_sel (nentselp (cadr key))) (cond (obj_sel (if (eq (type (car (last obj_sel))) 'ENAME) (setq ename (car (last obj_sel))) (setq ename (car obj_sel)) ) (cond ((eq (cdr (assoc 0 (entget ename))) "MPOLYGON") (setq com_name (ade_odgetfield ename "COMMUNES" "COMMUNE" 0) com_insee (strcat "0" (itoa (ade_odgetfield ename "COMMUNES" "CODE_INSEE" 0))) dxf_ent (subst (cons 10 (trans (cadr key) 1 0)) (assoc 10 dxf_ent) dxf_ent) dxf_ent (subst (cons 1 (strcat "{\\fArial;" com_name "}" )) (assoc 1 dxf_ent) dxf_ent) dxf_ent (subst (cons 40 (/ (getvar "VIEWSIZE") 75.0)) (assoc 40 dxf_ent) dxf_ent) ) (entmod dxf_ent) ) ) ) ) ) ) ) (cond ((eq (car key) 3) (entdel ent_text) (setq dwg_id (ade_dwggetid (strcat "CADASTRE:\\com-" com_insee ".dwg"))) (ade_dwgactivate dwg_id) (ade_qryclear) (ade_qrysetaltprop T) (ade_qrysettype "draw") (ade_qrydefine '("" "" "" "Property" ("objtype" "=" "MPOLYGON")"")) (ade_altpdefine "TextObject" '(("TextValue" . ":numero@cadastre-07-parcelles")("Justify" . "_CENTER")("InsPt" . ".LABELPT")("Style" . "Standard")("Height" . "2.5")("Rotation" . "0.0")("Layer" . "PARCELLES")("Color" . "142"))) (ade_altpdefine "TextObject" '(("TextValue" . ":nom@cadastre-07-lieux_dits")("Justify" . "_CENTER")("InsPt" . ".LABELPT")("Style" . "Standard")("Height" . "7.5")("Rotation" . "0.0")("Layer" . "LIEUX-DITS")("Color" . "106"))) (ade_altpdefine "TextObject" '(("TextValue" . ":code@cadastre-07-sections")("Justify" . "_CENTER")("InsPt" . ".LABELPT")("Style" . "Standard")("Height" . "100")("Rotation" . "0.0")("Layer" . "SECTIONS")("Color" . "12"))) (ade_qryexecute) (command "_.POLYDISPLAY" "_Edge" "_.regenall") ) ) (prin1) ) Dès lors l'utilisateur n'as plus qu'a "balader" sa souris pour voir le nom de la commune, et dès que c'est celle qu'il veut, il clique! http://pix.toile-libre.org/upload/thumb/1593773385.png et la requête est effectuée... http://pix.toile-libre.org/upload/img/1593774463.png TOUT CECI SANS AVOIR UNE GROSSE MACHINE, par exemple avec un i5 avec 8 Go de Ram, ça passe très bien!
  11. bonuscad

    type de ligne talus

    Les possibilités qui s'offrent à toi. Pour une version LT, donc avec un type de ligne (il faut cependant une version complète pour générer automatiquement les fichiers nécessaires avec ce qui suit: tu copies-colles le code directement en ligne de commande.) Ton dessin aura alors les types de ligne disponible, si tu le transmet (e-transmit) à quelqu'un qui a une version LT, il pourra continuer à exploiter ces type de ligne et continuer à dessiner des talus. Pour des polylignes penser à activer la génération du type de ligne pour avoir un rendu correct et jouer avec l'échelle tu type de ligne. Ce mode Type de ligne est un pis-allez, le rendu n'est pas parfait mais peut suffire et donne un avantage pour des versions LT. ((lambda ( / f_shp1 f_shp2 f_lin doc) (if (not (findfile "TAL-DRO.shp")) (progn (setq f_shp1 (open (strcat (getvar "ROAMABLEROOTPREFIX") "support\\TAL-DRO.shp") "w")) (write-line "*256,25,TAL-DRO" f_shp1) (write-line "2,3,8,038,1,03C,2,034,020,1,08C,2,084,020,1,03C,2,034,020,1,03C,2,034,038,0" f_shp1) (close f_shp1) ) ) (if (not (findfile "TAL-GAU.shp")) (progn (setq f_shp2 (open (strcat (getvar "ROAMABLEROOTPREFIX") "support\\TAL-GAU.shp") "w")) (write-line "*257,25,TAL-GAU" f_shp2) (write-line "2,3,8,038,1,034,2,03C,020,1,084,2,08C,020,1,034,2,03C,020,1,034,2,03C,038,0" f_shp2) (close f_shp2) ) ) (command "_.compile" (strcat (getvar "ROAMABLEROOTPREFIX") "support\\TAL-DRO.shp")) (command "_.compile" (strcat (getvar "ROAMABLEROOTPREFIX") "support\\TAL-GAU.shp")) (if (not (tblsearch "STYLE" "")) (progn (entmakex '( (0 . "STYLE") (100 . "AcDbSymbolTableRecord") (100 . "AcDbTextStyleTableRecord") (2 . "") (70 . 1) (40 . 0.0) (41 . 1.0) (50 . 0.0) (71 . 0) (42 . 0.2) (3 . "TAL-DRO.shx") (4 . "") ) ) (entmakex '( (0 . "STYLE") (100 . "AcDbSymbolTableRecord") (100 . "AcDbTextStyleTableRecord") (2 . "") (70 . 1) (40 . 0.0) (41 . 1.0) (50 . 0.0) (71 . 0) (42 . 0.2) (3 . "TAL-GAU.shx") (4 . "") ) ) ) ) (entmake (list '(0 . "LTYPE") '(100 . "AcDbSymbolTableRecord") '(100 . "AcDbLinetypeTableRecord") '(2 . "TAL-DRO") '(70 . 0) '(3 . " Talus orienté à droite") '(72 . 65) '(73 . 3) '(40 . 1.0) '(49 . 0.375) '(74 . 4) '(75 . 256) (CONS 340 (TBLOBJNAME "STYLE" "")) '(46 . 1.0) '(50 . 0.0) '(44 . 0.0) '(45 . 0.0) '(49 . 0.625) '(74 . 0) '(49 . 0.0) '(74 . 0) ) ) (entmake (list '(0 . "LTYPE") '(100 . "AcDbSymbolTableRecord") '(100 . "AcDbLinetypeTableRecord") '(2 . "TAL-GAU") '(70 . 0) '(3 . " Talus orienté à gauche") '(72 . 65) '(73 . 3) '(40 . 1.0) '(49 . 0.375) '(74 . 4) '(75 . 257) (CONS 340 (TBLOBJNAME "STYLE" "")) '(46 . 1.0) '(50 . 0.0) '(44 . 0.0) '(45 . 0.0) '(49 . 0.625) '(74 . 0) '(49 . 0.0) '(74 . 0) ) ) (if (not (findfile "TAL-DRO.lin")) (progn (setq f_lin (open (strcat (getvar "ROAMABLEROOTPREFIX") "support\\TAL-DRO.lin") "w")) (write-line "*TAL-DRO, Talus orienté à droite" f_lin) (write-line "A,.375,[TAL-DRO,TAL-DRO.shx,S=1],.625,0" f_lin) (close f_lin) ) ) (if (not (findfile "TAL-GAU.lin")) (progn (setq f_lin (open (strcat (getvar "ROAMABLEROOTPREFIX") "support\\TAL-GAU.lin") "w")) (write-line "*TAL-GAU, Talus orienté à gauche" f_lin) (write-line "A,.375,[TAL-GAU,TAL-GAU.shx,S=1],.625,0" f_lin) (close f_lin) ) ) (setq doc (vla-get-activedocument (vlax-get-acad-object))) (if (and (not (vlax-for item (vla-get-linetypes doc) (if (= (strcase (vla-get-name item)) (strcase "TAL-DRO")) T) ) ) (vl-catch-all-error-p (vl-catch-all-apply 'vla-load (list (vla-get-Linetypes doc) "TAl-DRO" "TAL-DRO.lin") ) ) ) nil T ) (if (and (not (vlax-for item (vla-get-linetypes doc) (if (= (strcase (vla-get-name item)) (strcase "TAL-GAU")) T) ) ) (vl-catch-all-error-p (vl-catch-all-apply 'vla-load (list (vla-get-Linetypes doc) "TAl-GAU" "TAL-GAU.lin") ) ) ) nil T ) (princ "\nCréation de Type de Ligne \"TAL-DRO et TAL-GAU\" effectués!") (prin1) )) La seconde est un lisp déjà donner mainte fois, je le met en pièce jointes, Plus paramétrable, fonctionnant en 3D ou 2D indifféremement. talus3D.lsp
  12. Salut, A mon avis, il n'y a pas moyen de résoudre cd problème d'évidement en début et fin de ligne en utilisant une forme (shape), le type de ligne n'est qu'une répétition d'un motif et autocad ajuste celle-ci pour que les motif ne dépasse pas les points d'extrémitées Autrement tu peut essayer de te tourner vers le multi-lignes. Voici par exemple un lisp un peu ancien qui converti des objets curviligne en multi-ligne. (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:polyarc2ml ( / jspl nbr ent dxf_ent typent name_layer closed lst l_bulg e_next dxf_next oldlayer oldosm key_mod scale_ml) (princ "\nChoix des polylignes à transformer en multilignes: ") (setq jspl (ssget '((0 . "*POLYLINE,LINE,CIRCLE,ARC") (-4 . "<NOT") (-4 . "&") (70 . 124) (-4 . "NOT>"))) nbr 0 ) (cond (jspl (initget "Dessus Nulle dEssous _Top Zero Bottom") (setq key_mod (getkword (strcat "\nEntrez le type de justification [Dessus/Nulle/dEssous] <" (cond ((eq (getvar "cmljust") 0) "Dessus" ) ((eq (getvar "cmljust") 1) "Nulle" ) ((eq (getvar "cmljust") 2) "dEssous" ) ) ">: " ) ) ) (if key_mod (cond ((eq key_mod "Top") (setvar "cmljust" 0)) ((eq key_mod "Zero") (setvar "cmljust" 1)) ((eq key_mod "Bottom") (setvar "cmljust" 2)) ) ) (setq scale_ml (getdist (strcat "\nEntrez l'échelle de la multiligne <" (rtos (getvar "cmlscale")) ">: "))) (if scale_ml (setvar "cmlscale" scale_ml)) (setq oldlayer (getvar "clayer") oldosm (getvar "osmode")) (setvar "osmode" 0) (setvar "cmdecho" 0) (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)) ) (cond ((eq typent "LWPOLYLINE") (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) ) ) ((eq typent "POLYLINE") (setq closed (boole 1 (cdr (assoc 70 dxf_ent)) 1) e_next (entnext ent) ) (while (= "VERTEX" (cdr (assoc 0 (setq dxf_next (entget e_next))))) (if (zerop (boole 1 223 (cdr (assoc 70 dxf_next)))) (setq lst (cons (trans (cdr (assoc 10 dxf_next)) ent 1) lst) l_bulg (cons (cdr (assoc 42 dxf_next)) l_bulg) ) ) (setq e_next (entnext e_next)) ) (setq lst (reverse lst) l_bulg (reverse l_bulg) lst (def_bulg_pl lst l_bulg closed) ) ) ((eq typent "LINE") (setq lst (list (trans (cdr (assoc 10 dxf_ent)) 0 1) (trans (cdr (assoc 11 dxf_ent)) 0 1)) closed 0 ) ) ((eq typent "CIRCLE") (setq lst (bulge_pts (trans (cdr (assoc 10 dxf_ent)) ent 1) (polar (trans (cdr (assoc 10 dxf_ent)) ent 1) 0.0 (cdr (assoc 40 dxf_ent))) (polar (trans (cdr (assoc 10 dxf_ent)) ent 1) (- (* 2.0 pi) (/ (* pi 2.0) 36.0)) (cdr (assoc 40 dxf_ent))) (cdr (assoc 40 dxf_ent)) 1 ) lst (append lst (list (car lst))) closed 1 ) ) ((eq typent "ARC") (setq lst (bulge_pts (trans (cdr (assoc 10 dxf_ent)) ent 1) (polar (trans (cdr (assoc 10 dxf_ent)) ent 1) (cdr (assoc 50 dxf_ent)) (cdr (assoc 40 dxf_ent))) (polar (trans (cdr (assoc 10 dxf_ent)) ent 1) (cdr (assoc 51 dxf_ent)) (cdr (assoc 40 dxf_ent))) (cdr (assoc 40 dxf_ent)) 1 ) closed 0 ) ) ) (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) )
  13. Tu n'as pas tort, mais disons que j'ai fais un raccourci. Pour exprimé plus précisément mon discours, je dirais qu'il s'agit du noyau du logiciel qui sert a tout les dérivée des produits AutoDesk et pas du logiciel à proprement parlé. C'est un peu comme Linux où tu as un noyau principal et après toute une déclinaison de distributions Debian Ubuntu Mint etc...Pour Autocad, je pense que tu as aussi un noyau principal puis toute une déclinaison suivant les produits verticaux développer à partir de ce noyau principal. C'est le principe d'un peu tout les logiciels sophistiqués, même windows , tu as la version pro, serveur, famille ...
  14. Bonjour, En copiant directement ce qui suit en ligne de commande, tu auras un type de ligne nommé "Haie" qui sera disponible dans ton dessin. Ce code s'occupe de créer la forme SHP et de la compiler en SHX ainsi que d'écrire le fichier LIN utilisant cette forme. Tu auras désormais les fichiers nécessaires et plus besoin d'utiliser le code proposé. ((lambda ( / f_shp f_lin doc) (if (not (findfile "haie.shp")) (progn (setq f_shp (open (strcat (getvar "ROAMABLEROOTPREFIX") "support\\haie.shp") "w")) (write-line "*128,66,HAIE" f_shp) (write-line "1,12,(2,1,-54),2,018," f_shp) (write-line "1,12,(4,1,-91),2,018," f_shp) (write-line "1,12,(2,0,-126),2,01C," f_shp) (write-line "1,12,(3,-1,-127),2,025," f_shp) (write-line "1,12,(2,-2,-79),2,02C," f_shp) (write-line "1,12,(-3,1,-52),2,020," f_shp) (write-line "1,12,(-5,1,-76),2,02F," f_shp) (write-line "1,12,(-3,-1,-126),2,010," f_shp) (write-line "1,12,(-4,0,-78)," f_shp) (write-line "2,8,(10,2),0" f_shp) (close f_shp) ) ) (command "_.compile" (strcat (getvar "ROAMABLEROOTPREFIX") "support\\haie.shp")) (if (not (tblsearch "STYLE" "")) (entmakex '( (0 . "STYLE") (100 . "AcDbSymbolTableRecord") (100 . "AcDbTextStyleTableRecord") (2 . "") (70 . 1) (40 . 0.0) (41 . 1.0) (50 . 0.0) (71 . 0) (42 . 2.5) (3 . "haie.shx") (4 . "") ) ) ) (entmake (list '(0 . "LTYPE") '(100 . "AcDbSymbolTableRecord") '(100 . "AcDbLinetypeTableRecord") '(2 . "HAIE") '(70 . 0) '(3 . "Haies-arbuste") '(72 . 65) '(73 . 2) '(40 . 1.0) '(49 . 0.0) '(74 . 0) '(49 . -1.0) '(74 . 4) '(75 . 128) (CONS 340 (TBLOBJNAME "STYLE" "")) '(46 . 0.1) '(50 . 0.0) '(44 . -1.0) '(45 . 0.0) ) ) (if (not (findfile "haie.lin")) (progn (setq f_lin (open (strcat (getvar "ROAMABLEROOTPREFIX") "support\\haie.lin") "w")) (write-line "*HAIE, Haies-arbuste" f_lin) (write-line "A,0,-1,[HAIE,haie.shx,x=-1,s=.1]" f_lin) (close f_lin) ) ) (setq doc (vla-get-activedocument (vlax-get-acad-object))) (if (and (not (vlax-for item (vla-get-linetypes doc) (if (= (strcase (vla-get-name item)) (strcase "haie")) T) ) ) (vl-catch-all-error-p (vl-catch-all-apply 'vla-load (list (vla-get-Linetypes doc) "haie" "haie.lin") ) ) ) nil T ) (princ "\nCréation de Type de Ligne \"haie\" effectué!") (prin1) ))
  15. Bonjour, Je ne vais pas répondre directement à ta question... Par le passé il existait une extension LT-Extender diffusée mondialement qui permettait d'accéder à fonctions (Arx, lisp... ). Donc rendait une LT presque aussi fonctionnelle qu'une version pleine pour un moindre coût. Cette société a été en procès avec AutoDesk car cette dernière a estimé qu'elle violait le copyright et a du cessé son activité. Il faut savoir qu'une LT n'est grosso modo qu'une version pleine qui est bridée: Il est plus facile pour AutoDesk de concevoir un seul logiciel, puis de le brider pour en faire des versions légère ou étudiante. Donc cela doit être faisable, comment je ne le sais pas, mais si oui; tu rentre en violation sur les droits de modifier le logiciel. Après si c'est pour un usage purement personnel et non pas pour diffuser, peut être peut tu te le permettre, à voir... PS: Je crois me souvenir que LT-Extender exploitait une faille du logiciel, AutoDesk a certainement du corriger cela.
  16. Bonjour, Pour ta représentation en partant pour principe de la représentation au nord dans le sens des Y (sens standard), le fichier AEP(A).lin contiendrait: *AEP(A),AEP(A) ----AEP(A)----AEP(A)----AEP(A)----AEP(A) A,12.7,-10.16,["AEP(A)",ARIAL,s=2.54,r=0,x=-5.08,y=-1.27],-10.16 et pour inverser la tête en bas, il devrait contenir: *AEP(A),AEP(A) ----AEP(A)----AEP(A)----AEP(A)----AEP(A) A,12.7,-10.16,["AEP(A)",ARIAL,s=2.54,r=180,x=5.08,y=1.27],-10.16 Note simplement le paramètre R (rotation) qui est de 0 et de 180 pour l'inversé et le positionnement en Y et Y du texte qui a changé de signe. NB: Il faut obligatoirement que le style de texte de nom ARIAL soit d'abords défini dans le dessin pour le chargement fonctionne.
  17. Le souci doit être dans la configuration du lisp car pour moi ça fonctionne très bien avec ton bloc. Voici la définition que j'ai faite pour ton bloc: (setq ;;----------------------------------------------------------------------;; ;; Settings ;; ;;----------------------------------------------------------------------;; autolabel:blockname "Num-cana" ;; Name of block to be updated (not case-sensitive / may use wildcards) autolabel:blocktag "1" ;; Attribute tag to be updated (not case-sensitive / may use wildcards) autolabel:prefix "" ;; Numbering prefix (use "" for none) autolabel:suffix "" ;; Numbering suffix (use "" for none) autolabel:start 1 ;; Starting number autolabel:length 0 ;; Fixed length numbering (set to zero if not required) autolabel:startup t ;; Enable on drawing startup (t=enable / nil=disable) autolabel:objtype 1 ;; Bit-coded integer > 0 (1=attributed blocks; 2=multileader blocks) ;;----------------------------------------------------------------------;; )
  18. Bonjour, Poste ta personnalisation que tu as faite sue cette partie (setq ;;----------------------------------------------------------------------;; ;; Settings ;; ;;----------------------------------------------------------------------;; autolabel:blockname "myblock" ;; Name of block to be updated (not case-sensitive / may use wildcards) autolabel:blocktag "mytag" ;; Attribute tag to be updated (not case-sensitive / may use wildcards) autolabel:prefix "" ;; Numbering prefix (use "" for none) autolabel:suffix "" ;; Numbering suffix (use "" for none) autolabel:start 1 ;; Starting number autolabel:length 2 ;; Fixed length numbering (set to zero if not required) autolabel:startup t ;; Enable on drawing startup (t=enable / nil=disable) autolabel:objtype 3 ;; Bit-coded integer > 0 (1=attributed blocks; 2=multileader blocks) ;;----------------------------------------------------------------------;; ) Et éventuellement ton bloc... pour qu'on puisse se rendre compte car on est pas devin.
  19. A tout hasard... Si tes fichier de travail / ou bibliothèque de blocs sont en réseau, voir peut être du côté de l'antivirus, exclure autocad de la surveillance.En effet si celui est surveillé, des effets de latence (surtout avec le réseau) peuvent être observé. Autrement une variable? ROLLOVERTIPS LEGACYCTRLPICK ou encore d'autres qui me viennent pas l'esprit.
  20. Bonjour, L'option caché F de la commande CALQUE existe bien, elle permet donc de définir un filtre d'affichage dans le gestionnaire de calques. Voici par exemple une ligne en lisp, ou ligne de commande qui te permet de définir un filtre s'il n'existe pas. Ici le nom du filtre et TEXTE et filtrera le nom des calques commençant par TEXTE (ces valeurs chaînes sont à adapter à ton besoin) (command "_.-LAYER" "_Filter" "_New" "_Group" "" "TEXTE*" "TEXTE" "_Set" "TEXTE" "_eXit" "") Si tes chaînes de texte sont correctes le gestionnaire de calques devrait filtrer ton affichage directement. Si plusieurs Filtres sont définis, tu peux aussi utiliser la commande _.+LAYER (+CALQUE en français) pour changer de filtre. Nota bene: Il faut taper le nom du filtre en entier (les mots clés ne fonctionne pas) A mon avis ces options en ligne de commande n'ont guère d'intérêt (sauf dans un code en lisp) car la mise en place dans le gestionnaire de calques est plus intuitive.
  21. bonuscad

    CONFIG. TOUR & PORTABLE

    Rien à dire sur les propositions d'Olivier. Mais il y a un inconvénient d'achat de matériel neuf sur les sites grand public, c'est toujours Windows 10 Famille qui est proposé. Tu dis que ta fille fille est ergothérapeute, pour moi il me semble qu'une version Windows 10 Professionnelle serait plus appropriée. La différence à première vue semble négligeable, mais des outils sont indisponibles sous une version famille qui peuvent être indispensable en utilisation professionnelle. Ce n'est pas un point essentiel, mais il faut y attacher une importance suivant le contexte d'interconnexion avec des organismes pour son travail. (La version pro est plus porté sur la gestion de réseau profesionnel)
  22. bonuscad

    Rotation texte de cotation

    Bonjour, Pas sur d'avoir bien compris le besoin... mais je te propose ceci (Il faut bien sélectionner le texte de la cotation, pas la cotation en elle même: ligne de cote ou extension) (defun C:modifangtextcot ( / sel ent dxf_ent ang) (setvar "USERR1" 0.0) (while (setq sel (nentsel "\nChoix d'un texte de cotation: ")) (cond (sel (setq ent (car sel) dxf_ent (entget ent)) (cond ((eq (cdr (assoc 0 dxf_ent)) "MTEXT") (setq ang (getangle (strcat "\nNouvel angle du texte? <" (angtos (getvar "USERR1")) ">: "))) (if (not ang) (setq ang (getvar "USERR1"))) (setvar "USERR1" ang) (entmod (subst (cons 50 ang) (assoc 50 dxf_ent) dxf_ent)) (entupd (car (last sel))) ) (T (princ "\nNe peux changer l'angle de l'objet selectionné!")) ) ) ) ) (prin1) )
  23. bonuscad

    CONFIG. TOUR & PORTABLE

    Disons une mini tour... Un avis d'expert datant de deux ans. Le reconditionné en matériel pro a rarement des modèles très récents (par exemple celui n'est plus trouvable en neuf chez dell), mais suivant les besoins c'est un bon compromis surtout au niveau prix. Je t'ai parlé du 3020M car ça me semblait correspondre à tes critères, et que j'ai pu le tester en situation réelle et qu'il m'a convaincu, mais après plein d'autres choix sont possible et c'est vaste, c'est bien ça le problème. On t'a proposé du Acer, c'est pas une marque que j'affectionne (je les trouve pas fiable dans le temps, les composant sont de moins bonne qualité) mais les goûts et les couleurs... Mon avis n'est là que pour t'orienter mais c'est bien toi qui fera le choix final. Bon WE
  24. bonuscad

    CONFIG. TOUR & PORTABLE

    En période de confinement, j'ai fais aussi un cadeau d'anniversaire pour ma fille, J'ai donc trouvé un Dell optiplex 3020M sur backmarket malheureusement il n'y a plus ce modèle.On peut en trouver un exemplaire sur monpcpascher mais ce n'est pas exactement le même (le mien est avec un i5 avec 8Go de ram) Pour l'avoir testé c'est une petite bombe malgré son aspect rikiki, ma fille est enchantée pour son usage (et en plus aux anges pour l'encombrement très limité) , seul point noir pas de wifi (mais une clé peu faire l'affaire)Pas de lecteur CD/DVD, mais ça ce n'est pas vraiment gênant, enfin pour moi il me semble. Pour une fois je pense avoir réussi mon achat pour faire vraiment plaisir, et le reconditionné sur le Dell est vraiment un bon choix sur la durée. (j'ai acheté dans ma vie 2 Dell neufs et 3 en reconditionné et jamais eu aucun problème, sauf batterie pour les portables, fonctionnelles mais perte de charge rapide)
  25. Ha oui! Pas pensé, surtout que ce n'est pas compliqué de rajouter cette fonctionnalité. Du coup j'ai rajouté aussi un oubli sur l'échelle du type de ligne (code DXF 48) qui peut être forcée par entité. Voici la version avec en plus les XDATA et l'ajout du code dxf_48. Cut_PolyOD@ins.lsp
×
×
  • 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é