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

[Yêu cầu] Lisp vẽ đoạn thẳng nối 2 đầu đoạn thẳng

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

Cảm ơn các anh vì đã đọc bài ạ!

Xin nhờ các anh viết giúp em 1 lisp với nội dung là vẽ 1 Pline nối 2 đầu của 2 Pline (hoặc Line) được chọn. Sau khi vẽ được Pline cần vẽ thì nối 3 đối tượng thành 1 Pline.

Layer của Pline cuối cùng là layer của Pline (Line) đầu tiên được chọn. Cách chọn đối tượng là pick hoặc quét chọn. Đầu được nối là 2 đầu gần nhau của 2 Pline (Line) được chọn (nếu được thì là 2 đầu nằm trong vùng chọn hoặc đầu gần điểm pick chọn thì tốt ạ).

Em hay phải xử lý bản vẽ chuyển từ định dạng khác sang CAD nên rất hay phải nối kiểu này và mất rất nhiều thời gian.

Rất mong các anh giúp đỡ ạ.

Em cảm ơn rất nhiều!

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

Cảm ơn các anh vì đã đọc bài ạ!

Xin nhờ các anh viết giúp em 1 lisp với nội dung là vẽ 1 Pline nối 2 đầu của 2 Pline (hoặc Line) được chọn. Sau khi vẽ được Pline cần vẽ thì nối 3 đối tượng thành 1 Pline.

Layer của Pline cuối cùng là layer của Pline (Line) đầu tiên được chọn. Cách chọn đối tượng là pick hoặc quét chọn. Đầu được nối là 2 đầu gần nhau của 2 Pline (Line) được chọn (nếu được thì là 2 đầu nằm trong vùng chọn hoặc đầu gần điểm pick chọn thì tốt ạ).

Em hay phải xử lý bản vẽ chuyển từ định dạng khác sang CAD nên rất hay phải nối kiểu này và mất rất nhiều thời gian.

Rất mong các anh giúp đỡ ạ.

Em cảm ơn rất nhiều!

Của anh nghe thì rất dễ, nhưng thực ra lại hơi khó. Hiện nay có lisp nối tương tự như trên. Nhưng yêu cầu của bạn nói không rõ là nối từ đâu. 

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

Của anh nghe thì rất dễ, nhưng thực ra lại hơi khó. Hiện nay có lisp nối tương tự như trên. Nhưng yêu cầu của bạn nói không rõ là nối từ đâu. 

Anh có thể cho em xin lisp đó được không ạ?

Còn nối từ đâu thì em có nói ở trên rồi mà anh: "Đầu được nối là 2 đầu gần nhau của 2 Pline (Line) được chọn (nếu được thì là 2 đầu nằm trong vùng chọn hoặc đầu gần điểm pick chọn thì tốt ạ)."

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

Của anh nghe thì rất dễ, nhưng thực ra lại hơi khó. Hiện nay có lisp nối tương tự như trên. Nhưng yêu cầu của bạn nói không rõ là nối từ đâu. 

 

Join_cuver.gif

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ần cho công việc thì cũng để đi kiếm tiền thì bỏ phí ra cho nhanh, còn lên chờ đợi như này thì biết bao giờ. 


Với mình xin góp ý:
Bạn biết làm thủ công mất nhiều tgian, thì người viết lisp họ cũng phải mất tgian viết chứ có biến ra được đâu. 
Họ đã có ý giúp đỡ chỉ “bát bún bò” mà không trả lời cmt là thiếu lịch sự.(nếu bạn không cmt mà ib trực tiếp rồi thì mình xin rút lại cmt này)

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

Đã cần cho công việc thì cũng để đi kiếm tiền thì bỏ phí ra cho nhanh, còn lên chờ đợi như này thì biết bao giờ. 


Với mình xin góp ý:
Bạn biết làm thủ công mất nhiều tgian, thì người viết lisp họ cũng phải mất tgian viết chứ có biến ra được đâu. 
Họ đã có ý giúp đỡ chỉ “bát bún bò” mà không trả lời cmt là thiếu lịch sự.(nếu bạn không cmt mà ib trực tiếp rồi thì mình xin rút lại cmt này)

Em cũng chẳng biết nói sao nữa. Em cũng tham gia diễn đàn từ lâu, từ ngày mới đi học.

Ngày đó, khi mới dùng CAD, em cũng hay vào hỏi linh tinh, nhờ cái nọ, cái kia. Hồi đó các anh trên diễn đàn rất nhiệt tình, giúp đỡ rất vô tư theo kiểu lấy đó làm niềm vui. Em cũng bắt đầu học viết lisp nhưng vì nhu cầu công việc không cần nhiều nên bỏ dở. Giờ chỉ thỉnh thoảng vào hỏi khi cần.

Em công nhận là em rất bất lịch sự khi không trả lời cmt của anh LuytBui. Nhưng không phải em không biết quý trọng thời gian hay công sức của người khác. Hiện tại em đang dùng khá nhiều phần mềm hoặc công cụ bản quyền dù có rất nhiều lựa chọn free hay crack.

Có lẽ tại em thấy không quen vì giờ diễn đàn hình như cái gì cũng quy ra... cơm gạo.

