Chuyển đến nội dung
Diễn đàn CADViet
h123ngoisao

(Xin lisp) Cắt đoạn thẳng theo yêu cầu.

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

Chào các bác.

Các bác viết giúp em lisp theo yêu cầu như sau:

Cắt (các) đoạn thẳng được chọn (hoặc chọn layer -  vì các đoạn thẳng sẽ thuộc layer này) thành 2 đoạn dài 20mm, đầu đoạn thẳng được tạo thành sẽ thụt lại so với đầu đoạn thẳng gốc là 5mm, phần giữa thừa sẽ bỏ đi. 

Cụ thể giống như trong hình minh họa.

Cám ơn các bác đã quan tâm!

 

 

 

 

1026517891_Cutline.jpg.da144c222580c05e6822dbfc18abbeca.jpg

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

Thiếu giữ liệu, thiếu file cad minh họa, không hiểu 20mm là gì (cad không sử dụng đơn vị đo lường chiều dài nhé) cad chỉ có đơn vị Cad thôi. Có chắc là muốn xóa đi không? xóa đi lấy gì để kiểm tra, Layer và màu sắc đối tượng sau khi hiệu chỉnh là gì, có cần xử lý với Spline + Polyline không?

 

 

Bạn cần kiểm tra lại cách đăng bài trong Forum nhé (đọc nội quy lại nhé)

(defun c:t11111(/ ob p1_diemdau p2_diem_t2 p3_diem_t3 p4_diemcuoi)
  ;theo yeu cau cua cadvieter tai https://www.cadviet.com/forum/topic/179486-xin-lisp-c%E1%BA%AFt-%C4%91o%E1%BA%A1n-th%E1%BA%B3ng-theo-y%C3%AAu-c%E1%BA%A7u/
  ; yeu cau B1-quet chon cac doi tuong la LINE, thuoc Layer ?
  ; List tu chon 4 diem tren Line da chon de tao lai thanh doi tuong moi (da cat)

  ;B1: quet chon doi tuong
  (foreach dt (vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget '((-4 . "<OR")								      
								      (-4 . "<AND") (0 . "LWPOLYLINE") (90 . 2) (-4 . "AND>")
								      (0 . "LINE")
								   (-4 . "OR>")
								   ))
							  )))
    ;(setq dt (car(entsel)))
    (setq ob (vlax-ename->vla-object dt)
	  p1_diemdau (vlax-curve-getpointatdist ob 5)
	  p2_diem_t2 (vlax-curve-getpointatdist ob 25)

	  p3_diem_t3 (vlax-curve-getpointatdist ob (- (vlax-curve-getDistAtParam ob (vlax-curve-getEndParam ob)) 25))
	  p4_diemcuoi (vlax-curve-getpointatdist ob (- (vlax-curve-getDistAtParam ob (vlax-curve-getEndParam ob)) 5))
	  )
    (if (and p1_diemdau p2_diem_t2)
      (entmakex
	(list (cons 0 "LINE") (cons 8 "Net moi") (cons 10 p1_diemdau) (cons 11 p2_diem_t2) (cons 62 1)))
      )
    (if (and p3_diem_t3 p4_diemcuoi)
      (entmakex
	(list (cons 0 "LINE") (cons 8 "Net moi") (cons 10 p3_diem_t3) (cons 11 p4_diemcuoi) (cons 62 1)))
      )


    ;Neu muon xoa thi de lai dong nay
    ;(entdel dt)
    ;Muon xoa thi sua dong nay
    
    )
  
  (princ)
  )

 

  • 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
23 phút trước, quansla đã nói:

Thiếu giữ liệu, thiếu file cad minh họa, không hiểu 20mm là gì (cad không sử dụng đơn vị đo lường chiều dài nhé) cad chỉ có đơn vị Cad thôi. Có chắc là muốn xóa đi không? xóa đi lấy gì để kiểm tra, Layer và màu sắc đối tượng sau khi hiệu chỉnh là gì, có cần xử lý với Spline + Polyline không?

 

 

