Đến nội dung


Hình ảnh

Xin Lisp Copy Tăng Giảm Theo Độ Dốc


  • Please log in to reply
15 replies to this topic

#1 vinhxtkt

vinhxtkt

    biết pan

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

Đã gửi 24 December 2015 - 08:37 AM

Anh em ai giúp viết giúp cho mình lisp copy tăng hoặc giảm theo độ dốc với. Mình tìm trên diễn đàn chưa thấy lisp kiểu này. Mình cảm ơn nhiều


  • 0

#2 vinhxtkt

vinhxtkt

    biết pan

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

Đã gửi 29 December 2015 - 09:00 AM

Anh em ai giúp viết giúp cho mình lisp copy tăng hoặc giảm theo độ dốc với. Mình tìm trên diễn đàn chưa thấy lisp kiểu này. Mình cảm ơn nhiều

Sao ko thấy pro nào giúp vậy. Diễn đàn ai biết chia sẻ cho mình với. Thanks nhìu


  • 0

#3 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5682 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 29 December 2015 - 10:55 AM

Quá ít thông tin để giúp bạn. Gì cũng lisp, mà k thèm mô tả nó làm cái j. Diễn đàn giờ nhiều bạn kiệm lời quá :)


  • 1

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#4 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6009 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 29 December 2015 - 03:41 PM

Quá ít thông tin để giúp bạn. Gì cũng lisp, mà k thèm mô tả nó làm cái j. Diễn đàn giờ nhiều bạn kiệm lời quá :)

Hề hề hề,

Không phải là kiệm lời mà là quá tự tin, cho rằng mọi người ai cũng gỏi như mình nên cứ nói ít hiểu nhiều vậy thôi. Ai không hiểu thì tự tìm mà hiểu, không cần giải thích nhiều.    Cơ khổ.


  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#5 tien2005

tien2005

    biết lệnh properties

  • Members
  • PipPipPipPip
  • 257 Bài viết
Điểm đánh giá: 94 (tàm tạm)

Đã gửi 29 December 2015 - 06:38 PM

3 KHÔNG = không hiểu, không biết, không giúp


  • 0

#6 haanh

haanh

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 2875 Bài viết
Điểm đánh giá: 1554 (rất tốt)

Đã gửi 30 December 2015 - 12:10 AM

Quá ít thông tin để giúp bạn. Gì cũng lisp, mà k thèm mô tả nó làm cái j. Diễn đàn giờ nhiều bạn kiệm lời quá :)

 

Chắc là anh chủ thớt vừa đi ăn cỗ đám ma về vẫn còn đang líu tìu tìu, nên kiệm lời bác ạ!

Bỗng dưng em nhớ câu chuyện vui dân gian:

 

Có anh chàng vốn tính tham ăn, hễ ngồi vào bàn ăn là anh ta lại quan sát ...trận địa rồi rotate mâm cỗ một góc sao cho đĩa thức ăn ngon nhất lọt vào tầm gắp. Và thế là anh ta cứ gắp lia lịa , vì thế anh ta ít nói chuyện trong bữa ăn.
Một lần đi ăn cỗ đám ma nhà hàng xóm , ngồi vào mâm là anh bắt đầu trổ nghề....LÁI MÁY GẶT ĐẬP LIÊN HỢP.

Mấy ông khách cùng mâm ức chế quá mới tìm cách hỏi chuyện để hãm bới tốc độ... gặt đập , bèn hỏi:
- Nhà ông ở đâu???
- Đây! (anh ta đáp).

- Vợ ông làm nghề gì???

- Buôn! (anh ta đáp)
- Thế ông sinh được mấy cháu???

Anh ta bèn giơ một ngón tay trỏ của bàn tay trái chỉ thẳng lên trời ra hiệu có một con.

- Thế cha mẹ ông có khỏe không???

Anh ta bèn gật đầu....

 

P/s:  Dù sao em cũng xin được  cảm ơn anh chủ thớt, vì qua thớt này em tìm kiếm được một con lisp hữu ích cho bản thân em :Lisp C+ : Copy nhiều text, mỗi text nếu có chứa số ở cuối chuỗi sẽ được tăng lên 1 đơn vị khi copy

 

 


  • 0

