倔强的蚂蚁 发表于 2013-11-30 16:33:12

vl-get-arclength命令,对用圆弧命令画的圆弧有效,对裁剪圆后得到的圆弧,不起作....

这是我自己写的一个计算选择的所有直线长度的代码,但是出现点问题,就是用圆弧命令画的圆弧,可以执行arclength,但是裁剪以后的圆,虽然也是圆弧,但提示arclength无效,不知道怎么回事。有人能帮我看看么?

;;;计算选择线条的长度
(Defun C:sss()
(Vl-Load-Com)
(SetQ EntPnt (ssget))
(setq n (sslength entpnt))
(setq i 0)
(setq chicun 0)
(princ "总长度 = ")
(repeat n
    (setq ent (ssname entpnt i)) ;或得图元名
    (setq dysj (entget ent))
    (setq ifline (assoc 0 dysj)) ;返回(0 . "line")
    (if        (= (cdr ifline) "LINE") ;为直线
      (progn
        (setq zhixian
             (vlax-curve-getDistAtPoint ent (cdr (assoc 11 dysj)))
        )
;计算直线长度,还有个精度问题,怎么确定保留几位小数?这个跟画线精度有问题,精度到4,只能改成3,而不能改成5.
        (setq chicun (+ chicun zhixian))
        (princ zhixian)
        (if (= n (+ 1 i))
          (if (> n 1)
          (princ " = ")
          )
          (princ " + ")
        )
      )
      (progn
        (setq obj (vlax-ename->vla-object ent))
        (setq quxian (vla-get-arclength obj))
        (setq chicun (+ chicun quxian))
        (princ quxian)
        (if (= n (+ 1 i))
          (if (> n 1)
          (princ " = ")
          )
          (princ " + ")
        )
      )
    )
    (setq i (1+ i))
)
(if (> n 1)
    (princ chicun)
)
(princ)
)


xyp1964 发表于 2013-11-30 16:50:24

;; 曲线长度
(defun CurveLength (ename)
(vlax-curve-getDistAtParam
    ename
    (vlax-curve-getEndParam ename)
)
)

倔强的蚂蚁 发表于 2013-11-30 22:04:25

xyp1964 发表于 2013-11-30 16:50 static/image/common/back.gif


非常感谢!有许多Activex命令,要去哪里找得到啊?
页: [1]
查看完整版本: vl-get-arclength命令,对用圆弧命令画的圆弧有效,对裁剪圆后得到的圆弧,不起作....