Bạn cần kiểm tra lại cách đăng bài trong Forum nhé (đọc nội quy lại nhé)

 

Cám ơn bạn đã trả lời và nhắc nhở. Mình sẽ đọc lại nội quy.

Mình đã thử lisp của bạn, đơn vị đã đúng. Mình bổ sung dữ liệu:

- Thêm tùy chọn là chọn đối tượng hoặc layer ( các đối tượng thuộc layer đó sẽ được xử lý giống như yêu cầu).

- Đối tượng được chọn (hoặc đối tượng thuộc layer được chọn) sẽ chuyển sang layer mới có tên layer cũ + đuôi "-1" và được ẩn đi.

- Màu sắc đối tượng sau khi hiệu chỉnh là màu đỏ.

- Có cần xử lý với Spline & Polyline.

 

 

23 phút trước, quansla đã nói:

(defun c:t11111(/ ob p1_diemdau p2_diem_t2 p3_diem_t3 p4_diemcuoi)
  ;theo yeu cau cua cadvieter tai https://www.cadviet.com/forum/topic/179486-xin-lisp-c%E1%BA%AFt-%C4%91o%E1%BA%A1n-th%E1%BA%B3ng-theo-y%C3%AAu-c%E1%BA%A7u/
  ; yeu cau B1-quet chon cac doi tuong la LINE, thuoc Layer ?
  ; List tu chon 4 diem tren Line da chon de tao lai thanh doi tuong moi (da cat)

  ;B1: quet chon doi tuong
  (foreach dt (vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget '((-4 . "<OR")								      
								      (-4 . "<AND") (0 . "LWPOLYLINE") (90 . 2) (-4 . "AND>")
								      (0 . "LINE")
								   (-4 . "OR>")
								   ))
							  )))
    ;(setq dt (car(entsel)))
    (setq ob (vlax-ename->vla-object dt)
	  p1_diemdau (vlax-curve-getpointatdist ob 5)
	  p2_diem_t2 (vlax-curve-getpointatdist ob 25)

	  p3_diem_t3 (vlax-curve-getpointatdist ob (- (vlax-curve-getDistAtParam ob (vlax-curve-getEndParam ob)) 25))
	  p4_diemcuoi (vlax-curve-getpointatdist ob (- (vlax-curve-getDistAtParam ob (vlax-curve-getEndParam ob)) 5))
	  )
    (if (and p1_diemdau p2_diem_t2)
      (entmakex
	(list (cons 0 "LINE") (cons 8 "Net moi") (cons 10 p1_diemdau) (cons 11 p2_diem_t2) (cons 62 1)))
      )
    (if (and p3_diem_t3 p4_diemcuoi)
      (entmakex
	(list (cons 0 "LINE") (cons 8 "Net moi") (cons 10 p3_diem_t3) (cons 11 p4_diemcuoi) (cons 62 1)))
      )


    ;Neu muon xoa thi de lai dong nay
    ;(entdel dt)
    ;Muon xoa thi sua dong nay
    
    )
  
  (princ)
  )

 

 

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

Bạn yêu cầu kiểu thêm thêm như vậy chẳng ai giúp đâu.

Người biết viết lisp ngày càng ít lên tiếng mà cứ giải quyết đc 1 yêu cầu rồi sau đó lại bị bổ sung thêm yêu cầu khác như vậy thì quả là chẳng hứng thú tí nào.

Nên yêu cầu 1 lần 1 thôi.

  • 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
1 giờ trước, alisp đã nói:

Bạn yêu cầu kiểu thêm thêm như vậy chẳng ai giúp đâu.

Người biết viết lisp ngày càng ít lên tiếng mà cứ giải quyết đc 1 yêu cầu rồi sau đó lại bị bổ sung thêm yêu cầu khác như vậy thì quả là chẳng hứng thú tí nào.

Nên yêu cầu 1 lần 1 thôi.

Do bạn Quansla nói yêu cầu viết lisp của mình bị thiếu dữ liệu nên mình mới bổ sung. Cũng là do trước đó mình chưa đọc qua nội quy!

  • 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