“Sống trong đời sống cần có một tấm lòng / Để làm gì em biết không ? / Để gió cuốn đi, để gió cuốn đi...”


#7 vinhxtkt

vinhxtkt

    biết pan

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

Đã gửi 30 December 2015 - 08:35 AM

Anh em ai giúp viết giúp cho mình lisp copy tăng hoặc giảm theo độ dốc với. Mình tìm trên diễn đàn chưa thấy lisp kiểu này. Mình cảm ơn nhiều

Không phải tiết kiệm lời mà tưởng nói như vậy là hiểu rồi chứ. 

Trong diễn đàn có lisp copy tăng giảm với một hằng số cho trước. nhưng mình muốn một  lisp copy tăng giảm theo độ dốc cho trước.

Nó có dạng kiểu như thế này: Ta copy một số từ điểm A đến điểm B. Đầu tiên nó tự nhận text tại điểm A, sau đó ta nhập dộ dốc cần copy, sau đó copy đến điểm B,  lisp tự nhận khoảng cách từ A đến B và cộng hoặc trừ với khoảng chênh lệch do độ dốc từ A đến B.

VD như sau: Từ A đến B có độ dốc 2%. điểm A có cao độ 10m, khoảng cách từ A đến B là 10m (cái khoảng cách này là mình VD thôi, còn  lisp trong bài toán nó sẽ tự nhận khi copy từ A sang B). Như vậy khi copy từ A đến B sẽ cho giá trị tại điểm B là: 10.2m (B = 10+2%*10 = 10.2m) và cứ thế ta copy đến điểm C, D ... nó sẽ tự cho các kết quả

 Lisp này theo mình nghĩ giống  lisp copy tăng giảm trên diễn đàn nhưng khác là thông số nhập vào là % tăng giảm theo độ dốc và  lisp tự nhận khoảng cách trong quá trình ta copy.

AE ai rành về  lisp có thể giúp mình với. Mình cảm ơn nhiều!


  • 0

#8 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6009 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 30 December 2015 - 01:08 PM

Không phải tiết kiệm lời mà tưởng nói như vậy là hiểu rồi chứ. 

Trong diễn đàn có lisp copy tăng giảm với một hằng số cho trước. nhưng mình muốn một  lisp copy tăng giảm theo độ dốc cho trước.

Nó có dạng kiểu như thế này: Ta copy một số từ điểm A đến điểm B. Đầu tiên nó tự nhận text tại điểm A, sau đó ta nhập dộ dốc cần copy, sau đó copy đến điểm B,  lisp tự nhận khoảng cách từ A đến B và cộng hoặc trừ với khoảng chênh lệch do độ dốc từ A đến B.

VD như sau: Từ A đến B có độ dốc 2%. điểm A có cao độ 10m, khoảng cách từ A đến B là 10m (cái khoảng cách này là mình VD thôi, còn  lisp trong bài toán nó sẽ tự nhận khi copy từ A sang B). Như vậy khi copy từ A đến B sẽ cho giá trị tại điểm B là: 10.2m (B = 10+2%*10 = 10.2m) và cứ thế ta copy đến điểm C, D ... nó sẽ tự cho các kết quả

 Lisp này theo mình nghĩ giống  lisp copy tăng giảm trên diễn đàn nhưng khác là thông số nhập vào là % tăng giảm theo độ dốc và  lisp tự nhận khoảng cách trong quá trình ta copy.

AE ai rành về  lisp có thể giúp mình với. Mình cảm ơn nhiều!

Hề hề hề,

Gửi bạn cái này để bạn tham khảo. Không biết có đúng ý bạn không. Nếu đúng thì tốt và nếu không đúng càng tốt hơn bởi bạn sẽ hiểu rằng không phải mọi người đều giỏi như bạn.. Vì thế bạn cần có bản vẽ để mô tả chính xác điều bạn cần nhé.

http://www.cadviet.c...4_copycaodo.lsp

