VtKp Posté(e) le 10 février 2011 Posté(e) le 10 février 2011 Bonjour a tousIl y a eu un bug au premier messageJe viens vers vous car je voudrais savoir s'il est possible en lisp de sélectionner des blocs qui se trouvent a une certaine distance d'un axe en plan 2D de manière a calculer des pentes entre ces blocs points topo et l'axe 3D.Je précise que sous l'axe en plan 2D se trouve une polyligne 3D avec des z variables.Il faudrait je pense Projeter les blocs sur l'axe puis calculer et écrire les pentes entre les blocs origines et les blocs projetésJ'espère ne pas trop embrouiller l'esprit par contre je précise que je n'ai pas de MNT dans mon fichier.Merci par avance de votre aide
lili2006 Posté(e) le 10 février 2011 Posté(e) le 10 février 2011 Bonjour à toutes et tous, Bienvenue VtKp, Je suppose que si tu poses la question dans ce forum c'est que tu n'est pas possesseur d'une version covadis ? Si oui, il y à possibilité de coter les pentes de la poly 3D directement (Avec covadis, j'entends),... Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
VtKp Posté(e) le 10 février 2011 Posté(e) le 10 février 2011 Bonjour LilliNon je n'ai pas Covadis mais attention de ne pas confondre, je ne veux pas de ma polyligne 3D entre les sommets de mon axe en plan mais les pentes entre les blocs projetés sur la polyligne 3D et les blocs originesDe plus les pentes calculees devront s'écrire dans AutocadEst ce possible avec Autocad ?J'ai déjà trouve un lisp de gile apparement qui projette les blocs sur un axe mais pour les pentes ?Je ne sais pas programmer d'où ma question.Merci D' avance pour vos réponses
VtKp Posté(e) le 11 février 2011 Posté(e) le 11 février 2011 Bonjour a tousPersonne ne peut m'aider vraiment sur ce problème.
lili2006 Posté(e) le 11 février 2011 Posté(e) le 11 février 2011 Bonjour à toutes et tous, Désolé mais je ne vois pas vraiment ce que tu veux faire,... Pour coter une pente entre deux pts bonuscad avait fait un lisp mais je n'arrive pas à remettre la main dessus pour le moment,... Tu peux toujours consulter sa page Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
didier Posté(e) le 11 février 2011 Posté(e) le 11 février 2011 coucou je veux bien comprendre avant de répondre par un lisp tu as des points (ou des blocs avec attributs) insérés avec une altitudeensuite tu as une polyligne 3D (qui est en fait ta ligne rouge) tu veuxconnaître la pente entre un de ces points et un sommet de la polyligne 3D ?ou bien connaître la pente entre la projection d'un de ces points sur la polyligne 3D ? amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
VtKp Posté(e) le 11 février 2011 Posté(e) le 11 février 2011 Merci de vos réponsesMes points topo sont des blocs avec attributLe z du bloc ou l'altitude du point est la première étiquette de mes attributs intitule ALTITUDEEt mon bloc point se nomme POINTSJe veux projeter ces blocs sur mon axe 3D et déterminer les pentes des blocs projetés par rapport aux blocs D'origine et non par rapport aux sommets de la polyligne 3DL'altitude des blocs projetés doit donc changer par rapport blocs d'origines et être interpoles sur mon axe 3D Peux t-on le faire en lisp ?Merci encore de votre aide
didier Posté(e) le 11 février 2011 Posté(e) le 11 février 2011 coucou je pense que ça va être une de mes dernières questions :( tes points sont insérés en Z connu ?ou bien ils sont insérés en Z 0 et il faut lire la valeur de l'attribut ? ensuite je ne comprends pas : projetés par rapport aux blocs D'origine et non par rapport aux sommets de la polyligne 3D projetés comment ?vont-ils se déplacer en XY ? amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
VtKp Posté(e) le 11 février 2011 Posté(e) le 11 février 2011 Oui Didier les blocs ont un z connu et ne sont pas a z 0Les blocs origines ne doivent pas bouger en X YIl faudrait interpoler une copie de ces blocs perpendiculairement sur l'axe 3dMerci encore de ton attention
chris_mtp Posté(e) le 12 février 2011 Posté(e) le 12 février 2011 Bonjour Peut-être qu'avec ce lisp en l'adaptant un peu, VtKp devrait trouver son bonheur (defun c:pn1 (/ blk pl elv dist ss ins p1 p2 new i dist1) (vl-load-com) (or *acdoc* (setq *acdoc* (vla-get-ActiveDocument (vlax-get-acad-object))) ) (if (and (setq blk (car (entsel "\nSélectionnez un des blocs à traiter: "))) (setq blk (vlax-ename->vla-object blk)) (= (vla-get-ObjectName blk) "AcDbBlockReference") (setq pl (car (entsel "\nSélectionnez la polyligne: "))) (setq pl (vlax-ename->vla-object pl)) (= (vla-get-ObjectName pl) "AcDbPolyline") (setq elv (vla-get-Elevation pl)) (setq dist (getdist "\nSpécifiez la longueur minimale : ")) (ssget "_X" (list '(0 . "INSERT") (cons 2 (vla-get-Name blk))) ) ) (progn (vla-add (vla-get-Layers *acdoc*) "BLOCS_PROJETES") (setq i 1) (vlax-for b (setq ss (vla-get-ActiveSelectionSet *acdoc*)) (setq ins (vlax-get b 'InsertionPoint)) (if (<= (distance (setq p1 (list (car ins) (cadr ins) elv)) (setq p2 (vlax-curve-getClosestPointTo pl p1)) ) dist ) (progn (setq new (vla-Copy b)) (vla-Move new (vlax-3d-point ins) (vlax-3d-point (list (car p2) (cadr p2) (caddr ins))) ) (setq dist1 (distance p1 p2)) (vla-put-Layer new "BLOCS_PROJETES") ) ) (setq i (1+ i)) ) (vla-delete ss) ) ) (princ) )
chris_mtp Posté(e) le 12 février 2011 Posté(e) le 12 février 2011 Désolé, j'ai oublié de citer la source de ce code qui vient de GileCe lisp m'a rendu de nombreux services.Merci encore Gile
VtKp Posté(e) le 13 février 2011 Posté(e) le 13 février 2011 Bonjour a tousMerci chris_mtp pour ce lisp qui certes n'est pas tout a fait ce que je souhaite mais reste un bon débutIl ne me reste qu'à essaye de programmer un truc pour interpoler en z un point connu en xy qui serait sur mon axe polyligne 3DSi quelqu'un pourrait m'aider pour commencer ?Merci encore de votre aide
chris_mtp Posté(e) le 19 février 2011 Posté(e) le 19 février 2011 C'est dommage de ne pas avoir de suite à ce sujet très interressant qui pourrait être bien utilePour ma part, projeter un point sur une polyligne 3D en l'interpolant, c'est à dire récupérer le Z de la polyligne 3D et non du point projeté, je ne vois vraiment pas comment faire Peut être que Gile aurait une solution si tu nous entends...... John
VtKp Posté(e) le 25 février 2011 Posté(e) le 25 février 2011 Bonjour a tous,Je ne m'en sors toujours pas pour faire ce lisp qui projette en 3d les blocs sur mon axe.Quelqu'un aurait-il une idée ?Merci d'avance
bryce Posté(e) le 25 février 2011 Posté(e) le 25 février 2011 Bonjour, Si tu pouvais poster un fichier en exemple, ça aiderait je pense...Parce que pour le moment ton problème reste assez abstrait (pour moi en tout cas). ;) Brice, formateur AutoCAD - Inventor - SolidWorks - ZWCad - DraftSight - SketchUp indépendant
vincentp010 Posté(e) le 25 février 2011 Posté(e) le 25 février 2011 Salut, j'ai fais ça, ça définit l'altitude des points au centimètre près (au millimètre ça prend trop de temps parce que c'est codé avec les pieds :D ) ; Retourne les sommets d'une polyline3D sous forme de liste ((x y z) (x y z)) (defun listSomP3d (pl / lst nb pts ptsl) (setq lst (vlax-safearray->list (vlax-variant-value (vla-get-coordinates pl)))) (setq nb 0) (while (<= nb (length lst)) (if (< (length pts) 3) (progn (setq pts (append pts (list (nth nb lst)))) (setq nb (+ nb 1)) ) (progn (setq ptsl (append ptsl (list pts))) (setq pts nil) ) ) ) (print ptsl) ) (defun c:proj () (setvar "cmdecho" 0) (command "annuler" "m") (setq acc (getvar "osmode")) (command "accrobj" "aucun") (print "Selectionner les blocs a projeter") (setq ss (ssget)) (setq pl (car (entsel "Pointez la polyligne 3D"))) (setq pl (vlax-ename->vla-object pl)) (if (/= (vla-get-objectname pl) "AcDb3dPolyline") (exit 1)) (setq coords (listSomP3d pl)) ; Trouve l'altitude min et max de la poly3d (setq zmin (nth 2 (nth 0 (vl-sort coords (function (lambda (e1 e2) (< (nth 2 e1) (nth 2 e2)))))))) (setq zmax (nth 2 (nth 0 (vl-sort coords (function (lambda (e1 e2) (> (nth 2 e1) (nth 2 e2)))))))) (setq count 0) (while (< count (sslength ss)) (setq blk (ssname ss count)) (setq ptins (cdr (assoc 10 (entget blk)))) ; Calcul la distance la plus courte jusqu'a la polyligne en fonction de l'altitude du point entre zmin et zmax (setq nb zmin lst nil) (while (< nb zmax) (setq pt (list (car ptins) (cadr ptins) nb)) (setq ptint (vlax-curve-getClosestPointTo pl pt)) (setq dis (distance pt ptint)) (setq lst (append lst (list (list dis nb)))) ; On teste tous les cm (setq nb (+ nb 0.01)) ) (setq zproj (nth 1 (nth 0 (vl-sort lst (function (lambda (e1 e2) (< (car e1) (car e2)))))))) ; Creation du nouveau bloc (command "_copy" blk "" ptins (list (car ptins) (cadr ptins) zproj)) (entmod (subst (cons 8 "points-proj") (assoc 8 (entget (entlast))) (entget (entlast)))) ; Modification de l'atribut altitude (setq blkproj (vlax-ename->vla-object (entlast))) (setq attr (vlax-invoke blkproj 'getattributes)) (foreach a attr (setq AttName (vla-get-TagString a)) (if (= AttName "ALT") (vla-put-TextString a (rtos zproj 2 2))) ) (setq count (+ count 1)) ) (setvar "osmode" acc) ) Aide au téléchargement du cadastre dgfip-download-helper Insertion de photos géolocalisées exif https://www.dropbox.com/s/gkf6o9ac2hxen97/exifscr.zip?dl=0 Script correction BUG SPDC V2, propriétaire département 21 et 22 : https://greasyfork.org/scripts/442400-spdcv2/code/SPDCV2.user.js
VtKp Posté(e) le 26 février 2011 Posté(e) le 26 février 2011 Bonjour à tous, Merci pour vos réponses.Merci vincentp010 pour ton lisp mais lorsque je l'utilise, les blocs origines ne bougent pas,j'ai essayé avec une version ci-dessous que je me suis permis de modifer ; Retourne les sommets d'une polyline3D sous forme de liste ((x y z) (x y z)) (defun listSomP3d (pl / lst nb pts ptsl) (setq lst (vlax-safearray->list (vlax-variant-value (vla-get-coordinates pl)))) (setq nb 0) (while (<= nb (length lst)) (if (< (length pts) 3) (progn (setq pts (append pts (list (nth nb lst)))) (setq nb (+ nb 1)) ) (progn (setq ptsl (append ptsl (list pts))) (setq pts nil) ) ) ) (print ptsl) ) (defun c:proj (/ acc ss pl coords zmin zmax count blk ptins nb lst pt ptint dis zproj blkproj attr AttName) (setvar "CMDECHO" 0) (command "annuler" "m") (setq acc (getvar "OSMODE")) (setvar "OSMODE" 0) (prompt "\nProjection de Blocs sur Polyligne 3D") (prompt "\nSelectionner les blocs a projeter") (setq ss (ssget)) (setq pl (car (entsel "\nPointez la polyligne 3D"))) (setq pl (vlax-ename->vla-object pl)) (if (/= (vla-get-objectname pl) "AcDb3dPolyline") (exit 1)) (setq coords (listSomP3d pl)) ; Trouve l'altitude min et max de la poly3d (setq zmin (nth 2 (nth 0 (vl-sort coords (function (lambda (e1 e2) (< (nth 2 e1) (nth 2 e2)))))))) (setq zmax (nth 2 (nth 0 (vl-sort coords (function (lambda (e1 e2) (> (nth 2 e1) (nth 2 e2)))))))) (setq count 0) (while (< count (sslength ss)) (setq blk (ssname ss count)) (setq ptins (cdr (assoc 10 (entget blk)))) ; Calcul la distance la plus courte jusqu'a la polyligne en fonction de l'altitude du point entre zmin et zmax (setq nb zmin lst nil) (while (< nb zmax) (setq pt (list (car ptins) (cadr ptins) nb)) (setq ptint (vlax-curve-getClosestPointTo pl pt)) (setq dis (distance pt ptint)) (setq lst (append lst (list (list dis nb)))) ; On teste tous les cm (setq nb (+ nb 0.005)) ) (setq zproj (nth 1 (nth 0 (vl-sort lst (function (lambda (e1 e2) (< (car e1) (car e2)))))))) ; Creation du nouveau bloc (command "_copy" blk "" ptins (list (car ptint) (cadr ptint) zproj)) (entmod (subst (cons 8 "BLOC_PROJETES") (assoc 8 (entget (entlast))) (entget (entlast)))) ; Modification de l'atribut altitude (setq blkproj (vlax-ename->vla-object (entlast))) (setq attr (vlax-invoke blkproj 'getattributes)) (foreach a attr (setq AttName (vla-get-TagString a)) (if (= AttName "ALTITUDE") (vla-put-TextString a (rtos zproj 2 2))) ) (setq count (+ count 1)) ) (setvar "OSMODE" acc) (prin1) ) Il faudrait si possible sélectionner les blocs qui se trouvent à une certaine distance de l'axe 3D et non pas les sélectionner les uns après les autres, d'autre part, les blocs doivent si possible être projetés perpendiculairement à l'axe 3D avec une altitude au mm près.Bien sur si c'est possible. Je vous joins comme le conseille bryce un exemple de mon fichier plus parlant. http://www.cijoint.fr/cjlink.php?file=cj201102/cijGo2KGTY.jpg j'essaie de trouver un hébergeur gratuit de mon dwg sur lequel vous pourrait le télécharger mais en vain, je continue et je reviens vers vous Merci encore de votre aide.
VtKp Posté(e) le 26 février 2011 Posté(e) le 26 février 2011 Je n'y ai pas pensé de mettre mon dwg dans un zip tout simplement voici le lien en espérant que cela vous aiderahttp://www.cijoint.fr/cjlink.php?file=cj201102/cijDcczE5l.zip Merci encore de votre aide.
bryce Posté(e) le 26 février 2011 Posté(e) le 26 février 2011 Bonsoir, Voici un lisp qui a l'air de fonctionner comme tu le souhaites pour la partie projection des blocs.Je n'ai pas encore intégré le calcul et l'affichage de la pente.Dis-moi déjà si ça correspond à ton besoin. :) Edit: lien et code supprimés, nouvelle version un peu plus bas. [Edité le 27/2/2011 par bryce] Brice, formateur AutoCAD - Inventor - SolidWorks - ZWCad - DraftSight - SketchUp indépendant
VtKp Posté(e) le 26 février 2011 Posté(e) le 26 février 2011 Bonjour Merci Bryce c'est exactement ce qu'il me fautLes blocs se projettent parfaitement dans un nouveau calque nickel et les interpolations se font nickel aussiVraiment merciIl ne manque plus que le calcul de pEnte et l'insertion des textes dans un nouveau calque si possibleMerci encore de ton aide
bryce Posté(e) le 26 février 2011 Posté(e) le 26 février 2011 Tant mieux ! :)Le texte doit se positionner où et comment ?Dans le plan XY du SCG à une altitude de 0 ?Dans un plan parallèle au plan XY, avec un Z correspondant à celui du milieu de la ligne ?Autrement ? Brice, formateur AutoCAD - Inventor - SolidWorks - ZWCad - DraftSight - SketchUp indépendant
VtKp Posté(e) le 26 février 2011 Posté(e) le 26 février 2011 Le texte doit si possible se positionnier au milieu de la ligne a z 0 et selon l'orientation des lignes ProjeterMerci encore
bryce Posté(e) le 27 février 2011 Posté(e) le 27 février 2011 Bonsoir, Nouvelle version, avec les textes de pente : http://www.creao.fr/uploads/lisp/proj3d.lsp :)http://dl.free.fr/cqK9EE1sx Edit: lien remplacé [Edité le 28/2/2011 par bryce] Brice, formateur AutoCAD - Inventor - SolidWorks - ZWCad - DraftSight - SketchUp indépendant
pierrevigneux Posté(e) le 28 février 2011 Posté(e) le 28 février 2011 Désolé bryce Mais je ne peux pas accéder à ton fichier, soit tu me donne un mot de passe, ou peut-être remettre le code en ligne. J'espère de ne pas t'avoir vexé. Amicalement Pierre Acadnadien
Messages recommandés
Créer un compte ou se connecter pour commenter
Vous devez être membre afin de pouvoir déposer un commentaire
Créer un compte
Créez un compte sur notre communauté. C’est facile !
Créer un nouveau compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant