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

Nhờ viết lisp căn dãn khoảng cách giữa các đối tượng

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

Lời đầu tiên mình xin thân chào tất cả anh em diễn đàn, trong quá trình dùng cad mình gặp một vấn đề như sau, mình hay căn chỉnh khoảng cách đều giữa các mặt cắt ngang dầm (có thể là Block) để lọt vào khung trong khổ giấy, khoảng cách phụ thuộc vào số lượng ít hay nhiều mặt cắt, mỗi lần như thế chỉnh lại hơi thủ công, vì rất nhiều mặt cắt ạ.Nay xin mạn phép nhờ các anh em viết một lisp có tính năng tương tự như thế không ạ (tại em tìm trên diễn đàn rồi mà chưa có bài nào có nội dung tương tự).Nội dung lisp:

  • Đánh lệnh ->quét chọn từng đối tượng(ở đây là từng mặt cắt ngang dầm hoặc nếu là block thì quét chọn hết)->chọn điểm chuẩn từng đối tượng(nếu block thì bỏ qua vì lấy theo điểm chèn block)->chọn phương X,Y-->Nhập khoảng cách (hoặc click 2 điểm để lấy khoảng cách trên màn hình hoặc dãn động thì tuyệt :))

Em xin chân thành cảm ơn anh em!

Capture.PNG

  • Vote tăng 2
  • Vote giảm 2

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

Cảm ơn anh đã quan tâm, em đã gửi bản vẽ đính kèm đây ạ, có gì diễn đạt không kỹ lắm mong anh em bỏ qua nhé, cảm ơn

TEST.dwg

