明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 672|回复: 1

求大侠高手帮忙完成下周长源码不全 样条曲线椭圆与圆与弧都量不出来。

[复制链接]
发表于 2017-9-19 14:14 | 显示全部楼层 |阅读模式
本帖最后由 tang87 于 2017-9-19 14:42 编辑

求大侠高手帮忙完成下周长源码不全 样条曲线椭圆与圆与弧都量不出来。求帮助。(defun c:zc ( / a b1 box ee len ls1 lsn odlst p1 p2 pa sn ss sx th x y ebox ssbox new_ss lstcj ss2lst mkmtext qxcd);;周长
(progn
(defun qxcd (e) (vlax-curve-getDistAtParam e (vlax-curve-getEndParam e)))
(defun ebox (ent / ll ur)
  (vla-getboundingbox (vlax-ename->vla-object ent) 'll 'ur)
  (mapcar 'safearray-value (list ll ur))
)
(defun new_ss (lastobj / ss obj)
  (setq ss (ssadd))
        (setq obj (entnext lastobj))
        (while obj
            (setq ss (ssadd obj ss))
            (setq obj (entnext obj))
        )
ss
)
(defun ssbox ( s / a b i m n o )
    (repeat (setq i (sslength s))
        (if
            (and
                (setq o (vlax-ename->vla-object (ssname s (setq i (1- i)))))
                (vlax-method-applicable-p o 'getboundingbox)
                (not (vl-catch-all-error-p (vl-catch-all-apply 'vla-getboundingbox (list o 'a 'b))))
            )
            (setq m (cons (vlax-safearray->list a) m)
                  n (cons (vlax-safearray->list b) n)
            )
        )
    )
    (if (and m n)
        (mapcar '(lambda ( a b ) (apply 'mapcar (cons a b))) '(min max) (list m n))
    )
)
(defun lstcj ( l1 l2 )
  (vl-remove-if '(lambda ( x ) (member x l2)) l1)
)
(defun ss2lst ( ss / i l )
    (if ss
        (repeat (setq i (sslength ss))
            (setq l (cons (ssname ss (setq i (1- i))) l))
        )
    )
)
(if (not (tblsearch "Style" "样式 1"))
(progn
;;;entmake *** "STYLE" *** object:
  (entmake (list
    '(0 . "STYLE")
    '(100 . "AcDbSymbolTableRecord")
    '(100 . "AcDbTextStyleTableRecord")
    '(2 . "样式 1")
    '(70 . 0)
    '(40 . 0.0)
    '(41 . 1.0)
    '(50 . 0.0)
    '(71 . 0)
    '(42 . 20.0)
    '(3 . "simkai.ttf")
    '(4 . "")
      )
    )
  );End Progn
)
(defun mkmtext (la str pt th a71 a72 a73)
  (entmakex (list '(0 . "MTEXT")
  '(100 . "AcDbEntity") '(100 . "AcDbMText")
                 (cons 8 la)
                 (cons 1 str)
                 (cons 10 (trans pt 1 0))
                 (cons 40 th)
                 (cons 11 (list 1.0 0.0 0.0))
                 (cons 7 "样式 1")
                 (cons 71 a71)
                 (cons 72 a72)
                 (cons 73 a73)
           )
  )
)
(vl-load-com)
(setq *acad  (vlax-get-acad-object)
    *doc   (vla-get-ActiveDocument *acad)
)
(defun *error*(msg)
     (mapcar 'setvar '("cmdecho" "osmode" "peditaccept") odlst)
     (vlax-invoke-method *doc 'EndUndoMark)
     (princ msg)
     )        
(vlax-invoke-method *doc 'StartUndoMark)
(setq odlst (mapcar 'getvar '("cmdecho" "osmode" "peditaccept")))
(mapcar 'setvar '("cmdecho" "osmode" "peditaccept") '(0 0 1))
)
(if (not *dw) (setq *dw "H"))
(initget 128 "H L M ")
  (setq *dw (cond((getkword (strcat "\n选择单位[H毫米/L厘米/M米] <" *dw ">: ")))(*dw)))
(princ "\n选择全部处理对象:")
(setq ss (ssget '((0 . "line,arc,LWPOLYLINE,ELLIPSE,spline"))))
(setq ee (entlast))
(vl-cmdf "_pedit" "_M" ss "" "_j" "0.001" "")
(setq sn (new_ss ee))
(vl-cmdf "select" ss sn "")
(setq sn (ssget "p"))
(setq lsn (ss2lst sn)
        lsn (vl-sort lsn '(lambda (x y) (> (Vlax-Get (Vlax-Ename->Vla-Object x) 'Area ) (Vlax-Get (Vlax-Ename->Vla-Object y) 'Area )) ) )
)
(setq th 50)
(setq ls1 lsn)
(setq len (apply '+ (mapcar '(lambda(x) (qxcd x)) ls1))
                len (cond ((= "H" *dw) (strcat (rtos len 2 2) "mm")) ((= "L" *dw) (strcat (rtos (/ len 10.) 2 2) "cm")) ((= "M" *dw) (strcat (rtos (/ len 1e3) 2 2) "m")))
        )
(mkmtext "0" len (getpoint "\n点取文字左下角点:") 50 7 5 1)
(mapcar 'setvar '("cmdecho" "osmode" "peditaccept") odlst)
(vlax-invoke-method *doc 'EndUndoMark)
)



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-4-19 06:01 , Processed in 0.444206 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表