Có thể anh thấy... buồn cười, nhưng thực sự là em cảm thấy thế.

Có gì sai mong anh chỉ bảo thêm!

PS: Em cũng định ib anh quocmanh04tt vì chưa hiểu ý anh sao lại đăng đoạn clip lên mà không nói gì thêm. Nhưng anh nói thế này thì ib cũng hơi... ngượng.

  • 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
9 giờ trước, AutoTay.com đã nói:

 

Hồi đó các anh trên diễn đàn rất nhiệt tình, giúp đỡ rất vô tư theo kiểu lấy đó làm niềm vui. 

....

Có lẽ tại em thấy không quen vì giờ diễn đàn hình như cái gì cũng quy ra... cơm gạo.

 

Bạn Autotay nói không sai, còn nguyên nhân tại sao hồi trước khác bây giờ khác thì mỗi người chắc đều có cách lý giải khác nhau.

- Đứng trên phương diện người biết lisp thì tôi cũng đồng ý với bạn là các lisper ngày trước chủ  yếu là do đam mê code và muốn học hỏi để hoàn thiện bản thân nên có thể giúp đỡ vô vi lợi, còn bây giờ thì có lẽ họ đã đạt được mục đích đó  nên họ không tiếp tục nữa chăng? Hoặc do cơm áo gạo tiền làm mất hết nhiệt tình của họ chăng?

- Còn đứng trên phương diện người dùng thì tôi cũng hiểu là rất hiếm khi mình bỏ tiền ra mua app, ngay cả những app rẻ tiền trên Google play hay App store cũng vậy. Người dùng cad nói riêng lại càng ít muốn bỏ tiền mua lisp, cũng chẳng có gì là lạ cả. Nhiều khi tôi cũng nghĩ vui là thu nhập do bán lisp có lẽ không bằng với nghề lượm ve chai đâu bạn!! 

Còn nói về cái lisp của topic này, tôi nghĩ nếu dùng (command "PEDIT" ...) thì cũng chỉ vài dòng code, nhưng nếu không dùng command thì chắc phải vài trang code chứ không ít! Tôi không biết bác LuyTBui viết theo kiều nào chứ nếu viết kiểu sau mà giá "tô bún bò" (tính luôn tiền ship) thì quá rẻ, hề hề!!

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

Nhiều khi tôi cũng nghĩ vui là thu nhập do bán lisp có lẽ không bằng với nghề lượm ve chai đâu bạn!

Em cũng nghĩ thế. Nhất là chỉ bán được cho 1 người duy nhất. Nếu viết 1 lisp phổ thông rồi đăng lên các diễn đàn, group... để bán thì lại là chuyện khác.

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, AutoTay.com đã nói:

Em cũng nghĩ thế. Nhất là chỉ bán được cho 1 người duy nhất. Nếu viết 1 lisp phổ thông rồi đăng lên các diễn đàn, group... để bán thì lại là chuyện khác.

Chắc bạn không biết hiện nay đã có app dịch ngược vlx sang lsp? Cho nên nhiều khi chỉ bán được 1 bản rồi mất luôn code của mình. Cái app đó dù vô tình hay cố ý cũng đều nhằm mục đích diệt lispviet hết bạn ơ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 Autotay nói không sai, còn nguyên nhân tại sao hồi trước khác bây giờ khác thì mỗi người chắc đều có cách lý giải khác nhau.

- Đứng trên phương diện người biết lisp thì tôi cũng đồng ý với bạn là các lisper ngày trước chủ  yếu là do đam mê code và muốn học hỏi để hoàn thiện bản thân nên có thể giúp đỡ vô vi lợi, còn bây giờ thì có lẽ họ đã đạt được mục đích đó  nên họ không tiếp tục nữa chăng? Hoặc do cơm áo gạo tiền làm mất hết nhiệt tình của họ chăng?

- Còn đứng trên phương diện người dùng thì tôi cũng hiểu là rất hiếm khi mình bỏ tiền ra mua app, ngay cả những app rẻ tiền trên Google play hay App store cũng vậy. Người dùng cad nói riêng lại càng ít muốn bỏ tiền mua lisp, cũng chẳng có gì là lạ cả. Nhiều khi tôi cũng nghĩ vui là thu nhập do bán lisp có lẽ không bằng với nghề lượm ve chai đâu bạn!! 

....

Tôi bổ sung thêm 2 nguyên nhân :

- do đã có các lisp tương tự trên diễn đàn này.

- do người yêu cầu viết ko rõ ràng, cứ phải chạy theo "xin" số liệu, có t/hợp y/cầu thay đổi hoàn toàn so với trước đó.

(cứ nhắc đi nhắc lại bài "Viết yêu cầu và trả lời như thế nào?" cũng chán)

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

Tôi bổ sung thêm 2 nguyên nhân :

- do đã có các lisp tương tự trên diễn đàn này.

- do người yêu cầu viết ko rõ ràng, cứ phải chạy theo "xin" số liệu, có t/hợp y/cầu thay đổi hoàn toàn so với trước đó.

