Đến nội dung


Hình ảnh
- - - - -

Nối hai line không liền với nhau thành 1 line


  • Please log in to reply
1 reply to this topic

#1 Nghia_XD

Nghia_XD

    biết vẽ polygon

  • Members
  • PipPip
  • 76 Bài viết
Điểm đánh giá: 5 (bình thường)

Đã gửi 21 July 2010 - 10:25 PM

Trong trường hợp mình break chẳng hạn. giờ mình muốn nối lại với nhau. ai có lisp như vậy cho mình xin với,
  • 0

Xây dựng dân dụng và công nghiệp


#2 hdg2318

hdg2318

    biết lệnh mirror

  • Members
  • PipPipPip
  • 158 Bài viết
Điểm đánh giá: 31 (tàm tạm)

Đã gửi 25 July 2010 - 09:55 PM

ý bạn là 1 đường dã bị break thành 2 đoạn, giờ bạn muốn nối nó lại???

(defun C:lJ (/ ob1 ob2 ob3 ent1 ent2 ent3 s1 e1 l1 s2 e2 l2 
p1 p2 p3 p4 p5 ang1 ang2 loop lineerr test mloop)
(graphscr)
(defun lineerr(err)
(if (and (/= err "Function cancelled")(/= err "quit / exit abort"))
(progn
(princ (strcat "\n>>Error: " err))
(princ)
)
(princ)
)
(if (and ob1 (/= ob1 "Exit"))(redraw (car ob1) 4))
(if (and ob2 (/= ob2 "Exit"))(redraw (car ob2) 4))
(command "_.UNDO" "_End")
(setvar "cmdecho" 1)
(setq *error* olderr)
)
(setvar "cmdecho" 0)
(setq olderr *error*
*error* lineerr
mloop T
);** setq end **
(command "_.UNDO" "_Group")
(while mloop
(setq loop T)
(while loop
(initget "Exit")
(setq ob1 (entsel "\n>>> Select the first Line or [Exit]: "))
(cond
((= ob1 "Exit")(exit))
((= ob1 nil)(princ "None found."))
((progn
(setq test (cdr (assoc 0 (entget (car ob1)))))
(if (/= test "LINE")(princ "This is not a Line")(setq loop nil))
))
)
);** while end **
(setq ent1 (entget (car ob1))
loop T
test nil
);** setq end **
(redraw (car ob1) 3)
(while loop
(initget "Exit")
(setq ob2 (entsel "\n>>> Select the second Line or [Exit]: "))
(cond
((= ob2 "Exit")(exit))
((= ob2 nil)(princ "None found."))
((eq (car ob1) (car ob2))(princ "Duplicated select"))
((progn
(setq test (cdr (assoc 0 (entget (car ob2)))))
(if (/= test "LINE")(princ "This is not a Line")(setq loop nil))
))
)
);** while end **
(setq ent2 (entget (car ob2))
s1 (cdr (assoc 10 ent1))
e1 (cdr (assoc 11 ent1))
l1 (cdr (assoc 8 ent1))
s2 (cdr (assoc 10 ent2))
e2 (cdr (assoc 11 ent2))
l2 (cdr (assoc 8 ent2))
p1 (distance s1 s2)
p2 (distance e1 s2)
p3 (distance s1 e2)
p4 (distance e1 e2)
la 1
lin 1
test nil
);** setq end **
(if (> p1 p2)
(progn
(setq p5 p1
sp (list '10 (car s1) (cadr s1))
ep (list '11 (car s2) (cadr s2))
);** setq end **
);** progn end **
(progn
(setq p5 p2
sp (list '10 (car e1) (cadr e1))
ep (list '11 (car s2) (cadr s2))
);** setq end **
);** progn end **
);** if end **
(if (< p5 p3)
(progn
(setq p5 p3
sp (list '10 (car s1) (cadr s1))
ep (list '11 (car e2) (cadr e2))
);** setq end **
);** progn end **
);** if end **
(if (< p5 p4)
(progn
(setq p5 p4
sp (list '10 (car e1) (cadr e1))
ep (list '11 (car e2) (cadr e2))
);** setq end **
);** progn end **
);** if end **
(setq ang1 (atof (angtos (angle (cdr sp) (cdr ep)) 0 3))
ang2 (atof (angtos (angle s1 e1) 0 3))
);** setq end **
(if (>= ang1 270) (setq ang1 (- ang1 180)))
(if (>= ang1 180) (setq ang1 (- ang1 180)))
(if (>= ang2 270) (setq ang2 (- ang2 180)))
(if (>= ang2 180) (setq ang2 (- ang2 180)))
(if (= ang1 ang2)
(progn
(command "_.Erase" ob2 "")
(setq ent1 (subst sp (assoc 10 ent1) ent1)
ent1 (subst ep (assoc 11 ent1) ent1)
);** setq end **
(entmod ent1)
(princ "Done")
(terpri)
);** progn end **
(progn
(redraw (car ob1) 4)
(redraw (car ob2) 4)
(alert "These 2 lines cannot be joined. Because\nthey are parellel or intersecting\nor they are not coplanar.")
);** else progn end **
);** if end **
)
(setq *error* olderr)
(command "_.UNDO" "_Group")
(setvar "cmdecho" 1)
(prin1)
);** end of lisp **

(defun c:LINEJOIN()(c:LJ))

(princ)
bạn thử dùng lisp trên xem sao.
  • 1

Có 2 cách để nhìn đời:
1 là : coi như chẳng có gì là huyền diệu
2 là : coi như mọi điều đều huyền diệu


Click here