 - (vl-load-com)
- ;;46.2 [功能] pline,lwpline点坐标表 By 无痕
- ;;示例(vxs (car (entsel))),返回三维点坐标
- (defun vxs (e / i v lst)
- (setq i -1)
- (while
- (setq v (vlax-curve-getpointatparam e (setq i (1+ i))))
- (setq lst (cons v lst))
- )
- (reverse lst)
- )
- ;三维点表绘制3D多段线
- (defun mk3DPOLYLINE(ptlst)
- (entmake (list '(0 . "POLYLINE") '(100 . "AcDbEntity") '(100 . "AcDb3dPolyline") '(66 . 1) '(70 . 8)))
- (foreach pt ptlst (entmake (list '(0 . "vertex") (cons 10 pt) '(70 . 32))))
- (entmake '((0 . "seqend")))
- )
- ;==========================
- ;连接两条三维多段线 by 77077
- (defun c:XX(/ ent1 ent2 list1 list2 lst)
- (princ "\n 连接两条3D多段线")
- (if (and (setq ent1(CAR(entsel "\n 选择第一条3D多段线")))
- (setq ent2(CAR(entsel "\n 选择第二条3D多段线")))
- (setq list1 (vxs ent1))
- (setq list2 (vxs ent2))
- )
- (progn
- (cond
- ((equal (car list1) (car list2));起点 起点
- (setq lst (append (reverse list1) (cdr list2)))
- )
- ((equal (car list1) (car(reverse list2))) ;起点 终点
- (setq lst (append list2 (cdr list1)))
- )
- ((equal (car (reverse list1)) (car list2)) ;终点 起点
- (setq lst (append list1 (cdr list1)))
- )
- ((equal (car (reverse list1)) (car (reverse list2)));终点 终点
- (setq lst (append list2 (cdr(reverse list1))))
- )
- (t (alert"两条3D多段线没有交点"))
- )
- (if lst
- (progn
- (mk3DPOLYLINE LST)
- (entdel ent1)
- (entdel ent2)
- (princ "\n 连接成功")
- )
- )
- )
- (princ "\n 坑爹嘞!")
- )
- (PRINC)
- )
|