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. Comme dit (gile) SNAPANG peut être utile en construction ORTHO Pour ma part j'ai boutons prédéfinis en transparence avec par exemple en contenu: 'SNAPANG (angtos (angle (setq P (osnap (cadr (nentsel "Systeme ORTHOparallele a: ")) "_NEAR")) (if (null (osnap P "_MIDPOINT"))(osnap P "_ENDPOINT") (osnap P "_MIDPOINT"))) (getvar "AUNITS") 8)^M Avec ceci je n'ai qu'a cliquer sur un segment (ligne ou polyligne) pour m'aligner dessus.
  2. Bonjour, Pour répondre à une demande sur un forum j'ai été amené à créer ce code. La demande portait sur le raccordement aux extrémités seulement de plusieurs polylignes (composées essentiellement de segments droits) se touchant à leurs extrémités mais étant sur des calques différents, par un rayon identique. Ce raccord d'arc devait être composé en deux parties pour rejoindre le calque des polylignes concernées. Bien que certainement inutile pour beaucoup (mais sait on jamais!), comme j'ai trouvé ce challenge intéressant, j'ai essayé d'y répondre. L’intéressé a été satisfait... Voici le code (des bugs peuvent subsister car moyennement testé) (defun z_dir (p1 p2 / ) (trans '(0.0 1.0 0.0) (mapcar '(lambda (k) (/ k (sqrt (apply '+ (mapcar '(lambda (x) (* x x)) (mapcar '- p2 p1) ) ) ) ) ) (mapcar '- p2 p1) ) 0 ) ) (defun ang_x (px p1 p2 / l_pt l_d p ang) (setq l_pt (mapcar '(lambda (x) (list (car x) (cadr x) (caddr x))) (list px p1 p2)) l_d (mapcar 'distance l_pt (append (cdr l_pt) (list (car l_pt)))) p (/ (apply '+ l_d) 2.0) ang (* (atan (sqrt (/ (* (- p (car l_d)) (- p (caddr l_d))) (* p (- p (cadr l_d)))))) 2.0) ) ) (defun k_th (p1 p2 c / k) (setq k (/ c (distance p1 p2))) (mapcar '+ (mapcar '* (mapcar '- p2 p1) (list k k k)) p1) ) (defun c:Spec_Fillet ( / js n ent lo_pt l_pt pt l3 js1 js2 alpha l_tg p_o a1 a2 dxf_210) (cond ((not (zerop (getvar "FILLETRAD"))) (setq js (ssget '((0 . "LWPOLYLINE") (67 . 0)))) (cond (js (repeat (setq n (sslength js)) (setq ent (ssname js (setq n (1- n))) lo_pt (mapcar 'cdr (vl-remove-if '(lambda (x) (/= (car x) 10)) (entget ent))) lo_pt (list (car lo_pt) (last lo_pt)) lo_pt (mapcar '(lambda (z) (trans z 0 1)) lo_pt) ) (if (null l_pt) (mapcar '(lambda (x) (setq l_pt (cons x l_pt))) lo_pt) (foreach el lo_pt (if (null (vl-remove-if-not '(lambda (x) (equal el x 1E-08)) l_pt)) (setq l_pt (cons el l_pt)) ) ) ) ) ) ) (cond (l_pt (while l_pt (setq pt (car l_pt) js (ssget "_C" (mapcar '- pt '(0.05 0.05 0.0)) (mapcar '+ pt '(0.05 0.05 0.0)) '((0 . "LWPOLYLINE") (67 . 0))) ) (cond ((and js (eq (sslength js) 2)) (setq l3 (list pt)) (repeat (setq n (sslength js)) (setq ent (ssname js (setq n (1- n))) lo_pt (mapcar '(lambda (z) (trans z 0 1)) (mapcar 'cdr (vl-remove-if '(lambda (x) (/= (car x) 10)) (entget ent)))) ) (cond ((and (> (length lo_pt) 2) (equal pt (car lo_pt) 1E-08)) (setq lo_pt (list (car lo_pt) (cadr lo_pt))) ) ((and (> (length lo_pt) 2) (equal pt (last lo_pt) 1E-08)) (setq lo_pt (list (last lo_pt) (nth (- (length lo_pt) 2) lo_pt))) ) ) (setq lo_pt (vl-remove-if-not '(lambda (x) (not (equal pt x 1E-08))) lo_pt) l3 (append l3 lo_pt) ) (set (read (strcat "js" (itoa (1+ n)))) (entget ent)) ) (setq alpha (ang_x (car l3) (cadr l3) (caddr l3)) ) (cond ((not (equal alpha pi 1E-06)) (setq l_tg (* (getvar "FILLETRAD") (/ 1.0 (/ (sin (* alpha 0.5)) (cos (* alpha 0.5))))) p_o (k_th (car l3) (mapcar '* (mapcar '+ (polar (car l3) (angle (car l3) (cadr l3)) l_tg) (polar (car l3) (angle (car l3) (caddr l3)) l_tg) ) '(0.5 0.5 0.5) ) (+ (getvar "FILLETRAD") (* (getvar "FILLETRAD") (1- (/ 1.0 (sin (* alpha 0.5)))))) ) a1 (angle p_o (car l3)) a2 (angle p_o (polar (car l3) (angle (car l3) (cadr l3)) l_tg)) dxf_210 (z_dir p_o (car l3)) ) (if (or (zerop a2) (and (eq (rem a1 (* 3.5 pi)) a1) (> a1 a2))) (setq a2 (+ a2 (* 2 pi))) ) (entmake (list (cons 0 "ARC") (cons 100 "AcDbEntity") (assoc 67 js2) (assoc 410 js2) (assoc 8 js2) (if (assoc 62 js2) (assoc 62 js2) (cons 62 256)) (if (assoc 6 js2) (assoc 6 js2) (cons 6 "BYLAYER")) (if (assoc 370 js2) (assoc 370 js2) '(370 . -1)) (cons 38 (+ (cdr (assoc 38 js2)) (getvar "ELEVATION"))) (cons 39 (getvar "THICKNESS")) (cons 100 "AcDbCircle") (cons 10 (trans p_o 1 dxf_210)) (cons 40 (getvar "FILLETRAD")) (cons 210 dxf_210) (cons 100 "AcDbArc") (cons 50 (if (and (< a1 a2) (<= (- a2 a1) pi)) (+ (angle '(0 0 0) (getvar "UCSXDIR")) a1) (+ (angle '(0 0 0) (getvar "UCSXDIR")) a2))) (cons 51 (if (and (< a1 a2) (<= (- a2 a1) pi)) (+ (angle '(0 0 0) (getvar "UCSXDIR")) a2) (+ (angle '(0 0 0) (getvar "UCSXDIR")) a1))) ) ) (setq a2 (angle p_o (polar (car l3) (angle (car l3) (caddr l3)) l_tg)) ) (if (or (zerop a2) (and (eq (rem a1 (* 3.5 pi)) a1) (> a1 a2))) (setq a2 (+ a2 (* 2 pi))) ) (entmake (list (cons 0 "ARC") (cons 100 "AcDbEntity") (assoc 67 js1) (assoc 410 js1) (assoc 8 js1) (if (assoc 62 js1) (assoc 62 js1) (cons 62 256)) (if (assoc 6 js1) (assoc 6 js1) (cons 6 "BYLAYER")) (if (assoc 370 js1) (assoc 370 js1) '(370 . -1)) (cons 38 (+ (cdr (assoc 38 js1)) (getvar "ELEVATION"))) (cons 39 (getvar "THICKNESS")) (cons 100 "AcDbCircle") (cons 10 (trans p_o 1 dxf_210)) (cons 40 (getvar "FILLETRAD")) (cons 210 dxf_210) (cons 100 "AcDbArc") (cons 50 (if (and (< a1 a2) (<= (- a2 a1) pi)) (+ (angle '(0 0 0) (getvar "UCSXDIR")) a1) (+ (angle '(0 0 0) (getvar "UCSXDIR")) a2))) (cons 51 (if (and (< a1 a2) (<= (- a2 a1) pi)) (+ (angle '(0 0 0) (getvar "UCSXDIR")) a2) (+ (angle '(0 0 0) (getvar "UCSXDIR")) a1))) ) ) ) ) ) ) (setq l_pt (cdr l_pt)) ) ) ) ) (T (princ "\nFILLETRAD doit être différent de zéro")) ) (prin1) )
  3. Bonjour, Sujet déjà évoqué sous des versions antérieures. Voir ce sujet: Sélection et zoom , si la discussion t’intéresse... (réponses diverse en lisp, désolé pas de VBA😁)
  4. Bonjour, Essayes simplement de rajouter la condition (if (ssget "_I") (command "_.move" "_none" '(0 0 0) "_none" '(40 0 0)))
  5. C'a y est! Problème réglé grâce à Cadmin, un grand merci à lui et à ceux qui m'ont proposé leur aide (didier entre autre) C'était juste le mot de passe de l'époque de l'apparition du site CadXp qui m'avait été fourni automatiquement qui était TROP FAIBLE et qui a généré ce problème. A +
  6. bonuscad

    Ligne aléatoire

    Bonjour, Est ce que un type de ligne est affecté à ces polylignes ou au calque auquel elles appartiennent ET surtout si c'est le cas, est ce que l'échelle du type de ligne est le même entre les 2 postes? Une échelle trop grande peut donner l'impression qu'elles ont disparues ou trop petite donnera l'impression d'une ligne continue... Est ce que la génération du type de ligne est activée ou non ?
  7. bonuscad

    perte des xréfs

    Tu dis avoir Covadis, donc j'en déduis que tu as probablement un AutoCAD Map 3d. Si c'est le cas, j'avais eu un problème après l'installation par le service info, je ne pouvais me connecter à un serveur pour établir des requêtes. Après recherche d'info, j'ai appris que AutoCAD devait être au moins lancé UNE fois en tant qu'administrateur pour qu'un utilisateur puisse se connecter. Ceci a été fait et effectivement après j'ai pu me connecter à un serveur. Bien que cela n'a rien à voir avec les Xref, sait-on jamais! Car que fait AutoCAD comme procédure de configuration lorsqu'on le lance en admin??? C'est pas transparent... Ça vaut peut être le coup d'essayer si cela n'a pas été fait, peut être que ça résoudrai ton problème. Je n'ai pas d'autres idées... Demander un support à AutoDesk?
  8. Pour ma part je l'ai installé et n'ai constaté aucun problème, mais je je n'ai pas essayé l'éditeur VLisp. Mais je pense pense qu'il faut être prudent...Par exemple: https://www.it-connect.fr/windows-10-la-mise-a-jour-de-mars-genere-un-ecran-bleu-lors-dune-impression/ https://www.ginjfo.com/actualites/logiciels/windows-10/windows-10-et-kb4601319-des-problemes-apparaissent-20210309
  9. C'est comme Obelix , il est tombé dedans étant petit !
  10. bonuscad

    perte des xréfs

    Bonjour Es tu administrateur de ton poste ou utilisateur ? Ce qui a peut être pu se passer.... (suivant la politique de sécurité du service info): Lors de la mise en place du PC, la reprise/copie de tes fichiers a ete faite en session administrateur et de ce fait la copie en 'héritage" des droits administrateur s'est effectuée. Ce que tu faire pour vérifier: Sous l'explorateur window faire un clic-droit sur un fichier/dossier et cliquer sur propriété, sur l'onglet "général" tu auras les attributs : lecture seule et caché coché ou non et sur l'onglet "Sécurité" tu auras les "Noms de groupe ou d'utilisateurs:" Voir si "Utilisateurs" en fait partie et les autorisations accordées... Si c'est le cas voir avec le service info pour qu'il réattribue l'héritage des droits à l'utilisateur.
  11. bonuscad

    perte des xréfs

    Je penserai à la variable XLOADCTL et peut être XREFOVERRIDE. Autrement tu dis que c'est le service info qui a procédé à l'installation. Est-ce que vous êtes limités au niveau droit à certain dossier, les dossiers système ou application vous sont t-ils accessible? Autocad nécessite que l'utilisateur ait accès à certain dossiers de l'application.
  12. Si ce qui a été proposé ne répond pas à la demande, tu peux regarder ce fil
  13. Bien que je pense que Luna a bien avancé sur ta demande, je vais faire part de 2 routines que j'avais publier sur un forum US, bien que pas adapté à tes désirs ça peut donner des idées.... La première pour fixer les données et la deuxième pour l'export vers Excel. (vl-load-com) (defun c:ROOM_DATA ( / AcDoc Space old_lay sel ent vla_obj) (setq AcDoc (vla-get-ActiveDocument (vlax-get-acad-object)) Space (if (= 1 (getvar "CVPORT")) (vla-get-PaperSpace AcDoc) (vla-get-ModelSpace AcDoc) ) ) (cond ((null (tblsearch "LAYER" "AREA_ROOM")) (vlax-put (vla-add (vla-get-layers AcDoc) "AREA_ROOM") 'color 3) ) ) (setq old_lay (getvar "CLAYER")) (setvar "CLAYER" "AREA_ROOM") (setq pt (getpoint "\nFirst point of polyline or enter for select one: ")) (if pt (command "_.pline" pt (while (not (zerop (getvar "cmdactive"))) (command pause) ) ) (while (not (setq sel (ssget "_+.:E:S" '((0 . "*POLYLINE") (-4 . "<NOT") (-4 . "&") (70 . 120) (-4 . "NOT>")))))) ) (cond (sel (setq ent (ssname sel 0) vla_obj (vlax-ename->vla-object ent) ) (vlax-put-property vla_obj "Layer" "AREA_ROOM") ) (T (setq ent (entlast) vla_obj (vlax-ename->vla-object ent))) ) (vlax-ldata-put vla_obj "ROOM_NAME" (getstring T "\nName of room : ")) (vlax-ldata-put vla_obj "ROOM_AREA" (vlax-get-property vla_obj "Area")) (vlax-ldata-put vla_obj "ROOM_PERIMETER" (vlax-get-property vla_obj "Length")) (vlax-ldata-put vla_obj "ROOM_FLOOR" (getstring T "\nFloor of room : ")) (setvar "CLAYER" old_lay) (princ "\nPolyline have this data:") (print (vlax-ldata-list vla_obj)) (prin1) ) (defun c:ROOM_DATA_OUT ( / sel output doc xls wks column nb ename k_list count) (setq sel (ssget "_X" '((0 . "*POLYLINE") (8 . "AREA_ROOM") (-4 . "<NOT") (-4 . "&") (70 . 120) (-4 . "NOT>"))) file_output (strcat (getvar "DWGPREFIX") (substr (getvar "DWGNAME") 1 (- (strlen (getvar "DWGNAME")) 4)) ".xlsm") ) (cond ((and sel file_output) (setq doc (vla-get-activedocument (vlax-get-acad-object))) (vla-startundomark doc) (setq xls (vlax-get-or-create-object "Excel.Application")) (vlax-invoke (vlax-get xls 'workbooks) 'Add) (vlax-put xls 'Visible :vlax-true) (setq wks (vlax-get xls 'ActiveSheet) column 65 count 1 ) (vlax-put (vlax-get-property wks 'range (strcat "A1:E" (itoa (sslength sel)))) 'Cells "") (foreach el '("HANDLE" "ROOM_NAME" "ROOM_FLOOR" "ROOM_PERIMETER" "ROOM_AREA") (vlax-put (vlax-get-property wks 'range (strcat (chr column) (itoa count))) 'value el) (setq column (1+ column)) ) (repeat (setq nb (sslength sel)) (setq ename (ssname sel (setq nb (1- nb))) k_list (list (cons "HANDLE" (strcat "'" (cdr (assoc 5 (entget ename)))))) ) (foreach el '("ROOM_NAME" "ROOM_FLOOR" "ROOM_PERIMETER" "ROOM_AREA") (setq k_list (cons (cons el (vlax-ldata-get ename el)) k_list)) ) (setq count (1+ count) column 65 ) (foreach el (reverse (mapcar 'cdr k_list)) (vlax-put (vlax-get-property wks 'range (strcat (chr column) (itoa count))) 'value el) (setq column (1+ column) ) ) (setq k_list nil) ) (mapcar 'vlax-release-object (list wks xls)) (gc) (vla-endundomark doc) ) ) (prin1) )
  14. bonuscad

    Largeur définie TXTMULT

    Bonjour, Quand tu parle de "cache", je pense que tu fais allusion au "masque d'arrière plan". Pour palier à ton problème, soit lors de la création du MTEXT tu définie ta largeur à 0 (le masque est alors ajusté automatiquement à la longueur du texte), soit après coup tu mets la largeur à 0.0 Comme il n'est pas possible de changer la largeur dans le panneau de propriété, ce petit lisp te permettra de le faire. (defun c:LARG0 (/ ss i text) (if (setq ss (ssget '((0 . "MTEXT")))) (repeat (setq i (sslength ss)) (setq text (ssname ss (setq i (1- i)))) (if (< 0.0 (getpropertyvalue text "Width")) (progn (if (/= (getpropertyvalue text "ColumnType") 0) (setpropertyvalue text "ColumnType" 0) ) (setpropertyvalue text "Width" 0.0) ) ) ) ) (princ) )
  15. bonuscad

    Renommer nom de champ OD

    J'ai modifié mon post où j'ai proposé le code. J'ai fiabilisé l'entrée du nom du nouveau champ afin d'éviter les caractères non autorisés et que le nom soit bien valide. (d'ailleurs j'ai mis le code en pièce jointe pour éviter une mauvaise interprétation par un copier-coller sur le forum que pourrait entraîner ces caractères.) Correction d'un gros bug constaté en utilisation réelle, je ne pouvais pas le laisser dans l'état Pour ceux qui l'auraient récupéré -> poubelle. Reprenez la pièce jointe.
  16. bonuscad

    Renommer nom de champ OD

    Je n'ai pas réussi à utiliser "le clef en main" de gégé. (je n'ai pas la table "A-PROB") et la variable a-prob n'est pas défini dans le lisp. Après adaptation, j'ai remarqué que l'on perdait la valeur attribuée dans le champs renommé, pas top ! Donc je me suis attelé pour faire un truc plus générique et qui conserve la valeur des enregistrements (même empilés) après le renommage du champ. Rename_Field.lsp
  17. bonuscad

    RECUPERATION DE DONNEES

    Par acquis de conscience, j'ai essayé cette manip partielle. RESULTAT: JE TE DÉCONSEILLE DE L'APPLIQUER. En effet si cela semble fonctionner à l'export, à l'import seul les entités concernées vont subir la modification, MAIS toutes les autres entités ayant eu cette table vont simplement la PERDRE. Pourquoi? Parce que dans mon programme d'import, j'efface tous les enregistrements et les tables avant de les reconstruire et de réaffecter les valeurs des champs grâce aux Handle. Si pas de Handle dans le csv -> PAS DE TABLE !! Je suis obligé de faire comme cela si je veux avoir toute la souplesse de modifications dans le csv (ajout, effacement , changement de type de champs etc..) qui se répercutent à l'import.
  18. bonuscad

    RECUPERATION DE DONNEES

    Cela me surprend de la part de mon formateur sur Autocad Map Je m'explique: Suivant le genre de modification que tu vas faire dans le .csv , rajout de champ, modification de type de champs, renommage de champs... Si tu l'applique seulement sur une sélection, en retour tu risque d'avoir en retour des messages de Map sur une incompatibilité de table (qu'il sera difficile de se défaire). C'est bien pour ça que j'ai choisis de le faire sur l'ensemble des entités. Cependant si c'est pour changer seulement la valeur de champs, cela est possible mais je ne publierais pas ce genre de modif dangereuse à mon goût. Je te laisse essayer la modif dans All_OD2CSV, tu remplace simplement (ssget "_X" -> en (ssget SVP ne diffuse pas ce genre de modif
  19. bonuscad

    RECUPERATION DE DONNEES

    Bonjour, Dans l'explorateur de Windows, un clic-droit sur le fichier "EV_arbres.dbf" et l'option "Ouvrir avec" et choisir Excel et tu le sauvegardes sous le format xls. Ces fichiers .dbf .shx .shp .... sont obtenu par la commande MAPEXPORT (en choisissant bien les tables à exporter, autrement le dbf sera vide)
  20. bonuscad

    Renommer nom de champ OD

    Bonjour, Je pense que tu pourrais facilement réaliser cela, je t'invite à lire ce sujet. Une fois le CSV créé tu l'ouvres avec Excel (enregistrer après modifications au format original csv) ou un simple éditeur de texte (notepad ou autre) et tu modifies simplement l'entête de la colonne et tu réimportes le fichier CSV. La modification sera effectuée. Le programme prend en charge plusieurs tables si l'on veut et respecte les n-records (plusieurs enregistrements empilés) On peut même créer une nouvelle colonne qui serait le résultat d'une formule avec d'autres champs.
  21. Le retour est correct, alors je pense simplement aux fonctions (vl- qui ne sont pas chargés (étrange sous une version 2020) Essayes de valider le chargement en tapant la commande (vl-load-com) en ligne de commande, puis de relancer le code. J'ai l'impression que c'est (vl-string-search qui pose problème
  22. Afin d'éclaircir la situation, copie-colle l'instruction qui suit directement en ligne de commande et donne le retour, on sera peut être fixé sur le point noir... (vla-get-caption (vlax-get-acad-object))
  23. Je pense quand changeant cette ligne, ça devrait correspondre à ta demande: (ade_odsetfield ent "PT_GEN_SUP" "ALTITUDE" 0 (caddr pt)) --------->>>> (ade_odsetfield ent "PT_GEN_SUP" "ALTITUDE" 0 (1- (caddr pt) ) )
  24. Ton lien pour ma part dans un environnement firewall d'entreprise et navigateur sous firefox , ça me renvoie ceci: Par contre coller le lien dans le navigateur google-chrome ça fonctionne....
  25. Une autre solution (qui fonctionne avec ton DXF) l'ouvrir avec un bon éditeur de texte, faire rechercher le mot "ENTITIES" Sur la ligne au dessus tu as un "2" puis une autre avant avec "SECTION" et encore au dessus un "0" Et bien depuis le début de cette ligne 0 (le zéro tu le garde), tu sélectionne tous les lignes au dessus dans le document et tu les supprime et enregistre ton DXF modifié. Tu devrais pouvoir ouvrir ton dxf avec Autocad en ne gardant que cette section concernant les entités
×
×
  • 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é