(Defun c:te (/ ss p1 p2 x a e)
  (Setq ss (ssget '(( 0 . "INSERT"))))
  (setq p1 (getpoint  "pick diem chen")
	p2 (getpoint p1 "pick phuong, khoang cach"))
  (setq x (distance p1 p2) a (angle p1 p2))
  (while (setq e (ssname ss 0))
    (setq ss (ssdel e ss))
    (command "copy" e "" "_NON" (cdr (assoc 10 (entget e))) "_NON" p1)
    (setq p1 (polar p1 a x)))
  )

ezgif.com-gif-maker.gif.ae785db1323bef504b5db86519e564ae.gif

  • Like 2
  • 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
2 giờ trước, Doan Nguyen Van đã nói:

(Defun c:te (/ ss p1 p2 x a e)
  (Setq ss (ssget '(( 0 . "INSERT"))))
  (setq p1 (getpoint  "pick diem chen")
	p2 (getpoint p1 "pick phuong, khoang cach"))
  (setq x (distance p1 p2) a (angle p1 p2))
  (while (setq e (ssname ss 0))
    (setq ss (ssdel e ss))
    (command "copy" e "" "_NON" (cdr (assoc 10 (entget e))) "_NON" p1)
    (setq p1 (polar p1 a x)))
  )

ezgif.com-gif-maker.gif.ae785db1323bef504b5db86519e564ae.gif

Đầu tiên rất cảm ơn bác đã giúp đỡ, em đã dùng và có một số vấn đề mong bác xem xét điều chỉnh thêm được không ạ,

Nội dung như sau:

1.Sau khi dùng lệnh->quét chọn đối tượng là block -> pick chọn điểm từ trái qua phải  (hoặc từ trên xuống dưới)-> ra kết quả sắp nó sắp xếp ngược lại bác à.Bác có thể điều chỉnh theo thói quen em hay dùng được không ạ (Em có gửi bản vẽ đi kèm)

2.Bác có thể thêm chức năng ví dụ thay vì pick chọn 2 điểm ra khoảng cách giờ mình pick 2 điểm thì tất cả đối tượng dãn đều nằm giữa em điểm Pick được không ạ.(Em có gửi bản vẽ đi kèm)

3.Mong bạn thêm 1 chức năng căn dãn cho đối tượng là bất kỳ(rời rạc) - Chế độ này phụ thuộc vào từng vùng quét chọn đối tượng (ví dụ: ở đây mình có 5 mặt cắt dầm thì mỗi mặt cắt ta quét chọn vùng 1 lần) --->sau đó chọn thêm điểm chuẩn để làm điểm cơ sở dãn ạ (Em có gửi bản vẽ đi kèm)

Em văn chương hơi kém nên bác thông cảm nhé, mong bác giúp đỡ, cảm ơn nhiều ạ...!

 

 

 

TEST 1.dwg

  • Vote tăng 1
  • Vote giảm 2

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

Chào bạn. 

Mình xin giải thích như sau:

1. Có thể do cách chọn của mình khiến bạn thao tác sai, ở đây bạn chọn từng đối tượng theo thứ tự cần sắp xếp.

2.3: ở đây trong bv của bạn có 1 TH nên mình mới viết cho riêng TH này. Phần yêu cầu thêm bạn nên chú ý nói ngay từ đầu tránh người viết phải tốn nhiều thời gian vào việc sửa code cho bạn.

  • Like 2

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
30 phút trước, Doan Nguyen Van đã nói:

Chào bạn. 

Mình xin giải thích như sau:

1. Có thể do cách chọn của mình khiến bạn thao tác sai, ở đây bạn chọn từng đối tượng theo thứ tự cần sắp xếp.

2.3: ở đây trong bv của bạn có 1 TH nên mình mới viết cho riêng TH này. Phần yêu cầu thêm bạn nên chú ý nói ngay từ đầu tránh người viết phải tốn nhiều thời gian vào việc sửa code cho bạn.

-Cảm ơn bạn đã nhắc nhở, mình xin lỗi, nội dung bài viết lúc đầu mình cũng nói ở trên nhưng chắc diễn đạt chưa hết ý lắm, với thêm bản vẽ chỉ để đối tượng là Block nên thành ra như thế, lần sau mình sẽ chú ý hơn, mong bạn thông cảm.

-Trường hợp 1 chắc do mình quét chọn hết 1 lúc nên nó ra như thế, còn chọn từng đối tượng thì rất tốt ạ.

-Bạn có thể bớt chút thời gian giúp mình trường hợp 2,3 không ạ, chân thành cảm ơn.

  • Vote tăng 1
  • Vote giảm 3

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

Đọc đề về trường hợp 3 thì thấy đúng ra phải là cạnh cho nhiều nhóm đối tượng chứ ko phải nhiều đối tượng.

Kịch bản chủ thớt đưa ra tôi nghỉ sẽ rối trong khi thực hiện lệnh.

Tôi nghỉ kịch bản sau đở rối hơn:

-Chọn 2 điểm làm canh lề.

-Chọn nhóm đối tượng đầu tiên. Enter kết thúc chọn. Chọn điểm canh của nhóm. Cho lựa chọn kễt thúc hoặc canh tiếp nếu canh tiếp thì lại chọn nhóm và điểm canh của nhóm.

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

Đọc đề về trường hợp 3 thì thấy đúng ra phải là cạnh cho nhiều nhóm đối tượng chứ ko phải nhiều đối tượng.

Kịch bản chủ thớt đưa ra tôi nghỉ sẽ rối trong khi thực hiện lệnh.

Tôi nghỉ kịch bản sau đở rối hơn:

-Chọn 2 điểm làm canh lề.

-Chọn nhóm đối tượng đầu tiên. Enter kết thúc chọn. Chọn điểm canh của nhóm. Cho lựa chọn kễt thúc hoặc canh tiếp nếu canh tiếp thì lại chọn nhóm và điểm canh của nhóm.

Dạ, em cảm ơn anh đã đóng góp ý kiến, tại em không biết gì về Lisp nên mới nêu ý tưởng như thế ạ, biết là rất khó nên mong anh em bớt chút thời gian giúp đỡ với ạ

  • Vote giảm 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

Nhìn chung đề bài cũng rõ ràng, các mặt cắt cũng khá giống nhau về mặt cắt, chỉ khác chi tiết đai, cốt thép và tên mặt cắt: 1-1, 2-2, 3-3... phải không @xaydungcadviet

Trường hợp 3, lấy "điểm chuẩn" là tâm cạnh đáy dầm: đây là 1 đường lwpolyline, một lớp riêng biệt ("kata net thay") nên cũng thuận lợi dò tìm các "điểm chuẩn" khác để move nhóm đối tượng khác theo khoảng cách của người dùng yêu cầu.

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

Nhìn chung đề bài cũng rõ ràng, các mặt cắt cũng khá giống nhau về mặt cắt, chỉ khác chi tiết đai, cốt thép và tên mặt cắt: 1-1, 2-2, 3-3... phải không @xaydungcadviet

Trường hợp 3, lấy "điểm chuẩn" là tâm cạnh đáy dầm: đây là 1 đường lwpolyline, một lớp riêng biệt ("kata net thay") nên cũng thuận lợi dò tìm các "điểm chuẩn" khác để move nhóm đối tượng khác theo khoảng cách của người dùng yêu cầu.

Dạ cảm ơn chú @thiep quan tâm, các mặt cắt ở đây cháu làm ví dụ là bằng nhau nhưng đôi khi cũng khác nhau đấy ạ, tại dầm lớn, dầm nhỏ mà chú.Dạ cháu chỉ nêu quan điểm chứ còn chuyên môn về ý tưởng theo Lisp thì cháu thua, hj

1 giờ} trướ}c, quocmanh04tt đã nói:

Mình thử 1 lisp xem sao. Lệnh SXY.

SXY.rar

Cảm ơn anh rất nhiều @quocmanh04tt đã bớt chút thời gian để viết Lisp, em đã dùng qua mọi thứ rất tốt ạ, nhưng em đang thắc mắc một chỗ là đôi khi em muốn dãn theo phương X hoặc phương Y thì nó lại theo phương ngược lại ạ, ý của em là anh có thể thêm là mặc định là 1 phương nào đó luôn được không; hoặc giống Lisp của bác @Doan Nguyen Van dùng lệnh -->kích theo phương nào thì nó dãn theo phương đó luôn, em chân thành cảm ơn anh em đã quan tâm.

P/s: Xin lỗi bác @thiep hôm nay cháu vote tăng và like nhiều quá nên không vote tăng hoặc like cho bác được, mong bác thông cảm hì :)

  • Vote giảm 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

Giờ mới rảnh viết lại cho bạn đây:

Phần rời rạc khi hỏi pick hướng thì Enter để chọn tiếp tập chọn khác.

Xem cái bộ Layer quen quen, hình như file bạn còn thiếu vài layer kata thep H, thep V ...thì phải ^^

584215259_ezgif.com-gif-maker(1).gif.e66de4b8f2e829f68bc682517c0d9210.gif

 

GDB-Gian Deu Block (object).rar

  • Vote tăng 2

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
7 giờ trước, Doan Nguyen Van đã nói:

Giờ mới rảnh viết lại cho bạn đây:

Phần rời rạc khi hỏi pick hướng thì Enter để chọn tiếp tập chọn khác.

Xem cái bộ Layer quen quen, hình như file bạn còn thiếu vài layer kata thep H, thep V ...thì phải ^^


(Defun c:te (/ ss p1 p2 x a e lst)
  (setq lst (list))
  (Setq ss (ssget ))
  
  (setq p1 (getpoint  "pick diem chen hoac diem goc"))
 (if  (setq p2 (getpoint p1 "pick phuong, khoang cach")) (progn
  (setq x (distance p1 p2) a (angle p1 p2))
  (while (setq e (ssname ss 0))
    (setq ss (ssdel e ss))
    (command "copy" e "" "_NON" (cdr (assoc 10 (entget e))) "_NON" p1)
    (setq p1 (polar p1 a x)))
  ) (progn
   (setq lst (append lst (list (list ss p1))))
   (while (and (setq ss (ssget))
	       (setq p1 (getpoint "Pick diem goc")))
     (setq lst (append lst (list (list ss p1))))
     )
   (setq p1 (getpoint  "pick diem chen")
	 p2 (getpoint p1 "pick phuong, khoang cach"))
   (setq x (distance p1 p2) a (angle p1 p2))
   (while (setq l1 (car lst))
     (setq lst (cdr lst))
    (command "copy" (car l1) "" "_NON" (cadr l1) "_NON" p1)
    (setq p1 (polar p1 a x)))

   )))

584215259_ezgif.com-gif-maker(1).gif.e66de4b8f2e829f68bc682517c0d9210.gif

Hehe, mình sài kata nhưng vẽ bên model nên mình hay đóng khối lại rồi scale lên, cơ bản thì nó đã sắp xếp ổn rồi, nhưng đôi khi cũng phải cần sắp xếp lại nên nảy ý tưởng như thế hj, cảm ơn bạn @Doan Nguyen Van đã giúp đỡ, Lisp sài rất ổn,  nhưng mà bạn có thể chỉnh thêm trường hợp pick chọn giới hạn các mặt cắt đã chọn tự dãn đều nằm trong 2 điểm pick không (giống chế độ Fit ấy), cảm ơn bạn

P/S: Hết Vote tăng được cho bác, em vote tăng nhiều hết lượt rồi, thông cảm nhé hj

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

Cảm ơn anh rất nhiều @quocmanh04tt đã bớt chút thời gian để viết Lisp, em đã dùng qua mọi thứ rất tốt ạ, nhưng em đang thắc mắc một chỗ là đôi khi em muốn dãn theo phương X hoặc phương Y thì nó lại theo phương ngược lại ạ, ý của em là anh có thể thêm là mặc định là 1 phương nào đó luôn được không; hoặc giống Lisp của bác @Doan Nguyen Van dùng lệnh -->kích theo phương nào thì nó dãn theo phương đó luôn, em chân thành cảm ơn anh em đã quan tâm.

Lisp của mình chỉ đổi vị chứ không thay phương (Kiên trì đường lối).

Có nghĩa là: ban đầu phương nào (X hoặc Y) thì vẫn giữ nguyên phương đó, chỉ co giãn khoảng cách theo nhu cầu.

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

Lisp của mình chỉ đổi vị chứ không thay phương (Kiên trì đường lối).

Có nghĩa là: ban đầu phương nào (X hoặc Y) thì vẫn giữ nguyên phương đó, chỉ co giãn khoảng cách theo nhu cầu.

Ok. mình hiểu rồi, cảm ơn bác nhiều đã giúp đỡ, chúc bác thật nhiều sức khỏe nhé :)

 

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ào lúc 20/4/2020 tại 08:25, Doan Nguyen Van đã nói:

