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. Bonsoir En cette période de confinement, je me suis occupé à développer un outil. Couper une/des polylignes 2D (LWPOLYLINE)en des points ou insertions de blocs ceci depuis le SCG ou d'un SCU et pour des polylignes crées dans le SCG ou dans un SCU. Ceci sans utiliser la commande "_break", ce qui implique que les entités peuvent être hors de l'écran d'affichage, cela n'empêche pas le fonctionnement. Les polylignes coupées conservent les arcs ainsi que leurs largeurs respectives. De plus si vous avez Autocad Map les polylignes coupées conserveront les données d'objet (OD) de la polyligne originale. Il vous sera demandé de sélectionner les polylignes puis soit les points ou les insertions de bloc, ceux ci doit être bien sur situés sur une polyligne pour être pris en considération pour la coupure. Il vous seras demandé aussi la tolérance d'égalité. En effet pour que cela fonctionne bien dans des coordonnées très grandes, la tolérance proposée sera de 1E-01, mais si vous êtes dans un système de coordonnées classique d'un dessin non cartographique, la tolérance peut être de 1E-08. Cette routine fonctionne aussi si vous n'avez pas Map, dans ce cas la partie OD n'est pas traité. Pour ma part sur un DWG cartographique en Lambert93 lors de mes tests, j'ai traité sur la totalité du dessin 550 polylignes avec une sélection de 4940 points. La procédure a durée 25mn (et oui quand même..., mais mon PC personnel est très moyen, confinement oblige) et j'ai obtenu 5036 polylignes avec leurs données d'objet ceci avec une tolérance de 10cm pour un bon résultat. Des bugs restent possibles, surtout si la tolérance est mal choisie. On a alors ce type de message lors du déroulement : Un sommet a été ajouté à une polyligne 2D (0) qui n'avait qu'un seul sommet. Cut_PolyOD@ins.lsp
  2. bonuscad

    Bug sur un vieux lisp

    Non du tout, si je l'ai publié, c'est bien pour pouvoir en faire ce que l'on en veut, autrement je l'aurais compilé et non donné le code source. Tiens hier soir, je regardais Arte avec l'historique de l'informatique, avec les premiers club qui s'échangeait les codes, en faisait des copies pour les distribuer. Je suis encore dans cette époque, même si l'on a vu que certain on en tiré profit (je pense que vous voyez de qui je veux parler...) Ces personnes sont toujours fiers de ce qu'elles ont put créer malgré pour récompense un emblématique tee-shirt, l'autre n'a qu'une fortune immense avec suspicion de voler encore nos données pour s'enrichir encore plus... On a pas les mêmes valeurs
  3. Ça me rappelle cette réponse que j'avais faite. Je n'ai jamais compris comment ceci était possible de construire une fonction de la sorte. Çà relance le sujet
  4. bonuscad

    Bug sur un vieux lisp

    Je vais essayer d'être un peu plus précis sur l'utilisation de celui-ci car je vois pas pourquoi il ne fonctionne pas! Le prérequis et d'avoir une parcelle dont la surface recherchée doit être comprise dans un trapèze quelconque c \ /d \__ / A B Le "Premier point de la ligne de base: " sera par exemple A, le "Second point de la ligne de base: " sera B le "Point sur le premier côté adjacent: " sera un point situé sur le segment Ac et le "Point sur le deuxième côté adjacent: " sera sur le segment Bd Au delà de la partie haute de c et d le reste de la forme de la parcelle peut être quelconque. La ligne dessiné sera parallèle à AB et les extrémités seront les intersections respectives (elles seront projetée au delà si les segments Ac et/ou Bd sont trop court) des côtés adjacents. La surface de ce nouveau trapèze (dont les 2 bases sont parallèles) fera exactement la surface demandée. Il est certain que si les côtés adjacents sont trop court, il faudrait répété l'opération avec la nouvelle ligne en indiquant la surface du/des triangle(s) qui est/sont soit en trop, soit en moins (suivant la direction du segment au delà des segments adjacent) pour obtenir la bonne surface avec la forme de la parcelle. J'espère avoir été plus clair... après il est certain que ce code minimaliste ne peut répondre à toutes les situations, mais en tout cas le résultat n'est pas une approximation. Voir la page 5 de ce document pour mieux comprendre
  5. bonuscad

    Bug sur un vieux lisp

    Bonjour, Intéressant, mais en effet cet méthode itérative n'est pas des plus rapide. J'avais planché sur une division avec une surface donnée et parallèle à un coté donné en utilisant la formule de Saron. Ça ne répons pas à toute les options que propose ton lisp, mais par contre il est beaucoup plus rapide (ce n'est pas un calcul itératif) et précis. Je te le livre au cas ou il puisse t'être utile. (defun ang_between (p10 p11 p20 p21 / px p1 p2 l_pt l_d p ang) (setq px (inters p10 p11 p20 p21 nil)) (cond (px (if (> (distance px p10) (distance px p11)) (setq p1 p10) (setq p1 p11)) (if (> (distance px p20) (distance px p21)) (setq p2 p20) (setq p2 p21)) (setq l_pt (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) ) ) (T nil ) ) ) (defun c:divide_saron ( / pt1 pt2 pt3 pt4 S1 ang1 ang2 x1 x2 ptx1 ptx2) (initget 1) (setq pt1 (getpoint "\nPremier point de la ligne de base: ")) (initget 1) (setq pt2 (getpoint pt1 "\nSecond point de la ligne de base: ")) (initget 1) (setq pt3 (getpoint pt1 "\nPoint sur le premier côté adjacent: ")) (initget 1) (setq pt4 (getpoint pt2 "\nPoint sur le deuxième côté adjacent: ")) (initget 7) (setq S1 (getreal "\nSurface désirée: ")) (setq ang1 (ang_between pt1 pt2 pt1 pt3)) (setq ang2 (ang_between pt2 pt1 pt2 pt4)) (cond ((and ang1 ang2) (setq ang1 (- pi ang1) ang2 (- pi ang2)) (setq x1 (* (/ (* (distance pt1 pt2) (sin ang1)) (sin (+ ang1 ang2)) ) (1- (+ ;ou peut être "-" (sqrt (1+ (/ (* 2.0 S1 (sin (+ ang1 ang2))) (* (distance pt1 pt2) (distance pt1 pt2) (sin ang1) (sin ang2)) ) ) ) ) ) ) ) (setq x2 (/ (* x1 (sin ang2)) (sin ang1))) (setq ptx1 (polar pt1 (angle pt1 pt3) x2)) (setq ptx2 (polar pt2 (angle pt2 pt4) x1)) (command "_.line" "_none" ptx1 "_none" ptx2 "") ) (T (princ "\nIncorrect!")) ) (prin1) )
  6. Bonjour, Tu peux essayer ceci, tu copie-colle ce qui suit directement en ligne de commande ((lambda ( / flag def_lay nam_lay js) (setq flag T) (while (setq def_lay (tblnext "LAYER" flag)) (setq nam_lay (cdr (assoc 2 def_lay)) flag nil) (cond ((setq js (ssget "_X" (list (cons 8 nam_lay)))) (command "_.-wblock" (strcat (getvar "dwgname") "$" nam_lay) "" "*0.0,0.0,0.0" js "") ) ) ) (prin1) ))
  7. Bonjour, As tu essayé la routine corrigé et proposé en #15. A quoi fais tu référence, à BURST? (c'est un outil des expresstools) Car si je l'essaye sur ton exemple le lisp posté en #15, j'obtiens bien un texte avec en valeur le texte 61.37 , donc bien la valeur de l'étiquette ?!?!
  8. bonuscad

    entmod sans aucun effet

    Bonjour, Pas tester ton code non plus, pour cela un petit extrait de dessin aurait été nécessaire. Mais tu dis que tes elist sont bien modifiées mais que entmod n'a pas l'air de fonctionner. Il faut savoir que entmod fonctionne (sauf pour les VIEWPORT / fenêtres), mais que pour des entités complexes tel que des blocs ou des polylignes lourdes par exemple l'utilisation de entupd (avec le nom de l'entité d'entête) est nécessaire pour mettre à jour la base de données d'Autocad. Je crois même qu'un regen par la suite soit aussi indispensable pour voir les modifications, ce qui n'est pas le cas pour des entités simples; on voit tout de suite la modification après entmod.
  9. Bonjour, Malheureusement le concepteur de ce lisp est décédé et les liens sont aussi souvent morts. Mais son travail n'est pas complètement perdu car Patrick Emin (administrateur du forum français d'Autodesk) a mis sa bibliothèque de Lisp à disposition. Lisp de patrick_35 Si tout les téléchargements pouvait engendrer chacun une fleur sur sa tombe, ça serait la plus fleurie du cimetière.Ciao Patrick_35
  10. Bonsoir, En lisp j'ai eu l'occasion d'utiliser une fonction d' Elpanov Evgeniy (qui, fut un temps fréquentait un peu le forum) J'avais repris sa fonction dans ce sujet Je te la re-présente sous une forme plus légère (defun entmakex-hatch (l a n s lay) ;; By ElpanovEvgeniy ;; version 0.2 ;; 2012.07.11 ;; mailto: elpanov@gmail.com ;; web: elpanov.com ;; Arguments ;; L - list point ;; A - angle hatch ;; N - name pattern ;; S - scale ;; lay - layer ;; return - hatch ename (entmakex (apply 'append (list (list '(0 . "HATCH") '(100 . "AcDbEntity") '(410 . "Model") '(100 . "AcDbHatch") '(10 0.0 0.0 0.0) '(210 0.0 0.0 1.0) (cons 2 n) (cons 8 lay) (if (= n "SOLID") '(70 . 1) '(70 . 0) ) ;_ if '(71 . 0) (cons 91 (length l)) ) ;_ list (apply 'append (mapcar '(lambda (a) (apply 'append (list (list '(92 . 7) '(72 . 1) '(73 . 1) (cons 93 (/ (length a) 2))) a '((97 . 0)) ) ;_ list ) ;_ apply ) ;_ lambda l ) ;_ mapcar ) ;_ apply (list '(75 . 0) '(76 . 1) (cons 52 a) (cons 41 s) '(77 . 0) '(78 . 1) (cons 53 a) '(43 . 0.) '(44 . 0.) '(45 . 1.) '(46 . 1.) '(79 . 0) '(47 . 1.) '(98 . 2) '(10 0. 0. 0.0) '(10 0. 0. 0.0) '(451 . 0) '(460 . 0.0) '(461 . 0.0) '(452 . 1) '(462 . 1.0) '(453 . 2) '(463 . 0.0) '(463 . 1.0) '(470 . "LINEAR") ) ;_ list ) ;_ list ) ;_ apply ) ;_ entmakex ) (defun createhatchlist (e) (if e (vl-remove-if-not '(lambda (x) (member (car x) '(10 42))) (entget e)) ) ) (defun c:hatch_poly (/ jspl nbe tmp hList) (setq jspl (ssget '((0 . "LWPOLYLINE")))) (cond (jspl (repeat (setq nbe (sslength jspl)) (if (setq tmp (CreateHatchList (ssname jspl (setq nbe (1- nbe))))) (setq hList (cons tmp hList)) ) ) (entmakex-hatch (reverse hList) 0.0 "_SOLID" 1.0 (getvar "CLAYER")) ) ) (prin1) ) La commande hatch_poly vas te permettre de hachurer la sélection (une ou plusieurs) de LWPOLYLINE. Ces polylignes peuvent aussi comporter des arcs, si une polyligne est incluse dans une autre cela fera une hachure avec ilôts.La ligne (entmakex-hatch (reverse hList) 0.0 "_SOLID" 1.0 (getvar "CLAYER")) peut être personnaliser avec les arguments qui te conviennent...
  11. Salut, Je viens de tester avec Map 2019 un export KML (celui ci est proposé dans les format d'exportation) d'un filaire et zone en RGF93 (lwpolyline, point et mpolygon) avec des données d'objets. J'ai utiliser la nouvelle version beta de google earth en mode web: https://earth.google.com/web/ Et ça fonctionne plutôt bien, mon projet est bien calé dans le système de google earth et j'ai bien mes données d'objets. Je retrouve même mes couleurs de calques ou d'objet forcé. Les Mpolygon sont en couleur et transparent, le fond de google earth reste visible, seul 2 polygone sont mal représenter (couleur blanche pleine sans transparence, c'était des polygones avec des zone séparée).
  12. bonuscad

    Orienter des Hachures

    Bonjour, Ma 1ere remarque sera sur ton filtre, ici tu n'as filtrer que sur le nom du calque, il serait judicieux de filtrer aussi sur le type d'entité: puisque que tu veux éditer des hachures. Ma 2eme remarque, si effectivement HATCHEDIT fonctionne avec un jeu de sélection en ligne de commande (tu as d'ailleurs oublié d'enlever le ! devant, pareil pour l'angle), en mode procédure ça ne fonctionne plus! Il te faut balayer ton jeu de sélection. (defun c:ORIH ( / p1 p2 angle1 ang1 selec1 n) (setq p1 (getpoint "\nSaisir le 1er point d'orientation : ")) (setq p2 (getpoint "\tSaisir le 2eme point d'orientation : ")) (setq angle1 (angle p1 p2)) (setq ang1 (angtos angle1 2 4)) (setq selec1 (ssget "_X" '((0 . "HATCH") (8 . "MesHachures")))) (repeat (setq n (sslength selec1)) (command "_.-HATCHEDIT" (ssname selec1 (setq n (1- n))) "_properties" "" "" ang1) ) ) Dans l'état, cela devrait fonctionner, mais le code n'est pas sécurisé du tout (getpoint) pouvant être nul. Méfie toi aussi de HATCHEDIT dont les options peuvent changer suivant le modèle de hachures utilisé. Je pense à SOLID et au modèle Utilisateur par exemple. ET LES VARIABLES LOCALES . Bonne continuation.
  13. bonuscad

    Ligne élastique

    C'est bien, t'as trouvé le nom de la variable. Si tu fais maintenant en ligne de commande : (setenv "Model Rubber-band Line Color" "255") soit 255,0,0 pour rouge, cela devrait être immédiat.Pour remettre en orange : (setenv "Model Rubber-band Line Color" "2012400") nb:(getenv "Model Rubber-band Line Color") te donnera la couleur courante
  14. Bonjour Suite à une demande d'Alexender (personne Russe) sur un forum de Map, j'ai été amené a développer ceci: All_OD2CSV Exporte TOUTES les OD du dessin dans un ou plusieurs fichiers CSV (1 fichier par table) Ces fichiers sont facilement éditable avec un tableur, vous pouvez donc effectuer (ou pas) des modifications/suppressions/ajouts dans celui-ci. Il est IMPÉRATIF de ne pas toucher à la 1ère colonne ET dernière colonne, les autres peuvent être modifiées ou en créer de nouvelles, l'essentiel est d'être cohérent dans les données introduites ou modifiées. Penser à modifier la ligne 3 si vous voulez changer le type de données (Character, Integer, Real, Point), de même vous pouvez changer le nom de la table à la ligne 1 (l'ancienne devra être supprimée manuellement avant l'import) A la ligne 2 Le nom des champs peut être aussi modifié ou insérer une nouvelle colonne entre la 1ere et dernière avec un nouveau champ. CSV2OD Importe simplement le fichier CSV de la table sélectionnée. Il ne s'occupe pas de la cohérence des données, donc si données ont été modifiées en dépits du bon sens la routine va certainement échouer, mais si tout est correct il remplacera toutes les données. En résumé vous pourrez faire beaucoup de choses avec le tableur: croiser les données pour en créer de nouvelles par exemple, mais connaître la structure des données de Map est quelque peu indispensable. Les routines s’occupe aussi des données empilées (plusieurs enregistrements) si elles existent. Pour donner un ordre d'idée: Pour un fichier de 8.5 Mo avec 4 tables en moyenne par objet avec parfois des données empilées le traitement a pris environ 45s, donc soyez patient si ça mouline. Si mes explications sont insuffisantes, relancez moi! All_OD2CSV.lsp CSV2OD.lsp
  15. Le problème est revenu, j'ai même essayé avec un autre navigateur tel que Edge; il me sort un problème TLS comme quoi il y a un problème de validité de certificat qui a expiré. Bref impossible de me connecté! A mon domicile c'est bon, à ne rien n'y comprendre.... surtout que c'est pas mon domaine!
  16. Ben, je ne sais pas si votre déblocage dans les filtres y est pour quelque chose, mais certainement car ça refonctionne, accès instantané. Merci.
  17. Bonjour Cadmin, Si effectivement le passage en https depuis mon domicile ne pose pas de problème, ce n'est pas la cas dans mon entreprise (qui est, je pense, derrière un proxy !) Au boulot ça mouline très longtemps "Établissement d'une liaison TLS depuis le site cadxp.com" pour finir sur une erreur de ce type: PR_CONNECT_RESET_ERROR Je ne sais si je suis le seul, car les impactés ne peuvent pas forcément le signaler, moi je le fais depuis mon domicile. C'est très pénalisant pour les membres en entreprise...
  18. Essayes ceci avec précaution (sauvegarde si tu es sûre du résultat) car j'ai pas vraiment testé...Tu copie-colle en ligne de commande. ((lambda ( / flag lay) (setq flag T) (while (setq lay (tblnext "LAYER" flag)) (if (and (zerop (boole 1 16 (cdr (assoc 70 lay)))) (/= (cdr (assoc 2 lay)) "0")) (if (or (wcmatch (cdr (assoc 2 lay)) "REVISION-*") (wcmatch (cdr (assoc 2 lay)) "Indice-*")) (command "-SUPCALQUE" "N" (cdr (assoc 2 lay)) "" "oui") ) ) (setq flag nil) ) ))
  19. Regarde les propositions de (gile) sur ce sujet ancien.
  20. Ça va pas faire ton affaire, mais pour moi toute type de hachure sont effectuées sans aucun souci. Par contre arnauldalp a parfaitement raison tu as un sommet surperposé, c'est pas propre mais pour moi pas gênant. AutocadMap 3D me permet aussi de transformer ce contour depuis une polyligne en Mpolygon sans problème (pourtant des sommets superposés amène souvent des erreurs: que mon contour est auto-coupant et le Mpolygon n'est pas mis en place)
  21. J'avais proposé ceci, il insère des points mais ça pourrait facilement être un bloc, par contre pour les distances cela fait appel à un fichier externe . CSV contenant celles ci.
  22. Bonjour Cadmin, Une mise en place avec un système de captcha sur Cadxp lors de l'inscription serait il possible? Cela limiterait déjà l'intrusion des robots. Ce n'est qu'une proposition...
  23. J'ai eu le même problème "de chemin d'accès beaucoup trop long" pour insérer des images géoréférencées sur AutocadMap à partir d'un lecteur réseau. J'ai du demander à l'administrateur réseau de diminuer l’arborescence de ce chemin pour retrouver la fonctionalité. A l'époque du 64 bits, c'est un peu incompréhensible d'être encore confronté à cette limitation!
  24. Bonjour, J'ai ceci à disposition, tu peux affiné le filtre à ta convenance dans la fonction PolylineByLayer en rajoutant dans (ssget): '(8 . "BV_#") ? Voici la fonction générique: ;; Retourne un liste de sous-listes des cumuls de longueur de polyligne par calque ;; ((nom_calque nombre_polylignes valeur_cumulée) ...) (defun PolylineByLayer (key / ss i pline layer value lst sub) (if (setq ss (ssget "_X" (append (list '(0 . "LWPOLYLINE") (cons 410 (getvar "CTAB"))) (if (eq key "Area") '((-4 . "&") (70 . 1)))))) (repeat (setq i (sslength ss)) (setq pline (ssname ss (setq i (1- i))) layer (getpropertyvalue (getpropertyvalue pline "LayerId") "Name") value (getpropertyvalue pline key) ) (setq lst (if (setq sub (assoc layer lst)) (subst (list layer (1+ (cadr sub)) (+ (caddr sub) value)) sub lst) (cons (list layer 1 value) lst) ) ) ) ) ) ;; Ecrit les données dans Excel ;; ;; Argument ;; data : une liste contenant un sous liste de données par rangée (defun WriteExcel (data / xlApp wBook cells i j) (setq xlApp (vlax-create-object "Excel.Application") wBook (vlax-invoke-method (vlax-get-property xlapp 'WorkBooks) 'Add) cells (vlax-get-property xlApp 'Cells) i 0 ) (foreach row data (setq i (1+ i) j 0 ) (foreach val row (setq j (1+ j) cell (vlax-variant-value (vlax-get-property cells 'Item i j)) ) (vlax-put-property cell 'Value2 val) ) ) (vlax-invoke-method (vlax-get-property (vlax-get-property xlApp 'ActiveSheet) 'Columns ) 'AutoFit ) (vlax-put-Property xlApp 'Visible :vlax-true) ) ;; Ecrit les longueurs de polyligne par calque (defun c:metres (/ k_mod data filename) (initget "Longueur Aire _Length Area") (setq k_mod (getkword "\nMesurer [Longueur/Aire] <Longueur> : ")) (if (not k_mod) (setq k_mod "Length")) (and (setq data (PolylineByLayer k_mod)) (WriteExcel (cons (list "Calque" "Nombre" (if (eq k_mod "Length") "Longueur" "Surface")) data)) ) (princ) )
  25. Sur ma version AutocadMap 2019, je le charge et l’exécute sans problème.Mais je viens de voir qu'il y a une petite nuance entre celui que je possède et celui posté en #7 Donc pas acquis de conscience je reposte le code... j'ai peut être fais une correction mineure sans corriger celui posté auparavant (je ne suis pas forcément toutes mes publications) (defun c:defatt2txt ( / js ind ent dxf_ent val_txt) (princ "\nChoix des définitions d'attribut à convertir en texte") (setq js (ssget '((0 . "ATTDEF")))) (cond (js (setq ind 0) (repeat (sslength js) (setq ent (ssname js ind) dxf_ent (entget ent) val_txt (cdr (assoc 2 dxf_ent)) ) (foreach n '(-1 0 280 330 100 5 1 100 3 2 70 73 74) (setq dxf_ent (vl-remove-if-not '(lambda (x) (/= (car x) n)) dxf_ent)) ) (setq dxf_ent (cons (cons 1 val_txt) dxf_ent) dxf_ent (cons '(0 . "TEXT") dxf_ent) ind (1+ ind) ) (entdel ent) (entmake dxf_ent) ) ) (T (princ "\nAucune définition d'attribut sélectionnée") ) ) (prin1) )
×
×
  • 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é