x_all Posté(e) le 7 mars 2012 Posté(e) le 7 mars 2012 plop je sais, le sujet a déja sans douté été abordé, mais je ne le retrouve pas... (sisi j'ai cherché) je cherche donc un lisp qui insère un bloc aux sommets d'une polyligne un peu comme mesuré et diviser, mais uniquement aux sommets existants sur une polyligne (ou mieux de toutes les polylignes selectionnées) j'ai souvenir de la discution, ou qq1 cherchait à faire ça pour des courbes de niveaux mais je ne la retouve pas... mon cas est similaire pour des moly 2d (ou 3d?)si vous avez noté ça dans vos tablettes... merci quelques trucs sur autocad
lecrabe Posté(e) le 7 mars 2012 Posté(e) le 7 mars 2012 Hello Je suis presque sur d'avoir ce genre de routine mais bon je ne la retrouve pas ! Donc voici 2 routines ... pour 2 traitements successifs !! *** 1 *** Dessiner un point graphique a chaque sommet/vertex ****** SVP tu changes ton style de point pour mieux voir ! ;;; Met Nodal sur sommet plylignes - par Bred le 27/05/08 ;;; Routine : NOD-PL (vl-load-com) (defun c:nod-pl (/ I LST-COORD OB SEL Y R) (or (setq sel (ssget '((0 . "VERTEX,*POLYLINE")))) (setq sel (ssget "_X" '((0 . "VERTEX,*POLYLINE"))))) (repeat (setq i (sslength sel)) (setq ob (vlax-ename->vla-object (ssname sel (setq i (1- i)))) lst-coord (vlax-safearray->list (vlax-variant-value (vla-get-Coordinates ob)))) (setq y 0) (if (equal (vla-get-ObjectName ob) "AcDbPolyline") (setq r 2) (setq r 3)) (repeat (/ (length lst-coord) r) (vla-addpoint (if (= (getvar "CVPORT") 1) (vla-get-PaperSpace (vla-get-ActiveDocument (vlax-get-acad-object))) (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object))) ) (vlax-3d-point (list (nth y lst-coord) (nth (setq y (1+ y)) lst-coord) (if (equal (vla-get-ObjectName ob) "AcDbPolyline") 0.0 (nth (setq y (1+ y)) lst-coord))))) (setq y (1+ y)) ) ) (princ) ) *** 2 *** Dessiner un Bloc sur les points graphiques selectionnes *** ;;; Routine pour dessiner un Bloc sur des cercles / points graphiques ;;; Version 2 corrigee pour ne traiter que des cercles ou des points ;;; Commande: C2B ou P2B ;;; ;;;--------------------------------------------------------------------; ;;; PNT2BLK.LSP - July 2001 - Original Routine ;;; Place a block object in the location of selected point objects. ;;;--------------------------------------------------------------------; ;;; Function: PNT2BLK --> C2B / P2B ;;; function to convert point objects to blocks. ;;; block must be defined in the current drawing ;;; blocks including attdefs will not address the attributes ;;; if the block references attdefs with default or constant values, ;;; these will be populated. ;;;********************************************************************* ;(defun c:c2b (/ ss ct len e eb bname pt attreqhold echohold) (defun c:p2b (/ ss ct len e eb bname pt attreqhold echohold) ;;;get command echo setting and store it (setq echohold (getvar "CMDECHO")) ;;;set command echo off (setvar "CMDECHO" 0) ;;;get attribute request setting and store it (setq attreqhold (getvar "ATTREQ")) ;;;set attribute request off (setvar "ATTREQ" 0) ;;;get name of block to insert (setq bname (getstring "\nBlock name: ")) ;;;check that the block is defined in the current drawing (if (tblsearch "block" bname) (progn ;;;prompt for point selection (princ "\nSelect point objects:") ;;; --- if point OR circle objects were selected --- ;(if (setq ss (ssget '((0 . "CIRCLE")))) (if (setq ss (ssget '((0 . "POINT")))) (progn ;;;walk through point objects (setq len (sslength ss)) (setq ct 0) (while (< ct len) ;;;for each point (setq e (ssname ss ct)) (setq ct (+ ct 1)) (setq eb (entget e)) ;;;get insert point (setq pt (cdr (assoc 10 eb))) ;;;insert block (command "_insert" bname pt "" "" "") ) ) ;(princ "\nNo circle objects selected.") (princ "\nNo point objects selected.") ) ) (princ "\nInvalid, block not defined in drawing.") ) ;;;restore command echo setting to stored value (setvar "CMDECHO" echohold) ;;;restore attribute request setting to stored value (setvar "ATTREQ" 0) (princ) ) Desole pour les 2 traitements ... Le Decapode (lecrabe) Autodesk Expert Elite Team
lecrabe Posté(e) le 7 mars 2012 Posté(e) le 7 mars 2012 Hello Voici ce que tu veux mais je n'ai pas teste cette routine ! SVP tu changes le nom du bloc "BEAUTIFUL_TREE" car il est en DUR dans le code Lisp ! ;; Insert a Block at each Vertex of a Pline ;; Block Name = BEAUTIFUL_TREE ;; http://discussion.autodesk.com/forums/thread.jspa?threadID=279644&tstart=125 ;; Scale X = Scale Y = 1 - Rotation = 0 ;; If your Block has Attributes : ;; Please ATTREQ = 0 before Running routine and after ATTREQ = 1 (defun C:BlockVert (/ plobj inc) (setq plobj (car (entsel "\nSelect Polyline: ")) inc 0 ); end setq (while (<= inc (vlax-curve-getEndParam plobj)) (command "_.insert" ;; "yourblockname" "BEAUTIFUL_TREE" (vlax-curve-getPointAtParam plobj inc) "" "" "" ); end command (setq inc (1+ inc)) ); end while ); end defun Le Decapode (lecrabe) Autodesk Expert Elite Team
x_all Posté(e) le 7 mars 2012 Auteur Posté(e) le 7 mars 2012 nikel merci !!!!!!!!!!!!!!!!!!!!!!!! quelques trucs sur autocad
lecrabe Posté(e) le 7 mars 2012 Posté(e) le 7 mars 2012 Hello Heureux de t'avoir aide ! Mais alors tu utilises quel programme ?et tu es avec quelle version d'AutoCAD ? Le Decapode (lecrabe) Autodesk Expert Elite Team
x_all Posté(e) le 9 mars 2012 Auteur Posté(e) le 9 mars 2012 je tourne avec totoacd 2010 et j'ai utilisé "BEAUTIFUL_TREE" avec mon nom de bloc.. ça a marché nikel... merci encore... quelques trucs sur autocad
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