马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
 - (defun c:xdtb_cir2tan (/ ss c1 c2 cen1 cen2 dir dir1 dir2
- p1 p2 g1 g2 pa1 pa2 pa-1 pa-2 gl1
- gl2 sp1 ep1 sp2 ep2 arc1 arc2
- )
- (if (and (xdrx_initssget "\n选择两个圆<退出>:")
- (setq ss (xdrx_ssget '((0 . "circle"))))
- (= (sslength ss) 2)
- )
- (progn
- (xdrx_begin)
- (setq c1 (ssname ss 0)
- c2 (ssname ss 1)
- cen1 (xdrx_getpropertyvalue c1 "center")
- cen2 (xdrx_getpropertyvalue c2 "center")
- int1 (xdrx_get_inters c1 (list cen1 cen2) 3)
- int2 (xdrx_get_inters c2 (list cen1 cen2) 3)
- int3 (mapcar 'car
- (xdrx_points_sortoncurve
- (list cen1 cen2)
- (append int1 int2)
- )
- )
- dir (xdrx_vector_normalize (mapcar '- cen1 cen2))
- dir1 (xdrx_vector_perpvector dir)
- dir2 (xdrx_vector_negate dir1)
- p1 (xdrx_get_inters c1 (list cen1 (mapcar '+ cen1 dir1)) 3)
- p2 (xdrx_get_inters c2 (list cen2 (mapcar '+ cen2 dir1)) 3)
- p1 (mapcar 'car
- (xdrx_points_sortoncurve
- (list cen1 (mapcar '+ cen1 dir1))
- p1
- )
- )
- p2 (mapcar 'car
- (xdrx_points_sortoncurve
- (list cen2 (mapcar '+ cen2 dir1))
- p2
- )
- )
- g1 (xdge::constructor c1)
- g2 (xdge::constructor c2)
- pa1 (xdge::getpropertyvalue g1 "paramof" (car p1))
- pa2 (xdge::getpropertyvalue g1 "paramof" (cadr p1))
- pa-1 (xdge::getpropertyvalue g2 "paramof" (car p2))
- pa-2 (xdge::getpropertyvalue g2 "paramof" (cadr p2))
- gl1 (xdge::constructor "klineseg3d")
- gl2 (xdge::constructor "klineseg3d")
- )
- (if (and (xdge::setpropertyvalue gl1 "set" g1 g2 pa1 pa-1)
- (xdge::setpropertyvalue gl2 "set" g1 g2 pa2 pa-2)
- )
- (progn
- (mapcar 'set
- '(sP1 eP1)
- (xdge::getpropertyvalue gl1 "startpoint" "endpoint")
- )
- (mapcar 'set
- '(sP2 eP2)
- (xdge::getpropertyvalue gl2 "startpoint" "endpoint")
- )
- (setq
- arc1 (xdge::constructor "kCircArc3d" sp1 (car int3) sp2)
- )
- (setq
- arc2 (xdge::constructor "kCircArc3d" ep1 (last int3) ep2)
- )
- (xdrx_curve_join (xdge::entity:make gl1 gl2 arc1 arc2))
- (xdrx_entity_matchprop c1 (entlast))
- (xdrx_entity_delete ss)
- )
- (xdrx_prompt "\n >>两圆没有公切线.")
- )
- (xdrx_end)
- )
- (xdrx_prompt "\n >>没有选择到两个圆.")
- )
- (princ)
- )
|