cho 1 like cho @alisp

Cười 

 

 

Với chủ thớt:

1. Không cần thiết phải thêm lựa chọn layer làm gì, dùng lệnh Layiso (chú ý thiết lập Fezzen gì đấy) hoặc đơn giản dùng Qslect hoặc khó hơn ý dùng Fiel là được phần quét chọn toàn bộ đối tượng thuộc layer

 

2. Bạn có chắc muốn ẩn layer của đối tượng dài 20 đơn vị sau khi kết thúc lệnh (thử nghĩ xem nếu chạy Lisp xong mà màn hình không có hiển thị gì thay đổi thì làm sao?)

 

3. Muốn ẩn đối tượng có thể sử dụng Layoff rất đơn giản

 

4. Có chút nhầm lẫn rất rất không lên sử dụng với Spline, mà bạn làm cái gì mà có yêu cầu này vậy, bản vẽ để test có thể gửi lên không

 

Lisp viết lại thêm yêu cầu đổi tên layer và để màu đối tượng là màu 1 (red)

(defun c:t11111(/ ob p1_diemdau p2_diem_t2 p3_diem_t3 p4_diemcuoi)
  ;theo yeu cau cua cadvieter tai https://www.cadviet.com/forum/topic/179486-xin-lisp-c%E1%BA%AFt-%C4%91o%E1%BA%A1n-th%E1%BA%B3ng-theo-y%C3%AAu-c%E1%BA%A7u/
  ; yeu cau B1-quet chon cac doi tuong la LINE, thuoc Layer ?
  ; List tu chon 4 diem tren Line da chon de tao lai thanh doi tuong moi (da cat)

  ;B1: quet chon doi tuong
  (foreach dt (vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget '((-4 . "<OR")								      
								      (-4 . "<AND") (0 . "LWPOLYLINE") (90 . 2) (-4 . "AND>")
								      (0 . "LINE")
								      ;(0 . "SPLINE")
								   (-4 . "OR>")
								   ))
							  )))
    ;(setq dt (car(entsel)))
    (setq ob (vlax-ename->vla-object dt)
	  p1_diemdau (vlax-curve-getpointatdist ob 5)
	  p2_diem_t2 (vlax-curve-getpointatdist ob 25)

	  p3_diem_t3 (vlax-curve-getpointatdist ob (- (vlax-curve-getDistAtParam ob (vlax-curve-getEndParam ob)) 25))
	  p4_diemcuoi (vlax-curve-getpointatdist ob (- (vlax-curve-getDistAtParam ob (vlax-curve-getEndParam ob)) 5))
	  )


    ;(if (= (cdr(assoc 0 (entget dt))) "SPLINE")
      ;(setq p3_diem_t3 (polar p4_diemcuoi (angle p3_diem_t3 p4_diemcuoi ) 20)))
    (if (and p1_diemdau p2_diem_t2)
      (entmakex
	(list (cons 0 "LINE") (cons 8 (strcat (cdr(assoc 8 (entget dt))) "-1")) (cons 10 p1_diemdau) (cons 11 p2_diem_t2) (cons 62 1)))
      )
    (if (and p3_diem_t3 p4_diemcuoi)
      (entmakex
	(list (cons 0 "LINE") (cons 8 (strcat (cdr(assoc 8 (entget dt))) "-1")) (cons 10 p3_diem_t3) (cons 11 p4_diemcuoi) (cons 62 1)))
      )


    ;Neu muon xoa thi de lai dong nay
    ;(entdel dt)
    ;Muon xoa thi sua dong nay
    
    )
  
  (princ)
  )

 

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

@quansla

Ý mình là muốn ẩn đi layer của đối tượng được chọn. Đối tượng sau khi hiệu chỉnh sẽ cho vào layer mới.

Do mình không làm việc nhiều với layer nên mới yêu cầu như vậy.

Hiện tại mình không có file test để gửi bạn tham khảo.

Cám ơn bạn!

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

×