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

    Création point

    Bonjour, Précisions! Que cela signifie pour toi? : Un point au milieu de chaque segment (courbe ou pas) Ou alors un unique point au milieu de la longueur totale de la polyligne
  2. bonuscad

    Scaner 3d

    J'utilise essentiellement Firefox sous Windows ou Linux et j'ai le même problème. La parade que j'ai trouvé et de mettre systématiquement un espace avant mon retour de ligne, et là la présentation reste correcte. Dans ce message j'ai bien mis des espaces en fin de ligne.
  3. bonuscad

    COTATION

    La variable étant enregistrée dans le dessin... Donc à changer dans chaque dessin à problème. Vérifier aussi que votre gabarit utilisé (DWT) n'a pas cette variable fixé à 1. Ou alors, solution que j'ai adopté depuis longtemps, charger un lisp qui définit les variables comme souhaitées. Voici pour exemple mon fichier fixvar.lsp que je charge automatiquement, c'est pas une référence, chacun y met ce qu'il veut avec ses propre valeurs associées. (setvar "ANNOAUTOSCALE" -4) (setvar "APBOX" 1) (setvar "APERTURE" 5) (setvar "ATTDIA" 1) (if (zerop (getvar "ATTMODE")) (setvar "ATTMODE" 1)) (setvar "ATTREQ" 1) (setvar "BLIPMODE" 0) (setvar "CMDDIA" 1) (setvar "DEMANDLOAD" 3) (setvar "DIMZIN" 0) (setvar "DRAGMODE" 2) (setvar "FILEDIA" 1) (setvar "FILETABPREVIEW" 0) (setvar "FILETABTHUMBHOVER" 0) (setvar "GRIPS" 1) (setvar "HIGHLIGHT" 1) (setvar "INDEXCTL" 3) (setvar "INSUNITS" 6) (setvar "INSUNITSDEFSOURCE" 6) (setvar "INSUNITSDEFTARGET" 6) (setvar "LAYOUTREGENCTL" 1) (setvar "LEGACYCTRLPICK" 1) (setvar "MBUTTONPAN" 1) (setvar "MEASUREINIT" 1) (setvar "MEASUREMENT" 1) (setvar "MIRRTEXT" 0) (setvar "OSNAPCOORD" 2) (setvar "PALETTEOPAQUE" 1) (setvar "PICKADD" 1) (setvar "PICKAUTO" 1) (setvar "PICKBOX" 3) (setvar "PICKDRAG" 0) (setvar "PICKFIRST" 1) (setvar "PICKSTYLE" 1) (setvar "PLINETYPE" 2) (setvar "QPMODE" 0) (setvar "REGENMODE" 1) (setvar "ROLLOVERTIPS" 0) (setvar "SDI" 0) (setvar "SELECTIONPREVIEW" 2) (setvar "SHORTCUTMENU" 11) (setvar "TEXTEVAL" 0) (setvar "TEXTFILL" 1) (setvar "UCSFOLLOW" 0) (setvar "UCSDETECT" 0) (setvar "VISRETAIN" 1) (setvar "WHIPARC" 0) (setvar "WHIPTHREAD" 3) (setvar "WSCURRENT" "Bonuscad") (setvar "XLOADCTL" 2)
  4. Je n'ai pas contrôlé le code mis en ligne par Didier.Je te propose de copier-coller directement en ligne de commande les codes (l'un après l'autre) donnés dans ce post sur CadXp.
  5. Tu as cet exemple sur la page Didier qui reprend une partie de tes demandes. Quand aux poids des objets.... cela me semble difficile à analyser; pour seul exemple un Xref ne pèsera rien dans ta base de donnée du dessin même alors quand terme de temps de réponse cela peut varier suivant l'xref utilisé. Les blocs dynamiques, s'ils se révèlent pratique, peuvent être une vrai cata surtout s'ils sont un peu complexes et utilisé à outrance. Je dirais la même choses pour les tableaux avec des champs dynamiques. En dernier lieu les applicatifs verticaux: les objets AEC d'Autocad Archi, les dictionnaires alimentés par Covadis, des type de ligne de Microstation, des données d'objet étendues, bref plein de truc peuvent alourdir un dessin sans qu'on s'en aperçoivent. Un simple copier-coller d'un dessin à l'autre peut importer des choses non utiles à ton dessin. A part de la rigueur, pas de recette magique
  6. Bonjour, Au cas ou cela puisse t’intéresser je t'oriente sur cette réponse dont le sujet semble similaire
  7. En effet, c'est que je disais: En même temps, je pense que c'est un effet visuel car si tu zoom très fort sur un intervalle et que tu essaye de sélectionner la hachure sur ce trait qui ne devrait pas y être, la sélection ne se fait pas alors que la sélection avant ou après cet intervalle fonctionne et met la hachure en surbrillance (sauf le trait d'intervalle). J'ai fais un essai d'impression dans un PDF (avec l'option "Tracer avec épaisseur de ligne" DECOCHE) et le résultat est conforme. Je ne m'explique pas ce bug d'affichage... J'ai d'abord construit mes lignes horizontales puis les lignes verticales de la 1ere rangée et celle de la 2ème rangée. Comme expliqué ICI : [i]angle[/i], [i]x-origin[/i],[i]y-origin[/i], [i]delta-x[/i],[i]delta-y[/i],[i]dash-1[/i],[i]dash-2[/i], … Donc ces valeurs delta sont lié à l'angle fourni en début de ligne et non rien à voir avec le X ou Y de ton écran autocad. Le X est dans le sens d'orientation de ta ligne dessiné (un peut comme un scu objet). Une fois qu'on a compris ces valeurs delta et que l'on ne fais pas la confusion avec le système général X Y cela devient plus simple. En tout cas bravo, car peu de gens se lance dans les définitions de hachures et pour une première le résultat était déjà bien avancé.
  8. Bonjour, J'ai repris complétement la définition pour être dans ma logique de construction, donc pour expliquer ton erreur... Mais en voyant ce que je te propose, peut être comprendra tu où était la coquille. Fait bizarre, je ne sais pas s'il cela vient du paramétrage de mon autocad, mais lorsque j'hachure avec ce modèle, je n'ai pas les intervalles qui sont coupés entre les segments verticaux et pourtant si je décompose je les retrouve *copie2, 0,15.1, 1.3,150.3,62.6,45,-0.1,60,-0.1,45,-0.1 0,15.1,21.3,150.3,62.6,45,-0.1,60,-0.1,45,-0.1 0,0.05,22.6,150.3,62.6,30,-0.1,60,-0.1,60,-0.1 0,0.05,62.6,150.3,62.6,30,-0.1,60,-0.1,60,-0.1 90, 15.1,1.3,62.6,150.3,20,-42.6 90, 60.1,1.3,62.6,150.3,20,-42.6 90, 60.2,1.3,62.6,150.3,20,-42.6 90,120.2,1.3,62.6,150.3,20,-42.6 90,120.3,1.3,62.6,150.3,20,-42.6 90,165.3,1.3,62.6,150.3,20,-42.6 90, 0.05,22.6,62.6,150.3,40,-22.6 90, 30.05,22.6,62.6,150.3,40,-22.6 90, 30.15,22.6,62.6,150.3,40,-22.6 90, 90.15,22.6,62.6,150.3,40,-22.6 90, 90.25,22.6,62.6,150.3,40,-22.6 90,150.25,22.6,62.6,150.3,40,-22.6
  9. J'ai peur que l'on ne se soit pas compris complétement. Je n'aime pas le terme d'arrondies car ce n'est pas le cas, mais imprécision oui, car autocad travaillera toujours avec les coordonnées exactes et pas arrondies. Pour illustrer cette perte de précision Je fais un point dans un dessin proche de 0,0 Sachant qu'autocad stocke au maximum 16 décimale après la virgule j'obtiens ceci: (rtos (cadr (assoc 10 (entget (car (entsel))))) 2 16) "149.9572679451084" pour le X (rtos (caddr (assoc 10 (entget (car (entsel))))) 2 16) "146.4773062445747" pour le Y Je fais un copier avec un point de base à 0,0 Je colle vers les coordonnées d'origine ce même point dans un nouveau dessin. Je le déplace de 0,0 vers 800000,6500000 pour des coordonnées cartographiques. Je refais les interrogations précédentes pour avoir les retours: (rtos (cadr (assoc 10 (entget (car (entsel))))) 2 16) "800149.9572679453" (rtos (caddr (assoc 10 (entget (car (entsel))))) 2 16) "6500146.477306246" Bien que je demande une précision de 16 chiffres, on peut voir qu'il arrive a ne me fournir que 10 chiffre et que l'imprécision se fait à partir de 9 chiffres.Donc quand tu vas procéder à des calculs cette imprécision retourné par (assoc) : rtos n'est la que pour illustrer cette imprécision car la notation scientifique n'influe en rien la précision ni le calcul, tu vas généré aussi des imprécisions, donc 1E-9 en fuzz pour (equal) pourra valider ton point en coordonnées cartographique, alors que dans le premier dessin un (equal) SANS fuzz aurait très bien fonctionné. En données cartographique la mantisse (chiffre avant la virgule) est au détriment de la partie décimales Peut être que quand le calcul se fera sur 128 bits au lieu de 64 bits actuel, ce problème disparaitra ou se reportera sur des coordonnée cosmologique
  10. Pour information je construit souvent des lisp à la volée pour construire ma base AutocadMap, je suis souvent confronté à ce problème d'évaluation de coordonnées. Cela oblige à faire des codes avec des analyses plus poussées, par exemple avec ton problème utiliser la fonction (equal élément1 élément2 fuzz) fuzz étant une tolérance que tu vas appliquer pour tester si ton point appartient à la polyligne. Pour (ssget) faire attention, car toute les options, hormis (ssget "_X") demande à ce que tous les entités soit contenues dans la vue graphique pour bien fonctionner. J'utilise souvent un "._zoom" "_object" dans mes routines pour être sur dur retour d'un (ssget "_W") ou (ssget "_C") par exemple. Cela alourdi considérablement le temps d'exécution mais fiabilise les retours des (ssget). La perte de précision avec les grandes coordonnées reste un problème récurent avec Autocad, il faut faire avec.
  11. Bonjour, Sans avoir testé quoi que que ce soit, je tenterai de remplacer simplement (not (wcmatch (vla-get-Name B) "*|*")) par (not (wcmatch (vla-get-EffectiveName B) "*|*")) à voir si cela suffit
  12. Bonjour,En effet c'est l'inconvénient des coordonnées géo-référencées, (entget) les restitue en coordonnées scientifique, cependant ton nombre est toujours en métrique. Pour t'en assurer tu peux faire un (rtos (cadr code_dxf_10) 2 16), la valeur retournée sera bien métrique. L'utilisation de grande coordonnées fais perdre de la précision dans la partie décimale et malheureusement (ssget) échoue souvent: même des commandes standard comme RACCORD, AJUSTER, CERCLE (option TTR) etc... n'arrivent pas à terme. Il y a eu déjà plusieurs discussions la dessus. Dans les réponses évoquées, déplacer temporairement le dessin près de l'origine pour faire ces opérations. Cela peut être vite fastidieux. Suivant ce que tu veux faire d'autres solutions sont possibles, pour ma part pour un (ssget) j'utilise le mode capture. par exemple: (ssget "_C" (mapcar '- dxf_10 '(0.05 0.05 0.0)) (mapcar '+ dxf_10 '(0.05 0.05 0.0))) Ici c'est une boite de 5 cm pour faire la sélection, mais tu peux agrandir ou rétrécir cette boite suivant le besoin. Cette méthode peut avoir des inconvénients, tu peux récupérer des entités parasite (non voulue) dans ta sélection; dans certain cas... Pour éventuellement fiabilisé une procédure, il faudrait savoir ce que tu veux faire exactement.
  13. Bonjour Azerty D'après ton image j'imaginerais bien ce style de code... En ayant fixé ton point de départ, suivant ou sera positionné ton curseur plusieurs possibilités: Si celui ci a une position en X supérieur à 3 unité par rapport au dernier point mis en place il sera tracéEt ci celui ci se trouve au dessus du segment tracé une déviation de 4% et appliquée, si en dessous il conserve la dernière orientation. Si tu déplace le curseur à gauche du dernier segment tracé, tu l'efface et tu reprend l'orientation du dernier segment en place. (defun c:azerty ( / pt pt_lst l_ang pt_tmp key el lst_pt) (initget 9) (setq pt (getpoint "\nPoint de départ: ")) (setq pt_lst (list pt) l_ang (list 0.0)) (setq pt_tmp (car pt_lst)) (redraw) (princ "\n<Déplacer Curseur> pour définir la trace; <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) (cond ((and (> (distance (cadr key) pt_tmp) 3.0) (>= (caadr key) (car pt_tmp))) (if (> (cadadr key) (cadr pt_tmp)) (setq l_ang (cons (+ (car l_ang) (atan 0.04)) l_ang)) (setq l_ang (cons (car l_ang) l_ang)) ) (setq pt_lst (cons (polar pt_tmp (car l_ang) 3.0) pt_lst)) (setq pt_lst (cons (car pt_lst) pt_lst) pt_tmp (car pt_lst)) (redraw) (grvecs (cdr pt_lst)) ) ((and (> (distance (cadr key) pt_tmp) 3.0) (< (caadr key) (car pt_tmp)) (> (length pt_lst) 3)) (setq pt_lst (cddr pt_lst) l_ang (cdr l_ang) pt_tmp (car pt_lst)) (redraw) (grvecs (cdr pt_lst)) ) ) ) ) ) (if pt_lst (progn (setq el 0) (repeat (length pt_lst) (if (zerop (rem el 2)) (setq lst_pt (cons (nth el pt_lst) lst_pt)) ) (setq el (1+ el)) ) (entmakex (vl-list* (cons 0 "LWPOLYLINE") (cons 100 "AcDbEntity") (cons 100 "AcDbPolyline") (cons 90 (length lst_pt)) (cons 70 0) (mapcar '(lambda (p) (cons 10 p)) (reverse lst_pt)) ) ) ) ) (prin1) )
  14. bonuscad

    Adieu Patrick_35

    C'est le premier membre de CadXp que l'on honore. Ça me fait un coup, inscrit la même année que moi sur le forum, on a beaucoup partagé. Que dire; que cela me donne une certaine nostalgie de ne plus pouvoir échanger avec une telle personne! Merci encore pour ton partage, je t'en suis reconnaissant. Adieu l'ami, repose en paix.
  15. bonuscad

    Liaisons de données

    Avec ton fichier exemple, ceci pourrait être fait. MAIS ce n'est pas une bonne méthode, il vaudrait mieux passer par des attributs ayant des étiquettes pour faire ce que je te propose en exemple Que des textes simples ne seront pas gérable pour effectuer des mise à jours! Donc juste pour montrer que c'est faisable, copie-colle le code directement en ligne de commande dans ton dessin exemple que tu as joins. Refléchis aux attributs je te le conseille, ou alors (puisque tu as map) aux données d'objet. ((lambda ( / ) (setq ent (ssname (ssget "_X" '((0 . "ACAD_TABLE") (8 . "0"))) 0)) (setq l-read (mapcar 'cdr (vl-remove-if '(lambda (x) (/= (car x) 1)) (entget ent)))) (setq js (ssget "_X" '((0 . "TEXT") (8 . "0")))) (setq AcDoc (vla-get-ActiveDocument (vlax-get-acad-object)) Space (if (= 1 (getvar "CVPORT")) (vla-get-PaperSpace AcDoc) (vla-get-ModelSpace AcDoc) ) ) (repeat (setq n (sslength js)) (setq dxf_ent (entget (setq txt (ssname js (setq n (1- n)))))) (cond ((eq (cdr (assoc 1 dxf_ent)) "numero") (setq value (car l-read))) ((eq (cdr (assoc 1 dxf_ent)) "nom") (setq value (cadr l-read))) ((eq (cdr (assoc 1 dxf_ent)) "prenom") (setq value (caddr l-read))) ((eq (cdr (assoc 1 dxf_ent)) "adresse") (setq value (cadddr l-read))) ((eq (cdr (assoc 1 dxf_ent)) "code postale") (setq value (car (cddddr l-read)))) ((eq (cdr (assoc 1 dxf_ent)) "ville") (setq value (cadr (cddddr l-read)))) ((eq (cdr (assoc 1 dxf_ent)) "societe") (setq value (caddr (cddddr l-read)))) (T (setq value nil)) ) (cond (value (entdel txt) (setq nw_obj (vla-addMtext Space (vlax-3d-point (cdr (assoc 10 dxf_ent))) 0.0 value ) ) ) ) ) ))
  16. Comme je n'ai pas ce type d'équipement cela m’exclue (pour le moment) d'un test de ce logiciel. Dommage....
  17. Pour être honnête ce n'est pas de moi, je pense l'avoir pompé ICI Mais ce que je comprends de: (while ( = (vlax-get-property AppHandle 'Status ) 0) (Sleep 1000)) C'est que tant que l'application a le statut d'être lancée la fonction lisp attends 1000 ms (1 seconde) pour ré-éxaminer son statut de façon a pouvoir reprendre la main dès que l'application externe est fermée. Donc je pense qu'avec cette méthode tu devra lancer xnview autant de fois que tu voudras avoir un lien, pas cool... A moins que tu construise une liste d'info dans xnview qui serait transmise à la fin: mais permet-il cela???
  18. bonuscad

    CHANGER POLICE MTEXT

    Bonjour, Si les polices ont étés forcées dans l'éditeur du texte multi-lignes, je te conseille alors d'utiliser StripMtext v5.0.Après il te sera facile d'affecter un style à l'ensemble des MTEXT qui se répercuteras bien sur ceux-ci comme dit précédemment.
  19. Bonjour, Je suis tombé sur cette page parlant d'un logiciel open source nommé Meshroom. Cela a l'air séduisant: Créer un modèle 3D depuis plusieurs photos. Par contre il a l'air coton à utiliser / paramétrer, mais le résultat est bluffant. Des personnes l'ont déjà utilisé? Si oui des retours serait les bienvenus.
  20. En cas d'utilisation de Firefox ET d'addons, cela peut produire cet effet.J'ai déjà observé cela avec µblock et noscript, il faut autoriser certains scripts de la page ou des requêtes et les mémoriser comme paramètres dans l'addon pour les sites qui posent problème. C'est un réglage à faire au moins une fois, après on est plus embêté.
  21. Si tu veux juste le tester, tu peux copier-coller le code directement en ligne de commande et lancer alors la commande Label_Side_Elevation.Après si tu veux le garder copie-colle dans un bloc note et sauvegarde le en fichier xxx.lsp et de ton navigateur tu pourra charger le code en faisant glisser le fichier dans ta fenêtre ouverte d'Autocad.
  22. Bonjour, Regarde ce vieux SUJET avec le code proposé voir s'il fonctionnerait pour toi !
  23. Comme le dit Didier, les champs sont bien indiqués pour cela.Si tu en as beaucoup à faire on peut simplifier l'écriture de ceux-ci en l'automatisant par un lisp. (vl-load-com) (defun c:Label_Side_Color ( / js htx AcDoc Space n obj ename pr pt deriv rtx nw_obj) (princ "\nSélectionnez des lignes/polylignes: ") (setq js (ssget (list '(0 . "LWPOLYLINE,LINE") (cons 67 (if (eq (getvar "CVPORT") 1) 1 0)) (cons 410 (if (eq (getvar "CVPORT") 1) (getvar "CTAB") "Model")) ) ) ) (cond (js (initget 6) (setq htx (getdist (getvar "VIEWCTR") (strcat "\nSpécifiez la hauteur du texte <" (rtos (getvar "TEXTSIZE")) ">: "))) (if htx (setvar "TEXTSIZE" htx)) (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" "Label Color")) (vla-add (vla-get-layers AcDoc) "Label Color") ) ) (repeat (setq n (sslength js)) (setq obj (ssname js (setq n (1- n))) ename (vlax-ename->vla-object obj) pr (* 0.5 (vlax-curve-getEndParam ename)) pt (vlax-curve-GetpointAtParam ename pr) deriv (vlax-curve-getFirstDeriv ename pr) rtx (- (atan (cadr deriv) (car deriv)) (angle '(0 0 0) (getvar "UCSXDIR"))) ) (if (or (> rtx (* pi 0.5)) (< rtx (- (* pi 0.5)))) (setq rtx (+ rtx pi))) (setq nw_obj (vla-addMtext Space (vlax-3d-point (setq pt (polar pt (+ rtx (* pi 0.5)) (getvar "TEXTSIZE")))) 0.0 (strcat "{\\fArial|b0|i0|c0|p34;" "%<\\AcObjProp Object(%<\\_ObjId " (itoa (vla-get-ObjectID (vlax-ename->vla-object obj))) ">%).TrueColor>%" ) ) ) (mapcar '(lambda (pr val) (vlax-put nw_obj pr val) ) (list 'AttachmentPoint 'Height 'DrawingDirection 'InsertionPoint 'StyleName 'Layer 'Rotation 'BackgroundFill) (list 5 (getvar "TEXTSIZE") 5 pt "Standard" "Label Color" rtx 0) ) ) ) ) (prin1) )
  24. Pour Patrice, Essayes ceci, voir si ça convient. Après quelques tests cela semble bon mais je n'ai peut être pas vu tous les cas de figure... (vl-load-com) (defun add_vtx (obj add_pt ent_name / bulg) (vla-addVertex obj (1+ (fix add_pt)) (vlax-make-variant (vlax-safearray-fill (vlax-make-safearray vlax-vbdouble (cons 0 1)) (list (car (trans (vlax-curve-getpointatparam obj add_pt) 0 ent_name)) (cadr (trans (vlax-curve-getpointatparam obj add_pt) 0 ent_name)) ) ) ) ) (setq bulg (vla-GetBulge obj (fix add_pt))) (vla-SetBulge obj (fix add_pt) (/ (sin (/ (* 4 (atan bulg) (- add_pt (fix add_pt))) 4)) (cos (/ (* 4 (atan bulg) (- add_pt (fix add_pt))) 4)) ) ) (vla-SetBulge obj (1+ (fix add_pt)) (/ (sin (/ (* 4 (atan bulg) (- (1+ (fix add_pt)) add_pt)) 4)) (cos (/ (* 4 (atan bulg) (- (1+ (fix add_pt)) add_pt)) 4)) ) ) (vla-update obj) ) (defun c:break_lw@pt_withOD ( / js typ_ent js_b i ent obj nb tmp_name pt lst_pt dxf_obj xd_l dxf_43 dxf_38 dxf_39 dxf_10 dxf_40 dxf_41 dxf_42 dxf_39 dxf_210 tmp_sort lst_pt_sort n_vtx l nwent tbldef lst_data) (princ "\nSélection des LWPOLYLINE à couper") (while (not (setq js (ssget (list (cons 0 "LWPOLYLINE") (cons 67 (if (eq (getvar "CVPORT") 2) 0 1)) (cons 410 (if (eq (getvar "CVPORT") 2) "Model" (getvar "CTAB"))) ) ) ) ) ) (initget "POINT CERCLE INSERTION _POINT CIRCLE INSERT") (setq typ_ent (getkword "\nCouper avec [POINT/CERCLE/INSERTION]? <POINT>: ")) (if (not typ_ent) (setq typ_ent "POINT")) (princ (strcat "\nSélection des " typ_ent " situés sur les polylignes")) (while (not (setq js_b (ssget (list (cons 0 typ_ent) (cons 67 (if (eq (getvar "CVPORT") 2) 0 1)) (cons 410 (if (eq (getvar "CVPORT") 2) "Model" (getvar "CTAB"))) ) ) ) ) ) (cond ((and js js_B) (repeat (setq i (sslength js)) (setq ent (ssname js (setq i (1- i))) obj (vlax-ename->vla-object ent) lst_pt nil ) (repeat (setq nb (sslength js_B)) (setq tmp_name (ssname js_b (setq nb (1- nb)))) (cond (tmp_name (setq pt (cdr (assoc 10 (entget tmp_name)))) (if (and (equal (distance pt (vlax-curve-getClosestPointTo obj pt)) 0.0 1E-8) (not (equal (distance pt (vlax-curve-getStartPoint obj)) 0.0 1E-8)) (not (equal (distance pt (vlax-curve-getEndPoint obj)) 0.0 1E-8)) ) (setq lst_pt (cons pt lst_pt)) ) ) ) ) (setq dxf_10 (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 10)) (entget ent)))) (cond ((and lst_pt (listp lst_pt)) (foreach el lst_pt (if (not (member T (mapcar '(lambda (x) (equal (list (car el) (cadr el)) x 1E-8)) dxf_10))) (add_vtx obj (vlax-curve-getparamatpoint obj (vlax-curve-getClosestPointTo obj el)) ent) ) ) (setq dxf_obj (entget ent (list "*")) xd_l (assoc -3 dxf_obj) ) (if (cdr (assoc 43 dxf_obj)) (setq dxf_43 (cdr (assoc 43 dxf_obj))) (setq dxf_43 0.0) ) (if (cdr (assoc 38 dxf_obj)) (setq dxf_38 (cdr (assoc 38 dxf_obj))) (setq dxf_38 0.0) ) (if (cdr (assoc 39 dxf_obj)) (setq dxf_39 (cdr (assoc 39 dxf_obj))) (setq dxf_39 0.0) ) (setq dxf_10 (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 10)) dxf_obj)) dxf_40 (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 40)) dxf_obj)) dxf_41 (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 41)) dxf_obj)) dxf_42 (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 42)) dxf_obj)) dxf_210 (cdr (assoc 210 dxf_obj)) ) (if (not (zerop (boole 1 (cdr (assoc 70 dxf_obj)) 1))) (setq dxf_10 (append dxf_10 (list (car dxf_10))) dxf_40 (append dxf_40 (list (car dxf_40))) dxf_41 (append dxf_41 (list (car dxf_41))) dxf_42 (append dxf_42 (list (car dxf_42))) ) ) (setq lst_pt (mapcar '(lambda (x) (list (car (trans x 0 ent)) (cadr (trans x 0 ent)))) lst_pt) tmp_sort (mapcar '(lambda (x) (vlax-curve-getDistAtPoint obj x)) lst_pt) lst_pt_sort nil ) (foreach j (vl-sort tmp_sort '<) (setq lst_pt_sort (cons (nth (vl-position j tmp_sort) lst_pt) lst_pt_sort))) (setq lst_pt (reverse lst_pt_sort)) (repeat (length lst_pt) (setq n_vtx -1 l nil) (cond ((vl-position T (mapcar '(lambda (x) (equal x (car lst_pt) 1E-8)) dxf_10)) (entmake (append (list (cons 0 "LWPOLYLINE") (cons 100 "AcDbEntity") (assoc 67 dxf_obj) (assoc 410 dxf_obj) (assoc 8 dxf_obj) (if (assoc 62 dxf_obj) (assoc 62 dxf_obj) (cons 62 256)) (if (assoc 6 dxf_obj) (assoc 6 dxf_obj) (cons 6 "BYLAYER")) (if (assoc 370 dxf_obj) (assoc 370 dxf_obj) (cons 370 -1)) (cons 100 "AcDbPolyline") (cons 90 (1+ (vl-position T (mapcar '(lambda (x) (equal x (car lst_pt) 1E-8)) dxf_10)))) (cons 70 (boole 1 (cdr (assoc 70 dxf_obj)) 128)) (cons 38 dxf_38) (cons 39 dxf_39) ) (reverse (repeat (1+ (vl-position T (mapcar '(lambda (x) (equal x (car lst_pt) 1E-8)) dxf_10))) (setq l (append (list (cons 42 (nth (1+ n_vtx) dxf_42)) (cons 41 (nth (1+ n_vtx) dxf_41)) (cons 40 (nth (1+ n_vtx) dxf_40)) (cons 10 (nth (setq n_vtx (1+ n_vtx)) dxf_10)) ) l ) ) ) ) (list (assoc 210 dxf_obj)) (if xd_l (list xd_l) '()) ) ) (repeat n_vtx (setq dxf_10 (cdr dxf_10) dxf_40 (cdr dxf_40) dxf_41 (cdr dxf_41) dxf_42 (cdr dxf_42)) ) (setq lst_pt (cdr lst_pt) lst_data nil nwent (entlast)) (if (or (numberp (vl-string-search "Map 3D" (vla-get-caption (vlax-get-acad-object)))) (numberp (vl-string-search "Civil 3D" (vla-get-caption (vlax-get-acad-object)))) ) (progn (foreach n (ade_odgettables ent) (setq tbldef (ade_odtabledefn n)) (setq lst_data (cons (mapcar '(lambda (fld / tmp_rec numrec) (setq numrec (ade_odrecordqty ent n)) (cons n (while (not (zerop numrec)) (setq numrec (1- numrec)) (if (zerop numrec) (if tmp_rec (cons fld (list (cons (ade_odgetfield ent n fld numrec) tmp_rec))) (cons fld (ade_odgetfield ent n fld numrec)) ) (setq tmp_rec (cons (ade_odgetfield ent n fld numrec) tmp_rec)) ) ) ) ) (mapcar 'cdar (cdaddr tbldef)) ) lst_data ) ) ) (cond (lst_data (mapcar '(lambda (x / ct) (while (< (ade_odrecordqty nwent (caar x)) (ade_odrecordqty ent (caar x))) (ade_odaddrecord nwent (caar x)) ) (foreach el (mapcar 'cdr x) (if (listp (cdr el)) (progn (setq ct -1) (mapcar '(lambda (y / ) (ade_odsetfield nwent (caar x) (car el) (setq ct (1+ ct)) y) ) (cadr el) ) ) (ade_odsetfield nwent (caar x) (car el) 0 (cdr el)) ) ) ) lst_data ) ) ) ) ) ) (T (print "pas membre")(setq lst_pt (cdr lst_pt) lst_data nil)) ) ) (setq n_vtx -1 l nil) (entmake (append (list (cons 0 "LWPOLYLINE") (cons 100 "AcDbEntity") (assoc 67 dxf_obj) (assoc 410 dxf_obj) (assoc 8 dxf_obj) (if (assoc 62 dxf_obj) (assoc 62 dxf_obj) (cons 62 256)) (if (assoc 6 dxf_obj) (assoc 6 dxf_obj) (cons 6 "BYLAYER")) (if (assoc 370 dxf_obj) (assoc 370 dxf_obj) (cons 370 -1)) (cons 100 "AcDbPolyline") (cons 90 (length dxf_10)) (cons 70 (boole 1 (cdr (assoc 70 dxf_obj)) 128)) (cons 38 dxf_38) (cons 39 dxf_39) ) (reverse (repeat (length dxf_10) (setq l (append (list (cons 42 (nth (1+ n_vtx) dxf_42)) (cons 41 (nth (1+ n_vtx) dxf_41)) (cons 40 (nth (1+ n_vtx) dxf_40)) (cons 10 (nth (setq n_vtx (1+ n_vtx)) dxf_10)) ) l ) ) ) ) (list (assoc 210 dxf_obj)) (if xd_l (list xd_l) '()) ) ) (setq lst_data nil nwent (entlast)) (if (or (numberp (vl-string-search "Map 3D" (vla-get-caption (vlax-get-acad-object)))) (numberp (vl-string-search "Civil 3D" (vla-get-caption (vlax-get-acad-object)))) ) (progn (foreach n (ade_odgettables ent) (setq tbldef (ade_odtabledefn n)) (setq lst_data (cons (mapcar '(lambda (fld / tmp_rec numrec) (setq numrec (ade_odrecordqty ent n)) (cons n (while (not (zerop numrec)) (setq numrec (1- numrec)) (if (zerop numrec) (if tmp_rec (cons fld (list (cons (ade_odgetfield ent n fld numrec) tmp_rec))) (cons fld (ade_odgetfield ent n fld numrec)) ) (setq tmp_rec (cons (ade_odgetfield ent n fld numrec) tmp_rec)) ) ) ) ) (mapcar 'cdar (cdaddr tbldef)) ) lst_data ) ) ) (cond (lst_data (mapcar '(lambda (x / ct) (while (< (ade_odrecordqty nwent (caar x)) (ade_odrecordqty ent (caar x))) (ade_odaddrecord nwent (caar x)) ) (foreach el (mapcar 'cdr x) (if (listp (cdr el)) (progn (setq ct -1) (mapcar '(lambda (y / ) (ade_odsetfield nwent (caar x) (car el) (setq ct (1+ ct)) y) ) (cadr el) ) ) (ade_odsetfield nwent (caar x) (car el) 0 (cdr el)) ) ) ) lst_data ) ) ) ) ) (entdel ent) ) ) ) (print (sslength js)) (princ " LWpolyligne(s) coupée(s) aux points avec ses Object Datas.") ) ) (prin1) )
  25. J'ai fais un assemblage rapide de 2 routines que j'avais.Cela semblerait répondre à la demande des couleurs (enfin presque), à essayer...Commande MHATCH (defun ACI2RGB (n / l1 l3) (cond ( (or(> n 255)(< n 1))nil) ( (> 7 n 0)(aci2rgb(+ 10(* 40(1- n))))) ( (> 250 n 9) (setq l1 '(0 1 2 3 4 4 4 4 4 4 4 4 4 3 2 1 0 0 0 0 0 0 0 0) ) (setq l3 '(1 0.8 0.6 0.5 0.3)) (mapcar '(lambda(v w / ) (fix (* 255 (+ (* 0.25 (nth(rem(+(1-(/ n 10))v)24)l1) (nth(/(rem n 10)2)l3) ) (* (rem n 2) 0.125 (nth(rem(+(1-(/ n 10))w)24)l1) (nth(/(rem n 10)2)l3) ) ) ) ) ) '(8 0 16) '(20 12 4) ) ) (1 (apply '(lambda(v w / )(list w w w)) (assoc n '((7 255)(8 128)(9 192)(250 51)(251 91)(252 132) (253 173)(254 214)(255 255))) ) ) ) ) (defun randnum (/ modulus multiplier increment random);retourne valeur entre 0 et 1 (if (not seed) (setq seed (getvar "DATE")) ) (setq modulus 65536 multiplier 25173 increment 13849 seed (rem (+ (* multiplier seed) increment) modulus) random (/ seed modulus) ) ) (defun getrandnum (minNum maxNum / tmp);fourchette du nombre aleatoire (if (not (< minNum maxNum)) (progn (setq tmp minNum minNum maxNum maxNum tmp ) ) ) (setq random (+ (* (randnum) (- maxNum minNum)) minNum)) ) (defun c:mhatch (/ cmdecho mod_hatch ang_hatch esp_hatch dbl_hatch ss i ss1 n obj ncol oColor RGBcolor pt) (setq cmdecho (getvar "CMDECHO")) (setvar "CMDECHO" 0) (command "_.UNDO" "_Group") (initget "Solide Utilisateur Courant _Solid User Current") (setq mod_hatch (getkword (strcat "\nUtiliser le motif [solide/Utilisateur/Courant]? <" (getvar "HPNAME") ">: "))) (cond ((eq mod_hatch "Solid") (setvar "HPNAME" "_SOLID")) ((eq mod_hatch "User") (setvar "HPNAME" "_USER")) ) (if (and (/= (getvar "HPNAME") "_SOLID") (/= (getvar "HPNAME") "SOLID")) (if (or (wcmatch (getvar "hpname") "_U*") (wcmatch (getvar "hpname") "U*")) (progn (setq ang_hatch (getangle (strcat "\nSpécifiez l'angle des lignes de hachures <" (angtos (getvar "HPANG")) ">: "))) (if ang_hatch (setvar "HPANG" ang_hatch)) (initget 6) (setq esp_hatch (getdist (strcat "\nSpécifiez l'espacement entre les lignes <" (rtos (getvar "HPSPACE")) ">: "))) (if esp_hatch (setvar "HPSPACE" esp_hatch)) (initget "Oui Non _Yes No") (setq dbl_hatch (getkword (strcat "\nDouble hachures? [Oui/Non] <" (if (zerop (getvar "HPDOUBLE")) "N" "O") ">: "))) (cond ((eq dbl_hatch "Yes") (setvar "HPDOUBLE" 1)) ((eq dbl_hatch "No") (setvar "HPDOUBLE" 0))) ) (progn (initget 6) (setq esp_hatch (getdist (strcat "\nSpécifiez l'échelle du modèle <" (rtos (getvar "HPSCALE")) ">: "))) (if esp_hatch (setvar "HPSCALE" esp_hatch)) (setq ang_hatch (getangle (strcat "\nSpécifiez l'angle du modèle <" (angtos (getvar "HPANG")) ">: "))) (if ang_hatch (setvar "HPANG" ang_hatch)) ) ) ) (princ "\nChoisir des objet ou <Entrée> pour point interne.") (setq ss (ssget '((-4 . "<OR") (-4 . "<AND") (0 . "POLYLINE") (-4 . "<AND") (-4 . "&") (70 . 1) (-4 . "<NOT") (-4 . "&") (70 . 16) (-4 . "NOT>") (-4 . "AND>") (-4 . "AND>") (-4 . "<AND") (0 . "LWPOLYLINE") (-4 . "<AND") (-4 . "&") (70 . 1) (-4 . "AND>") (-4 . "AND>") (-4 . "<AND") (0 . "MLINE") (-4 . "<AND") (-4 . "=") (71 . 3) (-4 . "AND>") (-4 . "AND>") (-4 . "<AND") (0 . "CIRCLE") (-4 . "AND>") (-4 . "<AND") (0 . "3DFACE") (-4 . "AND>") (-4 . "<AND") (0 . "ELLIPSE") (-4 . "<AND") (-4 . "=") (41 . 0) (-4 . "=") (42 . 6.283185307179586) (-4 . "AND>") (-4 . "AND>") (-4 . "<AND") (0 . "SPLINE") (-4 . "<AND") (-4 . "&") (70 . 1) (-4 . "AND>") (-4 . "AND>") (-4 . "<AND") (0 . "REGION") (-4 . "AND>") (-4 . "OR>")) ) i -1 ss1 (ssadd) ) (cond (ss (repeat (sslength ss) (command "_.-bhatch" "_select" (ssname ss (setq i (1+ i))) "" "") (ssadd (entlast) ss1) ) ) (T (while (setq pt (getpoint "\nSpécifiez un point interne: ")) (command "_.-bhatch" pt "") (ssadd (entlast) ss1) ) ) ) (cond (ss1 (repeat (setq n (sslength ss1)) (setq obj (vlax-ename->vla-object (ssname ss1 (setq n (1- n))))) (while (not (eq (rem (setq ncol (fix (getrandnum 11 241))) 10) 1))) (setq oColor (vlax-get-property obj 'TrueColor) RGBcolor (ACI2RGB ncol) ) (vlax-invoke-method oColor 'SetRGB (car RGBcolor) (cadr RGBcolor) (caddr RGBcolor)) (vla-put-TrueColor obj oColor) ) (command "_.draworder" ss1 "" "_back") ) ) (if (not (zerop (sslength ss1))) (command "_.draworder" ss1 "" "_back")) (command "_.UNDO" "_End") (setvar "CMDECHO" cmdecho) (princ) )
×
×
  • 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é