Đến nội dung


Hình ảnh
* * - - - 1 Bình chọn

Lisp rải taluy trên đường cong


  • Please log in to reply
53 replies to this topic

#41 hotanphi

hotanphi

    biết vẽ polygon

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

Đã gửi 04 July 2012 - 11:00 AM

Em chào anh phamthanhbinh.
Nếu như cái lisp vtl1 mà anh đã sửa giúp em anh thêm chức năng lưu lại các thông số của bước trước đó nữa được không anh.
Nếu được anh giúp em với.
Thêm chức năng này nữa là thuận lợi cho công việc hơn a ạ
Xin cảm ơn anh
  • 0

#42 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 04 July 2012 - 11:40 AM

Em chào anh phamthanhbinh.
Nếu như cái lisp vtl1 mà anh đã sửa giúp em anh thêm chức năng lưu lại các thông số của bước trước đó nữa được không anh.
Nếu được anh giúp em với.
Thêm chức năng này nữa là thuận lợi cho công việc hơn a ạ
Xin cảm ơn anh

Hề hề hề,
1/- Cái nút post image nó nằm trên thanh công cụ của cửa sổ bạn dùng để post bài
Hình đã gửi
2/- Bạn có thể chép đoạn hàm con nsl1 từ bài post của mình trả lời bạn softvnbin để thay thế cho cái hàm con nsl1 trong lisp mình gửi bạn là Ok. Mình đã tách bạch các hàm con trong lisp rồi, bạn có thể dễ dàng thay thế nó, đúng không????
Chúc bạn thành công.
  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#43 SoftvnBin

SoftvnBin

    biết vẽ ellipse

  • Advance Member
  • PipPip
  • 51 Bài viết
Điểm đánh giá: 3 (bình thường)

Đã gửi 04 July 2012 - 05:19 PM

Hề hề hề,
1/- Đã sửa
2/- Đã sửa
3/- Đã sửa
4/- Đã sửa
5/- Đã sửa.
6.1/- Không sửa. Nếu bạn muốn vậy hãy nhét lisp này vào file vlx.
6.2 a/- Đã sửa
6.2 b/- Không sửa vì lisp này sử dụng vẽ nét taluy vuông góc với đường nối hai điểm chân taluy chứ không phải vuông góc với đường rải ta luy. Nếu bạn muốn vậy thì cần làm lisp theo giải thuật khác.
Nếu mình đoán không sai thì lisp này là của bác Duy. Mạn phép bác chỉnh sửa một chút cho bạn SoftvnBin xài thử

Đây là cái đã sửa, bạn dùng thử nhé và cho ý kiến để mình hoàn thiện thêm.




