Chuyển đến nội dung
Diễn đàn CADViet
Đăng nhập để thực hiện theo  
dragonmini88

giúp mình làm Lisp nối so le các đoạn thẳng song song

Các bài được khuyến nghị

Mình có sẵn cái lisp này nhưng mà phải thao tác từng 2 cái line một lần.

noi line.lsp

Gõ lệnh là "2" nhé.

Nó sẽ nối 2 đối tượng (line / pline) tại đầu gần nhất lúc mình bấm chon đối tượng.
Nếu cần đổi lệnh thì edit file dòng (defun c:2()(joinObject 2)) thành (defun c:tenlenh()(joinObject 2))

  • Like 1
  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Với line nằm ngang thì dùng cái này

(defun c:noiline ( / I KEY LS LS2 N P SS SS1 )

(defun pointmininline (ent / ENTG LS LS1 PE PS)
  (setq entg (entget ent)
	ps (acet-dxf 10 entg)
	pe (acet-dxf 11 entg)
	ls (list ps pe))
  (setq ls1 (vl-sort ls '(lambda (p1 p2) (< (car p1) (car p2))
			   )
		     )
	)
  ls1
  )
(DEFUN make_lwpolyline  (list_dinh dong_lai do_day layer / dlist elist1 e_list n i)
  (SETQ n (LENGTH list_dinh))
  (SETQ dlist nil)
  (SETQ i 0)
  (WHILE (< i n)
    (SETQ dlist (APPEND dlist
                        (list_point_pline (NTH i list_dinh) do_day)
                        )
          )
    (SETQ i (1+ i))
    )

  (SETQ elist1 (LIST (CONS 0 "LWPOLYLINE")
                     (CONS 100 "AcDbEntity")
                     (CONS 410 "Model")
                     (CONS 8 layer)
                     (CONS 100 "AcDbPolyline")
                     (CONS 90 n)
                     (CONS 70 dong_lai)
 ;(cons 43 0.0)
                     (CONS 38 0.0)
                     (CONS 39 0.0)))
  (SETQ e_list nil)
  (SETQ e_list (APPEND elist1 dlist))
  (SETQ e_list (APPEND e_list (LIST '(210 0.0 0.0 1.0))))
  (ENTMAKE e_list)
  )



(setq ss (ssget '((0 . "LINE")))
      ss (acet-ss-to-list ss))
(setq ss1 (vl-sort ss '(lambda (e1 e2) (< (cadr (car (pointmininline e1)))
					 (cadr (car (pointmininline e2)))
					 )
			)
		  )
      )
(setq n (length ss1)
      i 0
      ls (list))
(initget 1 "T P")
(setq key (GETKWORD "Bat dau tu duoi Trai / Phai"))
(if (= key "T")
  (while (< i n)
    (progn
      (setq ls2 (pointmininline (nth i ss1)))
      (if ( = (rem i 2) 0)
	(setq ls (append ls (list (car ls2) (cadr ls2))))
	(setq ls (append ls (list (cadr ls2) (car ls2))))
	)
      )
    (setq i (1+ i))
    )
  (while (< i n)
    (progn
      (setq ls2 (pointmininline (nth i ss1)))
      (if ( = (rem i 2) 0)
	(setq ls (append ls (list (cadr ls2) (car ls2))))
	(setq ls (append ls (list (car ls2) (cadr ls2))))
	)
      )
    (setq i (1+ i))
    )
  )
(setq ls (mapcar '(lambda (p) (list (car p) (cadr p))) ls))
(MAKE_LWPOLYLINE ls 0 0 "ketqua")
	
(initget 1 "Y N")
(setq key (GETKWORD "Xoa line cu khong Yes / No"))
(if (= key "Y")
  (foreach n ss1 (entdel n))
  )

)
    

 

  • Like 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Tạo một tài khoản hoặc đăng nhập để nhận xét

Bạn cần phải là một thành viên để lại một bình luận

Tạo tài khoản

Đăng ký một tài khoản mới trong cộng đồng của chúng tôi. Điều đó dễ mà.

Đăng ký tài khoản mới

Đăng nhập

Bạn có sẵn sàng để tạo một tài khoản ? Đăng nhập tại đây.

Đăng nhập ngay
Đăng nhập để thực hiện theo  

×