20
70
50
初露锋芒
;; Deux petites routines pour tronחonner des objets curvilignes ;; (arc, cercle, ellipse, ligne, polylignes, et spline) ;; soit en un nombre spיcifiי de tronחons : DivCut, ;; soit en des tronחons d'une longueur spיcifiיe : MesDiv;; [url]http://www.cadxp.com/sujetXForum-16753.htm[/url] ;;;; 2 commandes: DIVCUT & MESCUT;;;; EDIT : NOUVELLE VERSION, l'ancienne ne fonctionnait pas ;; avec les polylignes 2D et 3D, ni avec les polylignes fermיes;;;;;;;;;;; DIVCUT - [Editי le 17/9/2007 par (gile)];; Coupe l'objet sיlectionnי en le nombre spיcifiי de tronחons יgaux;;;;;;;;;(defun c:divcut (/ ent end div len elst)(vl-load-com)(if(and(setq ent (car (entsel)))(not (vl-catch-all-error-p(setq end(vl-catch-all-apply 'vlax-curve-getEndParam (list ent)))))(princ(strcat "\nLongueur de l'objet : "(rtos (setq len (vlax-curve-getDistAtParam ent end)))))(setq div (getint "\nNombre de divisions: "))(< 0 div)(setq len (/ len div)))(progn(vla-StartUndoMark (vla-get-ActiveDocument (vlax-get-acad-object)))(repeat (1- div)(setqent(cadr(CutCurveAtPoint ent (vlax-curve-getPointAtDist ent len)))))(vla-EndUndoMark (vla-get-ActiveDocument (vlax-get-acad-object))))(princ "\nEntitי non valide"))(princ));;;;;;;;;;; MESCUT;; Coupe l'objet sיlectionnי en tronחons de la longueur spיcifiיe;;;;;;;;;(defun c:mescut (/ ent end tot len div elst)(vl-load-com)(if(and(setq ent (car (entsel)))(not (vl-catch-all-error-p(setq end(vl-catch-all-apply 'vlax-curve-getEndParam (list ent)))))(princ(strcat "\nLongueur de l'objet : "(rtos (setq tot (vlax-curve-getDistAtParam ent end)))))(setq len (getdist "\nLongueur du segment: "))(< 0 len)(setq div (fix (/ tot len))))(progn(vla-StartUndoMark (vla-get-ActiveDocument (vlax-get-acad-object)))(repeat div(setqent(cadr(CutCurveAtPoint ent (vlax-curve-getPointAtDist ent len)))))(vla-EndUndoMark (vla-get-ActiveDocument (vlax-get-acad-object))))(princ "\nEntitי non valide"))(princ)) ;; Coupe un objet curviligne au point spיcifiי;;;; Arguments;; ent : l'objet א couper (ename ou vla-object);; pt : le point de coupure (coordonnיes WCS);;;; Retour;; une liste des deux objets crייs (ename ou vla-object)(defun CutCurveAtPoint (ent pt / vl lst cl start end ec os)(vl-load-com)(and (= (type ent) 'VLA-OBJECT)(setq ent (vlax-vla-object->ename ent)vl T))(cond((equal pt (vlax-curve-getEndPoint ent) 1e-9)(setq lst (list ent nil)))((equal pt (vlax-curve-getStartPoint ent) 1e-9)(setq lst (list nil ent))