;;;;;;;;;vtl;;;;;;;;;;;;;;;;
;Ve ta luy.lenh VTL1
(defun nsl ()
(if (/= scale nil)
(progn
(setq thongbao (strcat "Ty le ban ve ?, <1/" (itoa scale) ">:"))
(if (not (setq scaletmp (getint thongbao)))
(setq scaletmp scale)
)
)
(progn
(setq thongbao "Ty le ban ve ? <1/1000>:")
(if (not (setq scaletmp (getint thongbao)))
(setq scaletmp 1000)
)
)
)

(setq scale scaletmp)

(setq Defaultdist (* (* scale 2) 0.002))
(if (setq tg (getreal (strcat "\nKhoang cach ky hieu ta luy <" (rtos Defaultdist 2 2) ">:")))
(setq Defaultdist tg)
)

(setq chieutaluy1 1 sodoan 0)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun nsl1 ()
(if (not ktdoantaluy1)
(setq ktdoantaluy1 250 tg (getreal (strcat "\nChieu dai doan ngan<" (rtos ktdoantaluy1 2 2) ">:")))
)
(if tg
(setq ktdoantaluy1 tg tg nil)
)
(if (not ktdoantaluy2)
(setq ktdoantaluy2 500 tg (getreal (strcat "\nChieu dai doan dai<" (rtos ktdoantaluy2 2 2) ">:")))
)
(if tg
(setq ktdoantaluy2 tg tg nil)
)
(if (not khoangcachtl)
(setq khoangcachtl 200 tg (getreal (strcat "\nKhoang cach giua cac doan<" (rtos khoangcachtl 2 2) ">:")))
)
(if tg
(setq khoangcachtl tg tg nil)
)
(if (not sodoanngan)
(setq sodoanngan 1 tg (getint (strcat "\nSo doan ngan trong 1 doan dai<" (rtos sodoanngan 2 0) ">:")))
)
(if tg
(setq sodoanngan tg tg nil)
)

)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(Defun PlMake (Plist) ; Create polyline entities
(entmake '((0 . "POLYLINE")))
(setq n (length Plist)
ic 0
)
(while (< ic n)
(entmake (list (cons 0 "VERTEX") (cons 10 (nth ic Plist))))
(setq ic (1+ ic)
)
)
(entmake '((0 . "SEQEND")))

)


;;;----------------------------------------------------------------
(defun ve1doantaluy (p1 p2 / pvt diemcu ktdoantaluy ketthuc)
(setq pvt (+ (angle p1 p2) (* (/ pi 2) chieutaluy)))
;;;;(setq ketthuc 1)
(if (< sodoan sodoanngan)
(progn
(setq ktdoantaluy ktdoantaluy1)
(setq sodoan (1+ sodoan))
)
(progn
(setq ktdoantaluy ktdoantaluy2)
(setq sodoan 0)
)
)
(setq p2 (polar p1 pvt ktdoantaluy))
(plmake (list p1 p2))
(setq dem (1+ dem))
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(Defun xddsd (com epl kc / e0 e p dsd)
(setq e0 (entlast))
(while e0
(setq e e0)
(setq e0 (entnext e0))
)
(command com epl kc)
(setq e (entnext e))
(while e
(setq p (cdr (assoc 10 (entget e))))
(if p
(setq dsd (cons p dsd))
)
(setq e (entnext e))
)
(command "_.Undo" 1)
(setq dsd dsd)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; ve ta luy cho 1 doi tuong
(Defun vetaluy (ep / le e ketthuc them dsd thutu)
(setq dem 0)
(setq sodoan 0)
(setq ss (ssadd))
(setq e (entget (car ep)))
(if (or (= (cdr (assoc 0 e)) "LWPOLYLINE")
(= (cdr (assoc 0 e)) "POLYLINE")
(= (cdr (assoc 0 e)) "SPLINE")
(= (cdr (assoc 0 e)) "LINE")
(= (cdr (assoc 0 e)) "ARC")
(= (cdr (assoc 0 e)) "CIRCLE")
)

(setq ketthuc 1)
(prompt "\nDoi tuong duoc chon khong hop le")
)
(if ketthuc
(progn
(setq thutu 0)
(setq dsd (xddsd "_.Measure" ep khoangcachtl))
(setq dsd (append dsd (list (vlax-curve-getstartpoint (car ep)))))
(setq p1 (car dsd))
(repeat (1- (length dsd))
(setq thutu (1+ thutu))
(setq p2 (nth thutu dsd))
(ve1doantaluy p1 p2)
(setq p1 p2)
(setq ss (ssadd (entlast) ss))
)
)
)
(setq dem dem)
)

;;;==================================================
(Defun C:VTL1 (/ ep chon lai solan chon ss tg)
(vl-load-com)
(setvar "cmdecho" 0)
(setvar "blipmode" 0)
(command "undo" "g")
;;;;(nsl)

(setq ep 1)
(while ep
(setq solan 0 chieutaluy 1)
(setq ep (entsel "\nChon doi tuong ve ta luy..."))
(if ep
(progn
(nsl1)
(setq solan (vetaluy ep))
(initget "Undo Change")
(while
(setq chon (getkword "Undo/Change <enter for exit>: "))
(if (= chon "Undo")
(command "_.Undo" solan)
)
(if (= chon "Change")
(progn
(nsl1)
(setq chieutaluy -1)
(command "_.Undo" solan)
(setq solan (vetaluy ep))
)
)
(initget "Undo Change")
)
(setq blname (getstring t "\n Nhap ten block ban muon: "))
(if (/= blname "")
(command "block" blname (list 0.0 0.0 0.0) ss "")
)
(setq ep nil)
)
)
)
(command "undo" "e")
(princ)
)

Hề hề hề,
Cách dùng lisp này vẫn u như kỵ, chỉ lưu ý khi lisp yêu cầu nhập tên block, nếu bạn không muốn tạo block thì chỉ cần nhấn enter để bỏ qua.
Chúc bạn vui.

Cảm ơn bác PhamThanhBinh đã tận tình giúp đỡ, tuy nhiên sau khi test thì em thấy có lỗi như sau (lỗi một phần do em không diễn tả đúng ý mình (văn lùn quá :D ).
Em xin giả trình lại như sau:

Command: vtl1

Chon doi tuong ve ta luy...
Chieu dai doan ngan<250>:100 (250 là số liệu mặc định khi thực hiện lệnh VTL1 lần đầu tiên, 100 là số liệu nhập vào, lần thứ 2 khi thực hiện lệnh VTL1 thì sẽ chuyển thành Chieu dai doan ngan<100>:… 100 là số liệu lần cận kề dưới nó.

Chieu dai doan dai<500>:200 (Tương tự như trên)

Khoang cach giua cac doan<200>:100 (Tương tự như trên)

So doan ngan trong 1 doan dai<1>:2 (Tương tự như trên)
Undo/Change <enter for exit>:

Nhap ten block ban muon: mai duong 1


1. Lưu số liệu lần nhập trước (được giải trình như trên và dưới đây)
Khi thực hiện lệnh VTL1 lần 1 thì hỏi các thông số nhập vào
Khi thực hiện lệnh VTL1 lần 2, lần 3… thì vẫn hỏi các thông số nhập vào, nhưng cho số gợi nhớ các thông số đã nhập lần gần nhất.
Ví dụ: thực hiện lệnh VTL1 lần thứ nhất -> Khoang cach giua cac doan<200>:100, thì khi thực hiện lệnh VTL1 lần thứ hai sẽ nhớ -> Khoang cach giua cac doan<100>:150 (150 là số liệu mới nhập vào lần 2, 100 là số liệu lần nhập cận kề dưới nó (trong trường họp này chính là lần đầu tiên). Khi thực hiện lệnh VTL1 lần thứ ba sẽ nhớ số liệu nhập lần cận kề dưới nó (ở đây sẽ là Khoang cach giua cac doan<150>:.…. .)

2. Sau khi kết thúc lệnh bằng Enter (Undo/Change &lt;enter for exit&gt;) thì tự đóng block đối tượng vừa sinh ra với tên block cho nhập mới vào (với layer hiện hành)
(Khi nhập tên Block xong thì toàn bộ mái taluy vừa rải biến mất :) )
3. Kết thúc bằng Enter không thực hiện tiếp lệnh VTL1
(đã Oke!)
4. Khắc phục nill khi kết thúc lệnh Enter
(đã Oke!)
5. Khi thực hiện lệnh [ Undo/Change <enter for exit>: *Cancel* ] để thay đổi phía rải taluy, không hỏi lại các tham số nữa mà thực hiện luôn
(đã Oke!)
6. Khắc phục không đổi lệnh VLT1 thành lệnh khác được (giả sử thành lệnh VTL) (em thấy các lisp khác đổi lệnh được thông qua ký tự C:LLL thành tên lệnh mong muốn)
(đã Oke!)
7. Bác xem giúp em luôn chọn đối tượng rải -> chọn đoạn rải (thuộc đối tượng rải) -> từ điểm pick 1 đến điểm pick 2 đến điểm Pick 3 thì sẽ chỉ rải trong đoạn từ điểm pick 1 đến điểm pick 3 (theo chiều từ pick 1 đến pick 2 đến pick 3 (để khắc phục chiều rải trong hình kín) không ạ, em chân thành cảm ơn!
  • 0

#44 hotanphi

hotanphi

    biết vẽ polygon

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

Đã gửi 05 July 2012 - 10:50 AM

Em xin cảm ơn anh phamthanhbinh.
Em đã làm như anh chỉ dẫn nhưng nó lại sinh ra như thế này.
Ý của em là như anh softvn Bin anh ạ
1. Nghĩa là lưu lại giá trị trước đó như thế này
1. Lưu số liệu lần nhập trước (được giải trình như trên và dưới đây)
Khi thực hiện lệnh VTL1 lần 1 thì hỏi các thông số nhập vào
Khi thực hiện lệnh VTL1 lần 2, lần 3… thì vẫn hỏi các thông số nhập vào, nhưng cho số gợi nhớ các thông số đã nhập lần gần nhất.
Ví dụ: thực hiện lệnh VTL1 lần thứ nhất -> Khoang cach giua cac doan<200>:100, thì khi thực hiện lệnh VTL1 lần thứ hai sẽ nhớ -> Khoang cach giua cac doan<100>:150 (150 là số liệu mới nhập vào lần 2, 100 là số liệu lần nhập cận kề dưới nó (trong trường họp này chính là lần đầu tiên). Khi thực hiện lệnh VTL1 lần thứ ba sẽ nhớ số liệu nhập lần cận kề dưới nó (ở đây sẽ là Khoang cach giua cac doan<150>:.…. .)

2.Vấn đề thứ hai em muốn nhờ anh Bình viết thêm giúp em đọa code là mình có thể chọn kiểu rải ta luy bên trái hoặc bên phải của đường cần rải nữa anh ạ.
Xin lỗi anh. Đúng ra em nhờ e phải nói 1 lần để a viết đỡ tốn thời gian của anh nhưng khi e ứng dụng lisp vào công việc mới phát sinh điều này.
Rất mong anh Bình thông cảm và giúp đỡ.
Em xin cảm ơn anh.
  • 0

#45 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 05 July 2012 - 03:53 PM

<p>

Cảm ơn bác PhamThanhBinh đã tận tình giúp đỡ, tuy nhiên sau khi test thì em thấy có lỗi như sau (lỗi một phần do em không diễn tả đúng ý mình (văn lùn quá :D ). Em xin giả trình lại như sau: Command: vtl1 Chon doi tuong ve ta luy... Chieu dai doan ngan&lt;250&gt;:100 (250 là số liệu mặc định khi thực hiện lệnh VTL1 lần đầu tiên, 100 là số liệu nhập vào, lần thứ 2 khi thực hiện lệnh VTL1 thì sẽ chuyển thành Chieu dai doan ngan&lt;100&gt;:… 100 là số liệu lần cận kề dưới nó. Chieu dai doan dai&lt;500&gt;:200 (Tương tự như trên) Khoang cach giua cac doan&lt;200&gt;:100 (Tương tự như trên) So doan ngan trong 1 doan dai&lt;1&gt;:2 (Tương tự như trên) Undo/Change &lt;enter for exit&gt;: Nhap ten block ban muon: mai duong 1 1. Lưu số liệu lần nhập trước (được giải trình như trên và dưới đây) Khi thực hiện lệnh VTL1 lần 1 thì hỏi các thông số nhập vào Khi thực hiện lệnh VTL1 lần 2, lần 3… thì vẫn hỏi các thông số nhập vào, nhưng cho số gợi nhớ các thông số đã nhập lần gần nhất. Ví dụ: thực hiện lệnh VTL1 lần thứ nhất -&gt; Khoang cach giua cac doan&lt;200&gt;:100, thì khi thực hiện lệnh VTL1 lần thứ hai sẽ nhớ -&gt; Khoang cach giua cac doan&lt;100&gt;:150 (150 là số liệu mới nhập vào lần 2, 100 là số liệu lần nhập cận kề dưới nó (trong trường họp này chính là lần đầu tiên). Khi thực hiện lệnh VTL1 lần thứ ba sẽ nhớ số liệu nhập lần cận kề dưới nó (ở đây sẽ là Khoang cach giua cac doan&lt;150&gt;:.…. .) 2. Sau khi kết thúc lệnh bằng Enter (Undo/Change &lt;enter for exit&gt;) thì tự đóng block đối tượng vừa sinh ra với tên block cho nhập mới vào (với layer hiện hành) (Khi nhập tên Block xong thì toàn bộ mái taluy vừa rải biến mất :) ) 3. Kết thúc bằng Enter không thực hiện tiếp lệnh VTL1 (đã Oke!) 4. Khắc phục nill khi kết thúc lệnh Enter (đã Oke!) 5. Khi thực hiện lệnh [ Undo/Change &lt;enter for exit&gt;: *Cancel* ] để thay đổi phía rải taluy, không hỏi lại các tham số nữa mà thực hiện luôn (đã Oke!) 6. Khắc phục không đổi lệnh VLT1 thành lệnh khác được (giả sử thành lệnh VTL) (em thấy các lisp khác đổi lệnh được thông qua ký tự C:LLL thành tên lệnh mong muốn) (đã Oke!) 7. Bác xem giúp em luôn chọn đối tượng rải -&gt; chọn đoạn rải (thuộc đối tượng rải) -&gt; từ điểm pick 1 đến điểm pick 2 đến điểm Pick 3 thì sẽ chỉ rải trong đoạn từ điểm pick 1 đến điểm pick 3 (theo chiều từ pick 1 đến pick 2 đến pick 3 (để khắc phục chiều rải trong hình kín) không ạ, em chân thành cảm ơn!

</p>
Hề hề hề,
Bạn nói làm mình buồn quá. Vậy sao gọi là lisp bị lỗi mà phải gọi là nó chưa đúng ý bạn chớ. Mình không phải là bạn nên làm sao có thể hiểu đúng hoàn toàn ý của bạn qua mấy lời trong bài post được.
Bạn hãy thử làm mấy việc sau để chỉnh lại cái lisp đó xem nó đã đúng ý bạn chưa nhé.
1/- Mở lisp ra tìm tới đoạn code hàm con (defun nsl1...) Sửa đoạn :


(if (not ktdoantaluy1)
(setq ktdoantaluy1 250 tg (getreal (strcat "\nChieu dai doan ngan<" (rtos ktdoantaluy1 2 2) ">:")))

)
thành:


(if (not ktdoantaluy1)
(setq ktdoantaluy1 250 tg (getreal (strcat "\nChieu dai doan ngan<" (rtos ktdoantaluy1 2 2) ">:")))
(setq tg (getreal (strcat "\nChieu dai doan ngan<" (rtos ktdoantaluy1 2 2) ">:")))
)

2/- Với các biến ktdoantaluy2, khoangcachtl, sodoanngan bạn cũng sửa tương tự như trên với lưu ý đổi tên biến cho phù hợp.

3/- Tiếp tục tìm xuống đoạn code của hàm chính VTL1. Copy dòng code
(nsl1)

Dán dòng này vào ngay phía dưới dòng code :
(setq ep (entsel "\nChon doi tuong ve ta luy..."))

Đồng thời xóa bỏ cả hai dòng code (nsl1) cũ có trong hàm chính

4/- Tiếp tục tìm trong hàm chính VTL1 tới dòng code:
(command "block" blname (list 0.0 0.0 0.0) ss "" )

Sửa nó thành dòng code:
(command "block" blname (list 0.0 0.0 0.0) ss "" "oops")

5/- Lưu lại file và test thử coi.

Về yêu cầu cuối cùng của bạn, mình không hiểu được vì sao phải pick 3 điểm vì mỗi pline chỉ có một chiều nhất định. Nếu bạn thấy pick 2 điểm là đủ thì bạn có thể tham khảo code mình đã sửa cho bạn hotanphi. Nếu vẫn bắt buộc phải là 3 điểm thì bạn hãy tạo một pline mới qua 3 điểm đó và rải taluy trên pline vừa vẽ là OK. (Bạn lưu ý rằng : mỗi pline đều có điểm đâu và điểm cuối xác định, vì thế yêu cầu của bạn chọn 3 điểm trên pline kín sẽ có khả năng xảy ra là theo chiều bạn chọn điểm đầu và cuôi của pline nằm tọt vào trong đó và sẽ khó mà rải taluy.)

@ Bạn Hotanphi:
Yêu cầu 1 của bạn hãy tham khảo ở trên đây.
Yêu cầu 2 của bạn trong lisp đã có giải quyết rồi bằng cách lựa chọn Change khi lisp hỏi. Lisp không phân biệt phải hay trái mà phân biệt theo chiều của polyline. Vì thế bạn cứ rải bình thường, nếu thấy đúng chiều rồi thì Ok còn nếu chưa thì change là được
  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#46 onfuture

onfuture

    biết vẽ rectang

  • Members
  • PipPip
  • 88 Bài viết
Điểm đánh giá: 13 (tàm tạm)

Đã gửi 05 July 2012 - 04:46 PM

Sao không dùng lintype dạng taluy |i| vẽ tiện hơn không ? giải quyết đường tròn, arc và spline dễ dàng

Hình đã gửi.


Cách này good nè. Nhẹ file nữa.
  • 0

#47 SoftvnBin

SoftvnBin

    biết vẽ ellipse

  • Advance Member
  • PipPip
  • 51 Bài viết
Điểm đánh giá: 3 (bình thường)

Đã gửi 05 July 2012 - 06:55 PM

<p></p>
Hề hề hề,
Bạn nói làm mình buồn quá. Vậy sao gọi là lisp bị lỗi mà phải gọi là nó chưa đúng ý bạn chớ. Mình không phải là bạn nên làm sao có thể hiểu đúng hoàn toàn ý của bạn qua mấy lời trong bài post được.
Bạn hãy thử làm mấy việc sau để chỉnh lại cái lisp đó xem nó đã đúng ý bạn chưa nhé.
1/- Mở lisp ra tìm tới đoạn code hàm con (defun nsl1...) Sửa đoạn :


(if (not ktdoantaluy1)
(setq ktdoantaluy1 250 tg (getreal (strcat "\nChieu dai doan ngan<" (rtos ktdoantaluy1 2 2) ">:")))

)
thành:


(if (not ktdoantaluy1)
(setq ktdoantaluy1 250 tg (getreal (strcat "\nChieu dai doan ngan<" (rtos ktdoantaluy1 2 2) ">:")))
(setq tg (getreal (strcat "\nChieu dai doan ngan<" (rtos ktdoantaluy1 2 2) ">:")))
)

2/- Với các biến ktdoantaluy2, khoangcachtl, sodoanngan bạn cũng sửa tương tự như trên với lưu ý đổi tên biến cho phù hợp.

3/- Tiếp tục tìm xuống đoạn code của hàm chính VTL1. Copy dòng code
(nsl1)

Dán dòng này vào ngay phía dưới dòng code :
(setq ep (entsel "\nChon doi tuong ve ta luy..."))

Đồng thời xóa bỏ cả hai dòng code (nsl1) cũ có trong hàm chính

4/- Tiếp tục tìm trong hàm chính VTL1 tới dòng code:
(command "block" blname (list 0.0 0.0 0.0) ss "" )

Sửa nó thành dòng code:
(command "block" blname (list 0.0 0.0 0.0) ss "" "oops")

5/- Lưu lại file và test thử coi.

Về yêu cầu cuối cùng của bạn, mình không hiểu được vì sao phải pick 3 điểm vì mỗi pline chỉ có một chiều nhất định. Nếu bạn thấy pick 2 điểm là đủ thì bạn có thể tham khảo code mình đã sửa cho bạn hotanphi. Nếu vẫn bắt buộc phải là 3 điểm thì bạn hãy tạo một pline mới qua 3 điểm đó và rải taluy trên pline vừa vẽ là OK. (Bạn lưu ý rằng : mỗi pline đều có điểm đâu và điểm cuối xác định, vì thế yêu cầu của bạn chọn 3 điểm trên pline kín sẽ có khả năng xảy ra là theo chiều bạn chọn điểm đầu và cuôi của pline nằm tọt vào trong đó và sẽ khó mà rải taluy.)

@ Bạn Hotanphi:
Yêu cầu 1 của bạn hãy tham khảo ở trên đây.
Yêu cầu 2 của bạn trong lisp đã có giải quyết rồi bằng cách lựa chọn Change khi lisp hỏi. Lisp không phân biệt phải hay trái mà phân biệt theo chiều của polyline. Vì thế bạn cứ rải bình thường, nếu thấy đúng chiều rồi thì Ok còn nếu chưa thì change là được

Mình đã làm bạn buồn, xin lỗi bạn nhé, mình đã thay thế -> các vấn đề oke hết, duy chỉ còn vấn đề Block nữa thôi bạn ạ
Bạn giúp mình nốt nhé:
như thế này ạ:


Chon doi tuong ve ta luy...
Chieu dai doan ngan<250.00>:2.5

Chieu dai doan dai<500.00>:5

Khoang cach giua cac doan<200.00>:2

So doan ngan trong 1 doan dai<1>:
Undo/Change <enter for exit>: c
Undo/Change <enter for exit>:

Nhap ten block ban muon: duong 1

Sau khi nhập xong thì pick không thấy đóng Block "duong 1" mà chỉ khi dùng lệnh BE = BEDIT thì hiện ra như hình sau (có block "duong 1" nhưng Edit trong lệnh BE đó không có tác dụng khi close Block Editor)
Giúp mình nốt nhé!
Hình đã gửi
Cảm ơn bạn trước!
Lisp mình đã chỉnh theo lời bạn đây à!
http://www.cadviet.c.../17200_vtl1.lsp
  • 0

#48 SoftvnBin

SoftvnBin

    biết vẽ ellipse

  • Advance Member
  • PipPip
  • 51 Bài viết
Điểm đánh giá: 3 (bình thường)

Đã gửi 05 July 2012 - 08:18 PM


Cách này good nè. Nhẹ file nữa.

nhưng mình muốn là một *.lsp bạn à, tính chất công viêc di động + tính thích gọn nhẹ à :D
  • 0

#49 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 06 July 2012 - 12:05 PM

Mình đã làm bạn buồn, xin lỗi bạn nhé, mình đã thay thế -> các vấn đề oke hết, duy chỉ còn vấn đề Block nữa thôi bạn ạ
Bạn giúp mình nốt nhé:
như thế này ạ:


Chon doi tuong ve ta luy...
Chieu dai doan ngan<250.00>:2.5

Chieu dai doan dai<500.00>:5

Khoang cach giua cac doan<200.00>:2

So doan ngan trong 1 doan dai<1>:
Undo/Change <enter for exit>: c
Undo/Change <enter for exit>:

Nhap ten block ban muon: duong 1

Sau khi nhập xong thì pick không thấy đóng Block "duong 1" mà chỉ khi dùng lệnh BE = BEDIT thì hiện ra như hình sau (có block "duong 1" nhưng Edit trong lệnh BE đó không có tác dụng khi close Block Editor)
Giúp mình nốt nhé!
Hình đã gửi
Cảm ơn bạn trước!
Lisp mình đã chỉnh theo lời bạn đây à!
http://www.cadviet.c.../17200_vtl1.lsp

Hề hề hề,
Vậy là mình lại hiểu sai ý bạn rồi.
Theo lisp mình nói bạn sửa thì chắc chắn block duong1 đã được tạo thành. Tuy nhiên các nét ta luy trên bản vẽ vẫn là các line rời rạc chứ không phải là các phần tử của một block do mình dùng lệnh "oops" để trả chúng về sau khi lệnh block đã thu gom chúng vào block duong1 của bạn. Vì bạn chỉ nói là muốn chúng hiện lại, nên mình mới hiểu nhầm ý bạn. Chắc ở đây bạn muốn chúng hiện lại ở dạng block cho dễ edit về sau chứ không phải là chỉ trả chúng về như khi tạo ra.
Nếu vậy thì bạn hãy làm như sau:
Thay dòng code : (command "block" blname (list 0.0 0.0 0.0) ss "" "oops")
Thành dòng code: (command "block" blname (list 0.0 0.0 0.0) ss "" "insert" blname (list 0.0 0.0 0.0) "" "" "")
Hy vọng lần này mình hiểu đúng ý bạn. Còn nếu sai thì bạn cần trình bày lại yêu cầu cho rành mạch hơn mới được.
  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#50 SoftvnBin

SoftvnBin

    biết vẽ ellipse

  • Advance Member
  • PipPip
  • 51 Bài viết
Điểm đánh giá: 3 (bình thường)

Đã gửi 06 July 2012 - 01:30 PM

Cảm ơn PhamThanhBinh đã giải quyết giúp mình vấn đề được triệt để. chân thành cảm ơn nhé :)
  • 0

#51 hotanphi

hotanphi

    biết vẽ polygon

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

Đã gửi 06 July 2012 - 03:07 PM

Yêu cầu 1 của bạn hãy tham khảo ở trên đây.
Yêu cầu 2 của bạn trong lisp đã có giải quyết rồi bằng cách lựa chọn Change khi lisp hỏi. Lisp không phân biệt phải hay trái mà phân biệt theo chiều của polyline. Vì thế bạn cứ rải bình thường, nếu thấy đúng chiều rồi thì Ok còn nếu chưa thì change là được

Em xin cảm ơn anh Bình.
Em đã làm được rồi. Tuy nhiên em thấy nó hơi bất tiện ở chỗ chọn rải taly bên trái hay bên phải đường cần rải bởi vì lúc đầu mình chưa biết nó rải bên nào cả.
Nếu có thể anh nâng cấp lên giúp em là thêm 1 đoạn code để cho lisp nhắc thêm dòng lệnh rải bên trái hay bên phải ( nhập T cho bên trái và P cho bên phải ) giống như dòng lệnh hỏi về chiều dài đoạn ngắn, chiều dài đoạn dài....
Em xin cảm ơn anh
  • 0

#52 hotanphi

hotanphi

    biết vẽ polygon

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

Đã gửi 07 July 2012 - 08:06 AM

Sao không thấy anh Bình quay lại topic nữa vậy.
Nhờ anh Bình giúp em.
Với lại anh Bình ơi sao em post bài mới mà post không được anh ạ.
Anh chỉ cụ thể giúp em tí.
Em cảm ơn anh
  • 0

#53 hotanphi

hotanphi

    biết vẽ polygon

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

Đã gửi 09 July 2012 - 05:19 PM

Rất mong anh em hoàn thiện giúp mình cái lisp này với. Cái lisp này được anh Bình viết cho nhưng có lẽ anh bận việc quá nên không quay lại diễn đàn nữa.
Nhờ anh em giúp em là thêm 1 đoạn code để cho lisp nhắc thêm dòng lệnh rải taluy bên trái hay bên phải ( nhập T cho bên trái và P cho bên phải ) giống như dòng lệnh hỏi về chiều dài đoạn ngắn, chiều dài đoạn dài....
tại vì mình rải mà cứ phải change lại liên lục vì mình không biết lisp sẽ rải bên phải hay bên trái của đường cần rải hết.
Rất mong anh em giúp đỡ.
Xin cảm ơn anh em
http://www.cadviet.c...taluy__tl_1.lsp
  • 0

#54 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 09 July 2012 - 09:15 PM

Rất mong anh em hoàn thiện giúp mình cái lisp này với. Cái lisp này được anh Bình viết cho nhưng có lẽ anh bận việc quá nên không quay lại diễn đàn nữa.
Nhờ anh em giúp em là thêm 1 đoạn code để cho lisp nhắc thêm dòng lệnh rải taluy bên trái hay bên phải ( nhập T cho bên trái và P cho bên phải ) giống như dòng lệnh hỏi về chiều dài đoạn ngắn, chiều dài đoạn dài....
tại vì mình rải mà cứ phải change lại liên lục vì mình không biết lisp sẽ rải bên phải hay bên trái của đường cần rải hết.
Rất mong anh em giúp đỡ.
Xin cảm ơn anh em
http://www.cadviet.c...taluy__tl_1.lsp

Hề hề hề,
Không phải mình không quay lại mà là vấn đề của bạn mình đã trả lời rồi.
Bạn nên nhớ rằng bên phải hay bên trái là bạn phải căn cứ vào chiều của đường polyline. Mà cái này bạn lại hoàn toàn chả thể xác định được nó trước khi chạy lisp. vậy nên cho dù có làm thêm như bạn nói vẫn có trường hợp bạn xác định sai toét và phải change lại. Vậy tại sao phải cần nó trong khi lisp đã có khả năng change một phát là xong rất nhẹ nhành êm ái.
Bạn cũng cần hiểu rằng lisp này vẽ nét taluy dựa trên phương của hai điểm chân ta luy kế tiếp nhua theo chiều ngược với chiều của đường polyline. Vậy nên nếu bạn đã không chắc chắn về chiều của polyline thì cái việc phải hay trái của bạn sẽ là vô nghĩa.
Hơn nữa lisp này viết không chỉ dùng cho polyline mà còn có thể dùng cho các loại đường khác nữa.
Theo suy nghĩ của mình thì cách xử lỳ của lisp này hay hơn cách bạn suy nghĩ nhiều. Và minh không muốn sửa nữa.

Mình cũng xin đính chính là lisp này không do mình viết mà mình chỉ chỉnh sửa lại chút xíu cho phù hợp với yêu cầu của người dùng đặt ra thôi. Cách giải quyết vấn đề của bạn đã được người viết lisp này giải quyết khá gọn ghẽ bởi chức năng change phía rải taluy. Bạn hãy tận dụng điều này sẽ tốt hơn nhiều là việc đẻ ra một giải pháp không hoàn chỉnh mới.

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