(defun c:cpd (/ oldos h els els1 txt dd dd1 h1 p0 p1 )
(setq oldos (getvar "osmode"))
(setvar "osmode" 0)
(setq  h (atof (cdr (assoc 1 (setq els (entget (setq txt (car (entsel "\n Chon text cao do bat dau: "))))))))           
         dd 0.0  )
(if (or (= (cdr (assoc 0 els)) "MTEXT") (and (= (cdr (assoc 0 els)) "TEXT") (= (cdr (assoc 72 els)) 0) (= (cdr (assoc 73 els)) 0)))
     (setq p0 (cdr (assoc 10 els)))
     (setq p0 (cdr (assoc 11 els)))
)
(command "undo" "be")
(while (setq p1 (getpoint p0 "\n Nhap diem tiep theo"))
        (if (not (setq dd1 (getreal "\n Nhap do doc tiep theo: ")))
            (setq dd1 dd)   )
        (setq len (distance p0 p1)
                  h1 (+ h (* len dd1))  )
        (command "copy" txt "" p0 p1)
        (setq txt (entlast)
                  els1 (entget txt)
                  els1 (subst (cons 1 (rtos h1 2 2)) (assoc 1 els1) els1) )
        (entmod els1)
        (setq p0 p1 h h1 dd dd1)
)
(command "undo" "e")
(setvar "osmode" oldos)
(princ)
)
             

  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#9 vinhxtkt

vinhxtkt

    biết pan

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

Đã gửi 04 January 2016 - 08:14 AM

 sao mình không dùng được vậy ban phamthanhbinh ơi. mình gõ lệnh cpd nhưng máy ko hiểu lệnh.

nhưng dù sao mình cũng cảm ơn bạn phamthanhbinh và các bạn khác đã chia sẻ.

Thực ra trong bài viết mình cũng đã cố miêu tả và có cái VD cũng khá cụ thể rồi. Mình không rành về lsp nên không biết mô tả thêm như thế nào cho các bạn hiểu. Mình hay thiết kế phần san lấp mặt bằng (làm bằng thủ công) nên hay rải cao độ thiết kế tại các mắt lưới nên cần một lsp copy tăng giảm theo độ dốc để tiện khi rải cao độ mắt lưới thuận tiện hơn. Bạn nào có lsp nào như vậy cho mình xin với. mình cảm ơn nhiều.

Cảm ơn cadviet đã có trang web hay và bổ ích!


  • 0

#10 vinhxtkt

vinhxtkt

    biết pan

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

Đã gửi 04 January 2016 - 02:23 PM

ngày nào cũng zô xem bài của mình có pro nào quan tâm ko nhưng ko thấy ai giúp hết. Buồn ghê !


  • -1

#11 quocmanh04tt

quocmanh04tt

    biết lệnh imageclip

  • Members
  • PipPipPipPipPipPipPip
  • 670 Bài viết
Điểm đánh giá: 313 (khá)

Đã gửi 04 January 2016 - 07:43 PM

Lsp của bác Bình chạy tốt mà! Bạn copy rồi paste vào file lisp, đừng down nhiều khi do lỗi của diễn đàn.

Cách viết khác. Hy vọng phù hợp yêu cầu của bạn...

(defun c:cpd (/ data dis ent new npt poi slo txt val)
(or def_slope (setq def_slope 0))
(setq slo (getreal (strcat "\nNhap do doc <" (rtos def_slope 2 2) "%>: ")))
(if (not slo)
(setq slo def_slope)
(setq def_slope slo))
(princ "\nChon cao do goc TEXT or MTEXT!")
(if (setq txt (ssget "_+.:E:S" '((0 . "*TEXT"))))
(progn (setq ent (entget (ssname txt 0))
val (distof (cdr (assoc 1 ent)))
poi (cdr (assoc 10 ent)))
(or val
(and (princ "\nKhong lay duoc gia tri cao do tu Text!")
(setq val (getreal "\nNhap gia tri cao do goc <0>: ")))
(setq val 0))
(while (setq npt (getpoint "\nDiem dat cao do moi: " poi))
(progn (setq dis (distance poi npt)
new (rtos (+ val (* dis slo 0.01)) 2 2)
data (vl-remove-if '(lambda (x) (member (car x) '(-1 1 5 10 330 410))) ent))
(entmakex (append data (list (cons 1 new) (cons 10 npt))))))))
(princ))

P/s: Mỗi lần gọi lệnh một độ dốc, thay đổi độ dốc thì gọi lại lệnh.


  • 0

