Aller au contenu

Olivier Eckmann

Membres
  • Compteur de contenus

    2 360
  • Inscription

  • Dernière visite

  • Jours gagnés

    120

Tout ce qui a été posté par Olivier Eckmann

  1. Bonjour, peut-être ICI Olivier
  2. Salut, pour le MNT moyen, ce n'est pas parfait, mais tu dois pouvoir t'en sortir avec cette solution: 1. MNT diiférentiel 2. Courbe de niveau sur ce MNT différentiel + contour 3. Convertir en bloc le contour et les CN 4. Echelle Z = 0.5 5. Décomposer le bloc 6. Recréer un MNT à partir du contour et des CN 7. MNT différentiel : MNT1 (ou MNT2) + Nouveau MNT diff moyenné. Olivier
  3. Bonjour, ci-joint une solution pour "écrêter un MNT" avec l'assistant multi-plate forme : ICI Olivier
  4. Bonjour, Il n'y a aucun mal à citer d'autres noms de logiciels et de dire que ZWCad dispose d'applicatif dédié à la topo. Par contre dire textuellement comme ça a été écrit que RD12 c'est l'équivalent de Covadis en moins cher, c'est un MENSONGE!!! Je vous défie de faire ce que TOUT ce que fait COVADIS avec un RD12 sur un ZWCad. Olivier
  5. Salut gégé, La comparaison ne portait pas sur AutoCAD, mais sur RD12 par rapport à Covadis. Et je rejoins Thierry, de loin et de dos, on peut essayer de faire croire que c'est la même chose, mais c'est comme dire qu'une Clio c'est comme une Ferrari. Oui ceux sont 2 voitures qui ont 4 roues et un volant, Après la comparaison s'arrête car on ne joue pas dans la même catégorie. Olivier
  6. Bonjour, J'aurais mis la bascule du VISRETAIN autour de la ligne (command...) car si tu fais Echap quand on te demande de sélectionner ton XREF, ton VISRETAIN est déjà mis à 0 et ne sera pas remis à 1. Sinon, tu associes ton xref dans un dessin vierge, tu crées et tu exportes ton état de calque et tu le restaures dans ton dessin d'origine. Olivier
  7. Bonjour, quand on parle de ECW et JP2000 il y a souvent le géoréférencement qui est inclus dans l'image. Je ne suis pas sûr que les outils type GIMP ou PHOTOSHOP soit capable de conserver/exploiter ces données. Personnellement j'utilise ERDAS Viewer (ex Ermapper, racheté par Leica/hexagon) qui permet de visualiser des images de tailles quasi illimitée (plusieurs dizaines de Go) et qui permet de découper des portions et d'enregistrer en JPG tout en générant le JGW de géoref. Cet outil date un peu mais fonctionne bien. Olivier
  8. Merci à tous pour vos idées. . Concernant le jeu de feuille, je n'ai pas trouvé pour lancer en différé. L'outil de tracé en différé, ça aurait été pile ce qu'il fallait, mais effectivement ça n'existe plus. Finalement, je vais me pencher sur la solution des PLT de dinosor avec une tâche planifiée qui envoie les PLT sur mon traceur dans une bonne vieille commande CMD. Ca devrait faire l'affaire. A moins qu'à l'ocasse je me repenche sur le dev d'un outil de tracé en différé ré-écrit avec la CoreConsole. Olivier
  9. Bonjour, Je dois tracer une cinquantaine de planche A1. Le tracé d'une seule planche prend environ 20 minutes entre le clic sur le bouton Tracé (ou publier) et la sortie sur le traceur. Ce temps est normal, car j'ai un image (ortho photo) de 2Go et un DWG détaillé (30 Mo) superposé. Ca me trace environ 3 à 4 planches par heure, je souhaitais donc tracer la nuit pour ne pas bloquer le traceur dans la journée. La question : est-ce que l'on peut préparer la publication, puis cliquer sur le bouton publier et lui dire d'attendre 21h pour lancer le tracé au lieu de le lancer immédiatement? AutoCAD reste ouvert bien sûr et ne fait rien d'autre en attendant l'heure du début du tracé. J'aurais pu créer un PDF, puis une tâche planifié pour lancer le PDF sur le traceur, mais je souhaite vraiment tracer depuis AutoCAD et pas depuis un PDF. Merci pour toute idée. Olivier
  10. Bonjour, l'extraction de données devrait aussi donner satisfaction en ne sélectionnant que la propriété calque, avec export en tableau ou en fichier externe. Olivier
  11. Bonjour, Avant de penser à l'automatiser par programmation, est-ce que tu sais le faire manuellement avec les commandes AutoCAD, car si c'est impossible à la main, ce sera presque surement impossible même avec de la programmation. Une petite image ou DWG de ce que tu veux obtenir permettra de mieux cerner le problème. Olivier
  12. Bonjour, juste une précision pour les palettes, tu peux directement glisser un DWG depuis l'explorateur Windows dans ta palette, pas besoin de l'insérer dans un autre DWG (bibliothèque). Olivier
  13. Bonjour, si tu stockes le nom et dossier de ton dessin en cours : variable DWGPREFIX et DWGNAME puis que tu fais un _SAVEAS suivi d'un vl-file-delete de ton fichier antérieur. Olivier
  14. Hello Le Crabe, Tu ne travaillerais pas chez Apple par hasard? Olivier
  15. Olivier Eckmann

    somme des débits

    Bonsoir, autre possibilité, on peut "reconstruire" l'arborescence du réseau avec une propriété sur chaque polyligne. J'ai utilisé l'épaisseur car en 2D ça ne sert à rien et en 3D ça peut servir de contrôle sur la structure de ton réseau avec la visu 3D de l'épaisseur progressive au fur et à mesure que tu "descend" ton réseau.. Le principe est d'affecter une épaisseur correspondant au niveau de ta branche : 1 pour le niveau amont et 2, 3... pour les niveaux d'imbrication suivant en descendant vers l'aval. ICI la vidéo expliquant la mise en œuvre Comme je l'ai simulé sur la vidéo, l'ajout d'une nouvelle branche sur une branche déjà existante est possible à condition de couper la poly à la nouvelle jonction et d'affecter une épaisseur intermédiaire avec la branche suivante. Partant du code proposé précédemment, je l'ai modifié pour sélectionner en une fois les polylignes et les blocs à traiter après avoir remis l'attribut T à 0 sur tous les blocs. (defun C:SomDebit ( / JEU I J lsBloc oEnt lsPoly PT oPoly lsVtx Vtx sHndProche sHnd dDist dDistMin dDistMaxRecherche iTotal iDebit) (setq dDistMaxRecherche 0.01) ; sélection des blocs et polylignes (if (setq JEU (ssget (list (cons 0 "INSERT,LWPOLYLINE")))) (progn (setq I 0) ; création de la liste des paires pointées (Handle . Point) pour les blocs ; et (Epaisseur . Handle) pour les polylignes (repeat (sslength JEU) (setq oEnt (ssname JEU I)) (setq I (1+ I)) ; si c'est un bloc (if (= "INSERT" (cdr (assoc 0 (entget oEnt)))) (progn (setq PT (cdr (assoc 10 (entget oEnt)))) (setq lsBloc (append lsBloc (list (cons (cdr (assoc 5 (entget oEnt))) (list (list (car PT) (cadr PT) 0.0)) ) ) ) ) ) ; SI c'est un polyligne (setq lsPoly (append lsPoly (list (cons (cdr (assoc 39 (entget oEnt))) (cdr (assoc 5 (entget oEnt))) ) ) ) ) ) ) ; tri de la liste des polyligne par épaisseure croissante (if lsPoly (setq lsPoly (vl-sort lsPoly (function (lambda (e1 e2) (< (car e1) (car e2)))))) ) ; Boucle sur la liste des polylignes (setq K 0) (repeat (length lsPoly) (setq oPoly (handent (cdr (nth K lsPoly)))) (setq K (1+ K)) (setq lsVtx (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 10)) (entget oPoly)))) (setq I 0) (setq iTotal 0) ; boucle sur les Sommets (repeat (length lsVtx) (setq Vtx (nth I lsVtx)) (setq I (1+ I)) (setq Vtx (list (car Vtx) (cadr Vtx) 0.0)) (setq sHndProche nil) (setq dDistMin 1000000.0) ; boucle sur la liste des blocs pour trouver celui superposé au sommet (setq J 0) (while (and (< J (length lsBloc)) (>= dDistMin 0.00001) ;dDistMaxRecherche) ) (setq sHnd (car (nth J lsBloc))) (setq PT (cadr (nth J lsBloc))) (setq J (1+ J)) (setq dDist (distance PT Vtx)) (if (< dDist dDistMin) (setq dDistMin dDist sHndProche sHnd) ) ) ; vérifie si la distance mini trouvée est bien inférieure à la distance maxi de recherche (if (> dDistMin dDistMaxRecherche) (setq sHndProche nil) ) ; teste si bloc trouvé (if (not sHndProche) ; si bloc non trouvé ALORS dessine un cercle rouge calque 0 (entmake (list (cons 0 "CIRCLE") (cons 8 "0") (cons 62 1) (cons 10 Vtx) (cons 40 0.5) ) ) ; si bloc trouvé ALORS met à jour l'attribut T avec Q pour 1er bloc sinon Q+T précédent (progn (setq iDebit (atoi (Vb-Val-att (handent sHndProche) "Q"))) (setq iTotalCourant (atoi (Vb-Val-att (handent sHndProche) "T"))) (if (= iTotalCourant 0) (setq iTotal (+ iTotal iDebit)) (setq iTotal (+ iTotal iTotalCourant)) ) (Vb-Mod-att (handent sHndProche) "T" (itoa iTotal)) ) ) ) ) ) ) ) ;; ;; fonctions ;; ;; Vb-Val-att fonction Vlisp pour lire la valeur d'un attribut (defun Vb-Val-att (ent nomatt / att val); ent correspond au handel du bloc (codedxf 5) à utiliser comme ça (setq toto (read (Vb-Val-att (handent handle) "REF"))) (foreach att (vlax-invoke (vlax-ename->vla-object ent) 'getattributes) (and (eq (vla-get-tagstring att) nomatt) ;comme ils disent les fou du code "tournure élégante !" (setq val (vla-get-textstring att)) ; le ET est équivalent à un si dans ce cas là ) ;car on afffecte Val que si att= nom-att bravo Patrick_35 ) val ;; retour de fonction ) ;; fin Vb-Val-att ;; Vb-Mod-att fonction Vlisp pour modifier la valeur d'un attribut ;; à utiliser comme ça (Vb-Mod-att (handent handle) "NIV" new-val) ;; new-val est une string (defun Vb-Mod-att (ent nom-att nval / att inc vblst-att) (setq inc 0 vblst-att (vlax-invoke (vlax-ename->vla-object ent) 'getattributes) ) (while (< inc (length vblst-att)) (if (eq (vla-get-tagstring (nth inc vblst-att)) nom-att) (vla-put-textstring (nth inc vblst-att) nval) ) (setq inc (+ 1 inc)) ) ) ; ; fin Vb-Mod-att Olivier
  16. Olivier Eckmann

    somme des débits

    Bonsoir, Si ça doit être dynamique on peut envisager de faire faire les sommes à AutoCAD à l'aide des champs. Video expliquant la possibilité : ICI Ensuite on pourrait envisager un Lisp qui automatise la construction des relations Olivier
  17. Olivier Eckmann

    somme des débits

    Bonjour, Pour les jonctions, je comprends que ce soit perturbant que ça fonctionne tout seul, mais oui ça marche. Je joins un schéma qui sera plus compréhensible qu'un long discours. ICI L'appellation TC correspond au total en cours à chaque sommet pour la polyligne en cours de traitement. Olivier
  18. Olivier Eckmann

    somme des débits

    Bonjour, Pour le multi branche, quand je rencontre un bloc, si le total est à 0, c'est que son débit n'a jamais encore été utilisé, donc j'ajoute son débit au total en cours sur la poly, par contre si le T n'est pas nul (c'est un bloc de jonction), c'est que le débit a déjà été ajouté par une autre branche, donc j'ajoute le T du bloc au total en cours sur la branche pour le mettre à jour. C'est pour ça que comme je le disais précédemment, il faut que tous les T soit = 0 au début et que tu traites branche par branche dans le sens "descendant/cumulatif" des tes jonctions. En relisant rapidement, il me semble la variable dDistMin ne sert à rien, mais ça ne devrait pas géner le fonctionnement. Par contre il n'y a pas de contrôle sur le fait qu'on puisse sélectionner des blocs autres que ceux à cumuler au début. On pourrait ajouter un test pour être sûr que chaque bloc ajouté à la liste initiale dispose bien des attributs T et Q. Olivier
  19. Olivier Eckmann

    somme des débits

    Bonjour, ci-joint une version du programme qui cumule les débits y compris sur réseau ramifié. (defun C:SomDebit ( / JEU I J lsBloc oBloc PT oPoly lsVtx Vtx sHndProche sHnd dDist dDistMin dDistMaxRecherche iTotal iDebit) (setq dDistMaxRecherche 0.01) ; sélection des blocs avec attribut (if (setq JEU (ssget (list (cons 0 "INSERT") (cons 66 1)))) (progn (setq I 0) ; création de la liste des paires pointées (Handle . Point) (repeat (sslength JEU) (setq oBloc (ssname JEU I)) (setq I (1+ I)) (setq PT (cdr (assoc 10 (entget oBloc)))) (setq lsBloc (append lsBloc (list (cons (cdr (assoc 5 (entget oBloc))) (list (list (car PT) (cadr PT) 0.0)) ) ) ) ) ) ; sélection de la polyligne (while (and (setq oPoly (car (entsel "\nSélectionner la polyligne : "))) (= "LWPOLYLINE" (cdr (assoc 0 (entget oPoly)))) ) (setq lsVtx (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 10)) (entget oPoly)))) (setq I 0) (setq iTotal 0) ; boucle sur les Sommets (repeat (length lsVtx) (setq Vtx (nth I lsVtx)) (setq I (1+ I)) (setq Vtx (list (car Vtx) (cadr Vtx) 0.0)) (setq sHndProche nil) (setq dDistMin 1000000.0) ; boucle sur la liste des blocs pour trouver celui superposé au sommet (setq J 0) (while (and (< J (length lsBloc)) (>= dDistMin dDistMaxRecherche) ) (setq sHnd (car (nth J lsBloc))) (setq PT (cadr (nth J lsBloc))) (setq J (1+ J)) (setq dDist (distance PT Vtx)) (if (and (< dDist dDistMin) (< dDist dDistMaxRecherche) ) (setq dDistMin dDist sHndProche sHnd) ) ) ; teste si bloc trouvé (if (not sHndProche) ; si bloc non trouvé ALORS dessine un cercle rouge calque 0 (entmake (list (cons 0 "CIRCLE") (cons 8 "0") (cons 62 1) (cons 10 Vtx) (cons 40 0.5) ) ) ; si bloc trouvé ALORS met à jour l'attribut T avec Q pour 1er bloc sinon Q+T précédent (progn (setq iDebit (atoi (Vb-Val-att (handent sHndProche) "Q"))) (setq iTotalCourant (atoi (Vb-Val-att (handent sHndProche) "T"))) (if (= iTotalCourant 0) (setq iTotal (+ iTotal iDebit)) (setq iTotal (+ iTotal iTotalCourant)) ) (Vb-Mod-att (handent sHndProche) "T" (itoa iTotal)) ) ) ) ) ) ) ) ;; ;; fonctions ;; ;; Vb-Val-att fonction Vlisp pour lire la valeur d'un attribut (defun Vb-Val-att (ent nomatt / att val); ent correspond au handel du bloc (codedxf 5) à utiliser comme ça (setq toto (read (Vb-Val-att (handent handle) "REF"))) (foreach att (vlax-invoke (vlax-ename->vla-object ent) 'getattributes) (and (eq (vla-get-tagstring att) nomatt) ;comme ils disent les fou du code "tournure élégante !" (setq val (vla-get-textstring att)) ; le ET est équivalent à un si dans ce cas là ) ;car on afffecte Val que si att= nom-att bravo Patrick_35 ) val ;; retour de fonction ) ;; fin Vb-Val-att ;; Vb-Mod-att fonction Vlisp pour modifier la valeur d'un attribut ;; à utiliser comme ça (Vb-Mod-att (handent handle) "NIV" new-val) ;; new-val est une string (defun Vb-Mod-att (ent nom-att nval / att inc vblst-att) (setq inc 0 vblst-att (vlax-invoke (vlax-ename->vla-object ent) 'getattributes) ) (while (< inc (length vblst-att)) (if (eq (vla-get-tagstring (nth inc vblst-att)) nom-att) (vla-put-textstring (nth inc vblst-att) nval) ) (setq inc (+ 1 inc)) ) ) ; ; fin Vb-Mod-att Je joins un screencast de la procédure : il faut au départ que tous les attributs T soient sur 0 , puis il faut cliquer chaque branche de l'amont vers l'aval. Olivier
  20. Bonjour, Un fichier ARG correspond à l'export du profil courant (export du morceau de base de registre correspondant). Ce profil contient presque tous les paramétrages se trouvant dans les options, plus d'autres éléments, tel que la position des cases de dialogue, le CUIX principal et les CUIX complémentaires, ainsi que l'espace de travail courant et quelques autres petites choses On peut aller voir la base de registre sous la clé "Ordinateur\HKEY_CURRENT_USER\Software\Autodesk\AutoCAD\R22.0\ACAD-1000:40C\Profiles" Attention le nom du fichier ARG ne correspond pas forcément au nom du profil. De plus si le nom du profil existe déjà, il sera utilisé tel quel et pas rechargé depuis le fichier ARG, même si on spécifié un nom de fichier ARG dans le commutateur /P Le CUIX contient toutes les sources de l'environnement : toutes les menus déroulant, les barres d'outils, les ruban, les icones, les actions sur double-clic, les boutons de la souris... ainsi que les espaces de travail qui ne sont que les "photos" de la disposition et visibilité de ces ressources. Enfin, le fichier AWS contient les positions / tailles / visibilité de chacune des palettes : propriété, palette d'outils, DesignCenter, xref... Olivier
  21. Olivier Eckmann

    somme des débits

    Bonjour, Si tu n'as pas trop de bloc (quelques centaines) pour chaque sommet de polyligne, tu peux calculer la distance entre ce sommet et chacun des blocs. Quand la distance = 0 c'est bon. Attention la fonction Distance calcule en X Y et Z, donc si tes blocs n'ont pas le même Z que ta poly, la distance ne sera pas nulle. Par sécurité, il faut programmer une fonction de distance 2D. Pour le parcours des blocs, soit tu parcours directement le jeu de sélection et tu extrais le code 10 à chaque fois, soit tu crées une liste de paire pointée Handle / Coordonnées en parcourant 1 fois tes blocs au début. (cons (cdr (assoc 5 (entget oBloc))) (cdr (assoc 10 (entget oBloc)))) Tu parcours la liste pour calculer tes distances et quand c'est 0 tu retrouves ton bloc à partir du handle via la fonction (handent ) Pour gagner un peu de temps tu fais tous tes calculs sur la distance au carré ce qui évite de calculer une racine carrée (gourmande en temps machine) Olivier
  22. Bonjour, En C# je peux mettre en surbrillance (Highlight = true ou false) des objets ou les rendre invisible (Visible = true ou false) Mais ce que j'aimerais faire c'est pouvoir les estomper. J'ai envisagé de : - les mettre dans un calque verrouillé et activer la variable LAYLOCKCTL mais ça joue aussi sur tous mes autres calques verrouillés. - leur affecter une transparence et activer la transparence, mais ça ralentit mon affichage et l'impression est plus "compliquée". Est-ce que je dois obligatoirement passer par un Worlddraw spécifique (chaque objet à estomper possède une XData spécifique) pour récupérer leur couleur, la convertir en TrueColor, puis l'atténuer et la réaffecter à l'objet? ou bien y a-t-il plus simple? Merci Olivier
  23. Bonjour, la commande EFFACER ou _ERASE n'affiche pas de case de dialogue donc la commande équivalente (avec option ligne de commande) avec un - devant n'existe pas (command "_ERASE" "_ALL" "") Olivier
  24. Bonjour, le plus simple si j'ai tout compris: - sélection de la polyligne en EO - calcul de l'emprise X,Y min et X,Y Max - passage en EP - dessin d'une fmult rectangulaire selon dimensions emprise et fonction de l'échelle souhaitée - entrée en EO (à l'intérieur de la fenêtre) - zoom centre sur le centre de l'emprise - zoom ...XP selon échelle - chspace et sélection de la poly - retour en EP et utilisation de la poly comme contour de délim de la fenêtre rectangulaire. Olivier
  25. Didier, on parle de test dans une liste et pas dans une chaine (string) pour vl-member... Olivier
×
×
  • 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é