(Defun c:te (/ ss p1 p2 x a e)
  (Setq ss (ssget '(( 0 . "INSERT"))))
  (setq p1 (getpoint  "pick diem chen")
	p2 (getpoint p1 "pick phuong, khoang cach"))
  (setq x (distance p1 p2) a (angle p1 p2))
  (while (setq e (ssname ss 0))
    (setq ss (ssdel e ss))
    (command "copy" e "" "_NON" (cdr (assoc 10 (entget e))) "_NON" p1)
    (setq p1 (polar p1 a x)))
  )

ezgif.com-gif-maker.gif.ae785db1323bef504b5db86519e564ae.gif

A @Doan Nguyen Van cho e hỏi có thể chỉnh lại lisp này 1 tí ko ạ. Sau khi thực hiện lệnh xong nếu muốn undo lại thì phải thực hiện rất nhiều lần undo mới trở về như trước khi dùng lisp. với nhiều đối tượng thì nó hơi bất tiện tí ạ. cám ơn a. 

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, hnvt501 đã nói:

A @Doan Nguyen Van cho e hỏi có thể chỉnh lại lisp này 1 tí ko ạ. Sau khi thực hiện lệnh xong nếu muốn undo lại thì phải thực hiện rất nhiều lần undo mới trở về như trước khi dùng lisp. với nhiều đối tượng thì nó hơi bất tiện tí ạ. cám ơn a. 

Chưa rõ lắm, bạn gửi bv lên hoặc gửi qua zalo: 0976379894 mình check

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
8 phút trước, Doan Nguyen Van đã nói:

Chưa rõ lắm, bạn gửi bv lên hoặc gửi qua zalo: 0976379894 mình check

Tức là Doan cài undo begin đầu lisp và undo end cuối lisp thì U là được.

  • 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
22 phút trước, Doan Nguyen Van đã nói:

Chưa rõ lắm, bạn gửi bv lên hoặc gửi qua zalo: 0976379894 mình check

Bản vẽ đây a. a thử dùng lisp sau đó undo là thấy. 

TE.dwg

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
27 phút trước, Doan Van Ha đã nói:

Tức là Doan cài undo begin đầu lisp và undo end cuối lisp thì U là được.

Cháu cứ tưởng lisp lỗi phải undo ...

11 phút trước, hnvt501 đã nói:

Bản vẽ đây a. a thử dùng lisp sau đó undo là thấy. 

TE.dwg

Chợt tìm lại file mà không thấy, để mình kiếm lại sẽ sửa 

  • 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
11 phút trước, Doan Nguyen Van đã nói:

Cháu cứ tưởng lisp lỗi phải undo ...

Chợt tìm lại file mà không thấy, để mình kiếm lại sẽ sửa 

Hơi tham lam xíu nhưng mà cho e hỏi mình có cách nào có thể sắp xếp các ATT mẫu trong bản vẽ e up lên theo thứ tự không nhỉ. Ví dụ có nhiều ATT trong bản vẽ, quét chọn, kết quả sắp xếp các ATT theo thứ tự 1->2->3.

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

Hơi tham lam xíu nhưng mà cho e hỏi mình có cách nào có thể sắp xếp các ATT mẫu trong bản vẽ e up lên theo thứ tự không nhỉ. Ví dụ có nhiều ATT trong bản vẽ, quét chọn, kết quả sắp xếp các ATT theo thứ tự 1->2->3.

https://www.facebook.com/D2Lisp/posts/4120617147989937

Bạn xem qua lisp sắp xếp block này nhé. Cái này có thể áp dụng được

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

Cháu cứ tưởng lisp lỗi phải undo ...

Chợt tìm lại file mà không thấy, để mình kiếm lại sẽ sửa 

nhờ a thêm tí nữa, e có chỉnh sửa lisp 1 tí để sắp xếp các polyline, nhưng sau khi dùng thì thứ tự các polyline bị nhảy lộn xộn. ý e muốn sắp xếp nhưng vẫn giữ nguyên thứ tự các polyline. 

nhờ a chỉnh sửa giúp nhé. e cám ơn. 

te.lsp

POLYLINE.dwg

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

nhờ a thêm tí nữa, e có chỉnh sửa lisp 1 tí để sắp xếp các polyline, nhưng sau khi dùng thì thứ tự các polyline bị nhảy lộn xộn. ý e muốn sắp xếp nhưng vẫn giữ nguyên thứ tự các polyline. 

nhờ a chỉnh sửa giúp nhé. e cám ơn. 

te.lsp

POLYLINE.dwg

Mình thấy bạn có nhiều ý tưởng cùng lúc khá hay, nếu cần thì liên hệ qua zalo mình 0976379894 nhé

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

×