(cứ nhắc đi nhắc lại bài "Viết yêu cầu và trả lời như thế nào?" cũng chán)

Dạ, thực ra nhiều lúc người yêu cầu không hiểu lisp hoạt động như thế nào (nó có thể làm được những gì, trình tự ra sao...) nên yêu cầu khó mà rõ ràng ngay được ạ.

Như em, khi nhờ các anh viết lisp đều cố diễn đạt thật rõ ràng nhưng các anh vẫn phải hỏi lại.

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ề cái lisp em nhờ các anh viết. Em cũng từng cố tự giải quyết, nhưng không được như ý muốn nên mới đành phiền các anh.

Ví dụ: 

(defun  c:test ()
(setq oldcmd (getvar "cmdecho"))
(setq oldos (getvar "osmode"))
(setvar "cmdecho" 0)

(setvar "osmode" 3073)
(setq p1 (getpoint "\nFirst point")
        p2 (getpoint p1"\nSecond point"))
(setvar "osmode" oldos)
(command "pline" p1 p2 "")

(command "pedit" pause "join" "all" "" "")
(setvar "cmdecho" oldcmd)
(princ)
)

Nhược điểm của nó là sau khi vẽ được line cần vẽ thì phải chọn "line nguồn" để nối với các line còn lại.

Thêm nữa là nó nối tất cả những line (pline) chạm vào line nguồn (chỗ này em cũng không biết diễn đạt thế nào cho đúng, chắc nhìn là các anh hiểu).

Em cũng nghĩ đến FASTSEL để chọn những line chạm vào line mới tạo để nối 3 line với nhau nhưng FASTSEL không phải lệnh của CAD nên lisp không nhận. Và giả sử có giải quyết được vấn đề này thì vẫn không thể đạt được yêu cầu như #1.

Nhưng cũng rất mong các anh góp ý.

Em cảm ơn nhiều ạ!

PS: Em có nói ở trên, trước em tập tẹ học lisp nhưng do nhu cầu không dùng mấy nên bỏ dở, mong các anh đừng chê cười.

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

Sửa dùm bạn.

cadvietlisp.lsp

Dạ, em cảm ơn anh rất nhiều!

Lisp này gần như giải quyết được yêu cầu của em. Chỉ còn 1 điều là 1 vài trường hợp nó nối lung tung (như cmt trên em có nói).

Ví dụ như hình: Em chỉ muốn nối '1' - '4' - '2' nhưng nó kéo theo cả '3' vào do 3 "dính" với '2'

 

Untitled.png

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

Lisp này không viết theo kiểu ssget được đâu (hoặc nếu được cũng xét điều kiện rất khổ).
Cách đơn giản để không vơ đũa cả nắm là pick từng line/pline.

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

Lisp này không viết theo kiểu ssget được đâu (hoặc nếu được cũng xét điều kiện rất khổ).
Cách đơn giản để không vơ đũa cả nắm là pick từng line/pline.

Liệu có thể "vơ" 2 thằng '1', '2' cùng với thằng '4' vừa tạo ra để nối với nhau được không ạ?

Nếu Fastsel mà dùng được trong lisp thì hay quá.

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

truy xuất ra các điểm start point và endpoint  của 2 pline A,B rồi so sánh tìm được 2 điểm mút để vẽ 1 line C. Pedit nối A + BC lại.

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

(setq ss (ssget '((0 . "LWPOLYLINE"))))
(setq ss (ACET-SS-TO-LIST ss))

(if (< (length ss) 2)
  (exit))

(setq pl1 (car ss)
      pl2 (cadr ss))
(setq ls1 (ACET-GEOM-PLINE-POINT-LIST pl1 0)
      ls2 (ACET-GEOM-PLINE-POINT-LIST pl2 0)
      pl1s (car ls1)
      pl1e (last ls1)
      pl2s (car ls2)
      pl2e (last ls2))
(setq p3 (if (< (distance pl1s pl2s)
        (distance pl1e pl2s))
       pl1s pl1e)
      )
(setq p4 (if (< (distance pl2s pl1s)
        (distance pl2e pl1s))
       pl2s pl2e)
      )
(setq line1 (entmakex
          (list (cons 0 "line") (cons 10 p3) (cons 11 p4))))

(command "pedit" pl1 "join" line1 pl2 "" "")

  • 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

Dạ, hay quá anh ạ. Thêm 1 lựa chọn cho em, dù lisp trên cũng có thể coi là hoàn hảo.

Nhưng không phải lúc nào đầu cần nối cũng là đầu gần nhau anh ạ. Với khi đường cần nối là Pline thì nhiều khi nó nối lung tung.

 

Untitled.png

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ậy phải dùng hàm entsel từng pline , sẽ lấy điểm pick dùng cho so sánh chọn mút nào để join

(setq sel1 (entsel)

         pline1 (car sel1) diempick1 (cadr sel1))

; truy xuất startpoint , endpoint từ pline1 

; gán điểm p1 là mút gần điểm pick hơn

(setq p1 (if (< distance diempick1 startpoint) (distance diempick1 endpoint)) startpoint endpoint))

; làm nốt với pline tiếp theo ra p2 , vẽ line p1 p2

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  

×