#12 haanh

haanh

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 2875 Bài viết
Điểm đánh giá: 1554 (rất tốt)

Đã gửi 04 January 2016 - 11:48 PM

 mình gõ lệnh cpd nhưng máy ko hiểu lệnh.

nhưng dù sao mình cũng cảm ơn bạn phamthanhbinh và các bạn khác đã chia sẻ.

 

Lỗi do anh chưa biết sử dụng lisp trên diễn đàn:

 

Command: CPd Unknown command "CPD".  Press F1 for help.
Command: AP APPLOAD cpd.lsp successfully loaded.
Command:
Command:
Command: CPd
 Chon text cao do bat dau: ....

Command:
 Nhap diem tiep theo....


  • 1

“Sống trong đời sống cần có một tấm lòng / Để làm gì em biết không ? / Để gió cuốn đi, để gió cuốn đi...”


#13 vinhxtkt

vinhxtkt

    biết pan

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

Đã gửi 07 January 2016 - 03:45 PM

Lsp của bác Bình chạy tốt mà! Bạn copy rồi paste vào file lisp, đừng down nhiều khi do lỗi của diễn đàn.

Cách viết khác. Hy vọng phù hợp yêu cầu của bạn...

(defun c:cpd (/ data dis ent new npt poi slo txt val)
(or def_slope (setq def_slope 0))
(setq slo (getreal (strcat "\nNhap do doc <" (rtos def_slope 2 2) "%>: ")))
(if (not slo)
(setq slo def_slope)
(setq def_slope slo))
(princ "\nChon cao do goc TEXT or MTEXT!")
(if (setq txt (ssget "_+.:E:S" '((0 . "*TEXT"))))
(progn (setq ent (entget (ssname txt 0))
val (distof (cdr (assoc 1 ent)))
poi (cdr (assoc 10 ent)))
(or val
(and (princ "\nKhong lay duoc gia tri cao do tu Text!")
(setq val (getreal "\nNhap gia tri cao do goc <0>: ")))
(setq val 0))
(while (setq npt (getpoint "\nDiem dat cao do moi: " poi))
(progn (setq dis (distance poi npt)
new (rtos (+ val (* dis slo 0.01)) 2 2)
data (vl-remove-if '(lambda (x) (member (car x) '(-1 1 5 10 330 410))) ent))
(entmakex (append data (list (cons 1 new) (cons 10 npt))))))))
(princ))

P/s: Mỗi lần gọi lệnh một độ dốc, thay đổi độ dốc thì gọi lại lệnh.

cái này của bạn Bình và bạn Mạnh là trúng rồi đó, nó chính là như vậy. Nhưng có một cái bất tiện là khi ta chọn vào text đầu tiên, nó chọn luôn điểm gốc của text làm điểm 1. Hai bạn chỉnh giúp lại một xíu là khi chọn text xong rồi ta chọn tiếp điểm gốc, sau đó mới copy đến điểm số 2. Mình sơ họa bằng cad bạn nào biết giúp mình với, cảm ơn nhiềuhttp://www.cadviet.c...5/148940_vd.dwg


  • 0

#14 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6009 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 07 January 2016 - 04:18 PM

cái này của bạn Bình và bạn Mạnh là trúng rồi đó, nó chính là như vậy. Nhưng có một cái bất tiện là khi ta chọn vào text đầu tiên, nó chọn luôn điểm gốc của text làm điểm 1. Hai bạn chỉnh giúp lại một xíu là khi chọn text xong rồi ta chọn tiếp điểm gốc, sau đó mới copy đến điểm số 2. Mình sơ họa bằng cad bạn nào biết giúp mình với, cảm ơn nhiềuhttp://www.cadviet.c...5/148940_vd.dwg

Hề hề hề,

Nếu trúng rồi thì bạn chỉ cần bỏ toàn bộ đoạn code sau:

(if (or (= (cdr (assoc 0 els)) "MTEXT") (and (= (cdr (assoc 0 els)) "TEXT") (= (cdr (assoc 72 els)) 0) (= (cdr (assoc 73 els)) 0)))

(setq p0 (cdr (assoc 10 els)))

(setq p0 (cdr (assoc 11 els)))

)

