本帖最后由 自贡黄明儒 于 2014-1-3 11:28 编辑
啊,楼主修改了呀,饭也不请了,悬赏也不见了
 - ;;[通用函数] 带过滤器的entsel
- (defun Fsxm-entsel (msg filter)
- (setq enp (entsel msg))
- (if (or (= (type enp) 'str)
- (and enp (ssget (cadr enp) filter))
- )
- enp
- )
- )
- ;;多段线弧用折线代替
- (defun C:w2 ()
- ;;164.3 [功能] 多段线凸度列表
- ;;示例(get42 (entget(car (entsel))))
- (defun get42 (en)
- (mapcar 'cdr
- (vl-remove-if-not '(lambda (x) (= (car x) 42)) en)
- )
- )
- ;;沿多段线取点,弧处按角度加密取点
- (defun LP:getpts (E EN / I II J L42 N PT PTLST X)
- (setq l42 (get42 en))
- (setq j 0)
- (repeat (setq n (fix (vlax-curve-getEndParam e)))
- (setq x (car l42))
- (setq l42 (cdr l42))
- (cond ((equal x 0)
- (setq pt (vlax-curve-getPointAtParam e j))
- (setq ptlst (cons pt ptlst))
- (setq j (1+ j))
- )
- (T
- (setq i (fix (/ (* (atan (abs x)) 180) pi))) ;弧取点密度
- (setq ii (/ 1.0 i))
- (repeat i
- (setq pt (vlax-curve-getPointAtParam e j))
- (setq ptlst (cons pt ptlst))
- (setq j (+ ii j))
- )
- (setq j (fix (+ 0.5 j)))
- )
- )
- )
- ptlst
- )
- ;;164.31 [功能] 点表生成多段线
- (defun Make-LWPOLYLINE (lst / PT)
- (entmake (append (list '(0 . "LWPOLYLINE")
- '(100 . "AcDbEntity")
- '(100 . "AcDbPolyline")
- (cons 90 (length lst))
- )
- (mapcar '(lambda (pt) (cons 10 pt)) lst)
- )
- )
- )
- (setq e (Fsxm-entsel "\n 选择剖面的多段线" '((0 . "LWPOLYLINE"))))
- (setq pt (cadr e))
- (setq e (car e))
- (setq en (entget e))
- (Make-LWPOLYLINE (LP:getpts E EN))
- )
|