马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
等分数: 正数-角等分,负数-线等分(端点连线),对平行线,只有线等分效果
 - (defun c:xdtb_lndiv (/ e1 e2 div sp1 sp2 ep1 ep2 v1 v2 temp ints ang i g1 g2 pts1 pts2 int1 int2)
- (if (and (setq e1 (car (xdrx_entsel "\n选择第一根线<退出>:" '((0 . "line")))))
- (setq e2 (car (xdrx_entsel "\n选择第二根线<退出>:" '((0 . "line")))))
- (setq div (getint "\n等分数(正数-角等分/负数-线等分)<退出>:"))
- )
- (progn (mapcar 'set
- '(sp1 ep1)
- (xdrx_getpropertyvalue e1 "vertices")
- )
- (mapcar 'set
- '(sp2 ep2)
- (xdrx_getpropertyvalue e2 "vertices")
- )
- (if (< (car ep1) (car sp1))
- (progn (setq temp ep1
- ep1 sp1
- sp1 temp
- )
- (xdrx_curve_reverse e1)
- )
- )
- (if (< (car ep2) (car sp2))
- (progn (setq temp ep2
- ep2 sp2
- sp2 temp
- )
- (xdrx_curve_reverse e1)
- )
- )
- (setq v1 (xdrx_vector_normalize (mapcar '- ep1 sp1))
- v2 (xdrx_vector_normalize (mapcar '- ep2 sp2))
- )
- (if (and (not (xdrx_vector_isparallel v1 v2)) (> div 0))
- (progn (setq ints (xdrx_get_inters e1 e2 3)
- ints (car ints)
- )
- (if (> (cadr sp1) (cadr sp2))
- (setq temp e1
- e1 e2
- e2 temp
- )
- )
- (setq i 0
- ang (xdrx_vector_angle v1 v2)
- ang (/ ang div)
- )
- (repeat (1- div)
- (setq mat (xdrx_matrix_setrotation
- (* (setq i (1+ i)) ang)
- '(0 0 1)
- ints
- )
- )
- (xdrx_entity_transformedcopy e1 mat)
- (xdrx_entity_matchprop e1 (entlast))
- (setq int1 (xdrx_get_inters (entlast) (list sp1 sp2) 3)
- int2 (xdrx_get_inters (entlast) (list ep1 ep2) 3)
- )
- (xdrx_setpropertyvalue
- (entlast)
- "startpoint"
- (car int1)
- "endpoint"
- (car int2)
- )
- )
- )
- (progn (setq g1 (xdge::constructor "klineseg3d" sp1 sp2)
- g2 (xdge::constructor "klineseg3d" ep1 ep2)
- pts1 (xdrx_getsamplept g1 (1+ (abs div)))
- pts1 (cdr (xd::list:removetail pts1))
- pts2 (cdr (xd::list:removetail (xdrx_getsamplept g2 (1+ (abs div)))))
- )
- (xdrx_object_release g1 g2)
- (mapcar '(lambda (x y) (xdrx_line_make x y)
- (xdrx_entity_matchprop e1 (entlast))
- ) pts1 pts2)
- )
- )
- )
- )
- (princ)
- )
|