chris_mtp Posté(e) le 16 novembre 2008 Posté(e) le 16 novembre 2008 Bonjour, J'ai récupérer ton lisp gile ui permet de projeter orthogonalement suivant l'axe Y des blocs sur une polyligne ou une courbe. ;; PtOnCurveY (gile) ;; Déplace parallèlement à l'axe Y les points, blocs textes sélectionnés sur la courbe (defun c:MoveOnCurveY (/ space dist curve pts coord line) (vl-load-com) (or *acdoc* (setq *acdoc* (vla-get-ActiveDocument (vlax-get-acad-object))) ) (setq space (if (= (getvar "CVPORT") 1) (vla-get-PaperSpace *acdoc*) (vla-get-ModelSpace *acdoc*) ) ) (if (and (setq dist (getdist "\nSpécifiez la longueur maximale: ")) (setq curve (car (entsel "\nSélectionnez la courbe: "))) (setq curve (vlax-ename->vla-object curve)) (IsCurveObject curve) (princ "\nSélectionnez les points, blocs ou textes: ") (ssget '((0 . "POINT,INSERT,MTEXT,TEXT"))) ) (vlax-for pt (setq pts (vla-get-ActiveSelectionSet (vla-get-ActiveDocument (vlax-get-acad-object) ) ) ) (if (= (vla-get-ObjectName pt) "AcDbPoint") (setq coord (vlax-get pt 'Coordinates)) (setq coord (vlax-get pt 'InsertionPoint)) ) (setq line (vla-addLine space (vlax-3d-point (list (car coord) (- (cadr coord) dist) (caddr coord)) ) (vlax-3d-point (list (car coord) (+ (cadr coord) dist) (caddr coord)) ) ) ) (if (setq int (vlax-invoke curve 'IntersectWith line acExtendNone)) (vlax-put pt (if (= (vla-get-ObjectName pt) "AcDbPoint") 'Coordinates 'InsertionPoint ) (list (car int) (cadr int) (caddr int)) ) ) (vla-delete line) ) ) (princ) ) ;; IsCurveObject ;; Evalue si un objet (ename ou vla-object) est un "CurveObject" (defun IsCurveObject (obj) (and (or (= (type obj) 'VLA-OBJECT) (setq obj (vlax-ename->vla-object obj)) ) (member (vla-get-ObjectName obj) '("AcDbArc" "AcDbCircle" "AcDbEllipse" "AcDbLine" "AcDbPolyline" "AcDb2dPolyline" "AcDb3dPolyline" "Acdb2dSpline" ) ) ) ) Pourquoi ce lisp ne marche ou du moins ne déplace pas les blocs sélectionnés sur l'axe en question en conservant si possible le Z de départ ? Merci par avance de votre.Chris_mtp
(gile) Posté(e) le 16 novembre 2008 Posté(e) le 16 novembre 2008 Salut, Pourquoi ce lisp ne marche ou du moins ne déplace pas les blocs sélectionnés sur l'axe en question en conservant si possible le Z de départ ? Parce qu'il n'est pas prévu pour ça. La demande était de replacer les points sur la polyligne. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
chris_mtp Posté(e) le 16 novembre 2008 Auteur Posté(e) le 16 novembre 2008 Dans ce cas, je n'ai pas copier le bon code car dans le sujet, il y a à la fin un lisp indiquant qu"on peut projeté des textes ou des blocs. Sinon, serait il possible d'adapter ce lisp mais cette fois ci pour des blocs type point topo toujours suivant le même principe en les copiant si possible dans un autre calque et en les projetant suivant l'axe des Y sur une polyligne 2d? Ceci, dans le but de créer une polyligne 3D par projection orthogonale de points topo. Pratique dans le cas de profils hydrauliques. Merci par avanceChris_mtp.
(gile) Posté(e) le 16 novembre 2008 Posté(e) le 16 novembre 2008 Dans ce cas, je n'ai pas copier le bon code car dans le sujet, il y a à la fin un lisp indiquant qu"on peut projeté des textes ou des blocs. Non, je pense que c'est le bon code, mais la demande était pour du dessin en 2d : déplacement des objets parallèlement à l'axe Y sur la polyligne (polyligne et objets ayant un Z=0). Sinon, je ne comprends pas bien ta demande : points topo (3d), polyligne2d, polyligne 3d ??? Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
didier Posté(e) le 17 novembre 2008 Posté(e) le 17 novembre 2008 Bonjour ce que tu demandes est réalisable simplement sans routine il te suffit de dessiner la polyligne 3D avec les accrochages 3D(points en 3D ou filtre X Y plus Z) Ensuite pour dessiner le profil en long c'est une autre histoire, il te faudra programmer ou utiliser Covadis. je ne pense pas qu'une projection orthogonalesoit la solution dans le cas des réseaux.comment gères-tu les coudes dans le réseau ? amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
chris_mtp Posté(e) le 22 novembre 2008 Auteur Posté(e) le 22 novembre 2008 Salut, Désolé de ne pas vous avoir répondu avant mais j'étais parti en déplacement cette semaine.Non, le but est de tracer une polyligne 2d pour indiquer l'emplacement d'un profil.Des points topo sous forme de blocs en 3D sont situés de part et d'autre de cette polyligne 2D. En mettant le scu objet le long de cette polyligne 2D, le but serait de projeter sur cette polyligne en les copiant les blocs 3D dans un autre calque pour à la fin tracer une polyligne 3D passant par les blocs 3D projetés. J'ai testé le lisp avec les blocs à Z=0. En effet, ca marche bien.le but serait en fait simplement d'adapter le lisp mais pour des blocs en 3D avec si possible la possibilité de copier les blocs à projeté dans un autre calque. Ce n'est pas un problème de profil en long mais simplement de poly3D. il te suffit de dessiner la polyligne 3D avec les accrochages 3D(points en 3D ou filtre X Y plus Z) Avec des projections orthogonales et une distance maximale de déport, c'est plus rapide surtout lorsqu'il faut tracer des profils avec 300 points par exemple. Merci par avance de votre aide.Chris_mtp.
(gile) Posté(e) le 22 novembre 2008 Posté(e) le 22 novembre 2008 Salut, Vite fait (si j'ai bien compris). Devrait fonctionner dans le SCG, la polyligne doit être dans un plan parallèle au SCG. (defun c:toto (/ blk pl elv dist ss ins p1 p2 new) (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") (vlax-for b (setq ss (vla-get-ActiveSelectionSet *acdoc*)) (setq ins (vlax-get b 'InsertionPoint)) (if ( (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))) ) (vla-put-Layer new "BLOCS_PROJETES") ) ) ) (vla-delete ss) ) ) (princ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
chris_mtp Posté(e) le 22 novembre 2008 Auteur Posté(e) le 22 novembre 2008 Merci Gile.Ca marche du feu de Dieu C'est exactement ce que je cherchais.En effet, ca marche même dans le SCG donc pas besoin chaque fois de déplacer le SCU suivant l'objet polyligne. Merci encore.Chris_mtp.
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