và thay thế bằng:

(setq p0 (getpoint "\n Chon diem bat dau")) 

Sau đó lưu lại file lisp với tên bạn thích. Load nó vào Cad rồi chạy thử nhé.


  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#15 quocmanh04tt

quocmanh04tt

    biết lệnh imageclip

  • Members
  • PipPipPipPipPipPipPip
  • 670 Bài viết
Điểm đánh giá: 313 (khá)

Đã gửi 07 January 2016 - 08:53 PM

 

Hề hề hề,

Gửi bạn cái này để bạn tham khảo. Không biết có đúng ý bạn không. Nếu đúng thì tốt và nếu không đúng càng tốt hơn bởi bạn sẽ hiểu rằng không phải mọi người đều giỏi như bạn.. Vì thế bạn cần có bản vẽ để mô tả chính xác điều bạn cần nhé.


cái này của bạn Bình và bạn Mạnh là trúng rồi đó, nó chính là như vậy. Nhưng có một cái bất tiện là khi ta chọn vào text đầu tiên, nó chọn luôn điểm gốc của text làm điểm 1. Hai bạn chỉnh giúp lại một xíu là khi chọn text xong rồi ta chọn tiếp điểm gốc, sau đó mới copy đến điểm số 2. Mình sơ họa bằng cad bạn nào biết giúp mình với, cảm ơn nhiềuhttp://www.cadviet.c...5/148940_vd.dwg

* B​ắt đầu có dấu hiệu bớt giỏi rồi đó!

* Sửa lại lisp cho bạn và bổ sung chức năng rải 1 lần nhiều cao độ, với cùng độ dốc và khoảng cách lưới đều nhằm giảm bớt thao tác

* Cần chú ý rằng: Nếu bạn bớt giỏi đi một xíu thì lisp cũng bớt ngu đi một xíu ... :D

(defun c:csa  (/ make_elev dis ent new npt poi slo txt val orp n)
 (defun make_elev  ()
  (setq dis (distance orp npt)
        new (rtos (+ val (* dis slo 0.01 n)) 2 2))
  (entmakex (append (vl-remove-if '(lambda (x) (member (car x) '(-1 1 5 10 330 410))) ent)
                    (list (cons 1 new) (cons 10 (polar poi (angle orp npt) (* dis n)))))))
 (or def_slope (setq def_slope 0))
 (setq slo (getreal (strcat "\nNhap do doc <" (rtos def_slope 2 2) "%>: ")))
 (if (not slo)
  (setq slo def_slope)
  (setq def_slope slo))
 (princ "\nChon cao do goc TEXT or MTEXT!")
 (if (and (setq txt (ssget "_+.:E:S" '((0 . "*TEXT")))) (setq orp (getpoint "\nChon diem goc: ")))
  (progn (setq ent (entget (ssname txt 0))
               val (distof (cdr (assoc 1 ent)))
               poi (cdr (assoc 10 ent)))
         (or val
             (and (princ "\nKhong lay duoc gia tri cao do tu Text!")
                  (setq val (getreal "\nNhap gia tri cao do goc <0>: ")))
             (setq val 0))
         (if (setq npt (getpoint "\nDiem tiep theo: " orp))
          (progn (initget 6)
                 (or (setq n (getint "\nSo doi tuong can tao [1 or Enter de chon tung diem]: ")) (setq n 1))
                 (if (> n 1)
                  (repeat n (make_elev) (setq n (1- n)))
                  (progn (make_elev) (while (setq npt (getpoint "\nDiem tiep theo: " orp)) (make_elev))))))))
 (princ))

  • 1

#16 vinhxtkt

vinhxtkt

    biết pan

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

Đã gửi 08 January 2016 - 09:58 AM

Hiiii, Bây giờ là ngon rồi, đặc biệt là cái lsp của bác quocmanh. Trước đây mình toàn nhân chia cộng trừ = thủ công, giờ đỡ hơn nhiều rồi. Cảm ơn các bạn đã giúp đỡ. Hôm nào có gì cần giúp lại nếu mình biết sẽ nhiệt tình chia sẻ (nhưng ko biết viết lsp đâu nhé  :D )


  • 0