开1心 发表于 2013-7-11 20:23:19

请高手们帮忙用以下的代码+extrim编写个程序?

请高手们帮忙用以下的代码+extrim编写个程序,并在每个封闭的PL线范围内自动选取以下代码画出来的点进行修剪=====》批量extri~


;;;测试函数
(defun c:tt ( / ss s)
    (setq ss (ssget '((0 . "*poLyline")))
          S 0)
    (if ss
      (repeat (sslength ss)
       (command "point" (Get_center_relative (ssname ss s)))
       (setq s (1+ s))
      )
   )
)

;;;测试函数
(defun c:test ()
   (while T
      (command "point" (Get_center_relative (car(entsel))))
   )
)


;;;求多边形内相对中心点
;;; 2012-11-15
;;; 感谢 辰   提供方法
;;; 感谢 学院派 指正
;;;by yanguangfei
(defun Get_center_relative (ename /Pts   2R Mk   Mklinepoints   DelLine   Tssred
                   i   lstNNewlst    DistList   R   NumberTssbak TssSubPt)
    (setq Obj   (Vlax-Ename->Vla-Object ename)
          Tssbak(Vlax-Get Obj 'Thickness )
          TssSub(Vlax-Put Obj 'Thickness 0 ))
    (setq Pts   (GetBoundingBox ename)
          2R      (MJ:MIDPOINT (CAR Pts) (CADR Pts))
          Mk      (entmake (list (cons 0 "LINE")(cons 8 "JMDSS")(cons 10 (polar 2R 0.0 1000))(cons 11 (polar 2R 3.14159 1000))))
          Mkline(entlast)
          points(vlax-invoke (vlax-ename->vla-object ename) 'IntersectWith (vlax-ename->vla-object Mkline) acExtendOtherEntity)
          Tssred(Vlax-Put Obj 'Thickness (eval Tssbak) )
          DelLine (entdel Mkline)
          i       0
          lst   nil
          )
(repeat (/ (length points) 3)
       (setq lst (append lst (list (list (nth i points) (nth (1+ i) points) (nth (+ 2 i) points)))))
       (setq i (+ i 3))
)
(setq lst (px lst))
(if (>= (length lst) 4)
      (progn
          (setq N      0
                Newlst nil)
          (repeat (/ (length lst) 2)
              (setq Newlst (append Newlst (list (list (nth N lst) (nth (1+ N) lst)))))
              (setq N (+ 2 N))
          )
          (setq DistList nil
                R      0)
          (repeat (length Newlst)
          (setq Number (nth R Newlst)
                DistList (append DistList(list(distance (car Number) (cadr Number)))))
          (setq R (1+ R))
          )
          (setqPt (nth (vl-position (car (vl-sort DistList '>)) DistList) Newlst))
        (MJ:MIDPOINT (car pt) (cadr pt));返回值
      )
      (MJ:MIDPOINT (car lst) (cadr lst));返回值
)
)

(defun MJ:MIDPOINT (P1 P2)
(mapcar '(lambda (X Y) (/ (+ X Y) 2.0)) P1 P2)
)

(defun GetBoundingBox (ent / ll ur)
    (vla-getboundingbox (vlax-ename->vla-object ent) 'll 'ur)
    (mapcar 'vlax-safearray->list (list ll ur))
)

(defun px (X)
    (vl-sortX
             (function (lambda (e1 e2)
                         (< (car e1) (car e2)) ) ) )
)


开1心 发表于 2013-7-11 20:27:04

以上代码的效果是找到多边形的内部点~
页: [1]
查看完整版本: 请高手们帮忙用以下的代码+extrim编写个程序?