马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
本帖最后由 newer 于 2017-5-11 22:43 编辑
 - (defun XD::Curve:IsCircArc (spl tol / #endpoint #midpoint #startpoint ar cen
- cens cir ents g isclosed len norm obj pts
- ret x
- )
- (setq obj (car (xdrx_object_classname spl))
- norm (xdrx_getpropertyvalue (entlast) "normal")
- )
- (cond
- ((wcmatch obj "*POLYLINE")
- (setq g (xdge::constructor spl))
- (setq ents (xdge::getpropertyvalue g "getcurvelist")
- isclosed (xdge::getpropertyvalue g "isclosed")
- )
- (setq len (length ents))
- (cond
- ((= len 1)
- (if (= (xdge::type (car ents)) "kCircArc3d")
- (setq ret (list 1 (xdge::copy (car ents))))
- )
- )
- ((and
- (= len 2)
- isclosed
- (setq cens (mapcar
- '(lambda (x)
- (xdge::getpropertyvalue x "center")
- )
- ents
- )
- )
- (equal (car cens) (cadr cens) 1e-5)
- )
- (setq ret (list 0 (xdge::constructor "kCircArc3d" (car cens) norm
- (xdge::getpropertyvalue
- (car ents) "radius"
- )
- )
- )
- )
- )
- )
- (xdge::free (cons g ents))
- )
- ((= obj "CIRCLE")
- (setq ret (list 0 (xdge::constructor spl)))
- )
- ((= obj "ARC")
- (setq ret (list 1 (xdge::constructor spl)))
- )
- ((= obj "SPLINE")
- (setq pts (xdrx_getpropertyvalue spl "controlpoints")
- cir (xdrx_points_mincircle pts)
- cen (xdrx_points_centroid pts)
- )
- (if (xdrx_curve_isclosed spl)
- (progn
- (if (equal (car cir) cen tol)
- (setq ret (list 0 (xdge::constructor "kCircArc3d" (car cir) norm
- (distance (car cir)
- (xdrx_curve_getstartpoint spl)
- )
- )
- )
- )
- )
- )
- (progn
- (xdrx_getpropertyvalue spl "startpoint" "midpoint" "endpoint")
- (setq g (xdge::constructor "kcircarc2d" #startpoint #midpoint
- #endpoint
- )
- ar (xdge::getpropertyvalue g "area")
- )
- (if (equal ar (xdrx_getpropertyvalue spl "area") tol)
- (setq ret (list 1 (xdge::copy g)))
- )
- (xdge::free g)
- )
- )
- )
- )
- ret
- )
|