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

Viết Lisp theo yêu cầu

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

cái này là do các đường spline của bác nó nằm ở các cao độ khác nhau thì làm sao mà trim được.

À thì ra là thế, Cảm ơn bác nhiều nghe!

vậy bác có biết cách nào để có thể trim nó không, chỉ dùm mình với.

Thank!

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 các bác. em có vấn đề này cần các bác giúp. không biêt các bác có thề viêt hộ em 1 lisp dùng để thống kê thép bản được không?

cụ thể nó gồm các cột như sau;

tên cấu kiên, quy cách( với thép bàn ví dụ là -12x2000x200),dầy, dài, rộng, diện tích, số lượng trong 1 cấu kiện, số cấu kiện, tổng diện tích, tổng trọng lượng. mong các banc giúp em. nếu bác nào hay tính công trình thép ma có cái này thì co thể cho em xin được không? cám ơn các bá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
Chào bạn nguyenkhoadung98,

Bạn xài thử lisp này xem nhé. Có gì chưa được bạn hãy post lên để mình kiểm tra và sửa lại.

(defun C:idc ()
(setq dt (entsel "/n Chon doi tuong goc")
  dc (entsel "/n Chon duong chuan")
  txt (entsel "/n Chon text goc")
  kc (getreal "/n Chon khoang cach giua cac đoi tuong")
  pg (getpoint " Chon diem goc copy")
  elst (entget (car txt))
   text (cdr (assoc 1 elst))
   t1 (substr text 1 6)
   t2 (substr text 7 1)
   t3 (substr text 8 1)
   gt (cdr (assoc 50 elst))
   h (cdr (assoc 40 elst))  
)
(command "measure" dc kc)
(setq ss (ssget "p")
   i 0
   n (sslength ss)			
)
(if (and (= (cdr (assoc 72 elst)) 0) (= (cdr (assoc 73 elst)) 0))
 (setq pt (cdr (assoc 10 elst)))
 (setq pt (cdr (assoc 11 elst)))
)
(while (< i n)
   (setq p0 (cdr (assoc 10 (entget (ssname ss i)))))
   (if (/= nil (ssname ss (1+ i)))
	   (setq p1 (cdr (assoc 10 (entget (ssname ss (1+ i))))))
	   (setq p1 (cdr (assoc 10 (entget (ssname ss (1- i))))))
   )
   (setq gr (angle p0 p1)
		 gd (/ (* gr 180) pi)
   )
   (if (and (> gd 90) (< gd 270))
	   (setq gd (+ gd 180))
   )
   (if (/= (atoi t2) nil)
	   (setq t4 (+ i (atoi t2) 1))
	   (setq t4 100)
   )
   (if (or (> (ascii t3) 67) (< (ascii t3) 65))
	   (setq t5 (chr 65))
	   (setq t5 t3)
   )
   (if (= 0 (rem i 3))
	   (setq t5 (chr (+ (ascii t5) 1)))
	   (if (= 1 (rem i 3))
		   (setq t5 (chr (+ (ascii t5) 2)))
	   )
   )
   (command "copy" dt "" pg p0)
   (command "text" (list (car p0) (+ (cadr p0) 20)) h gd (strcase (strcat t1 (itoa t4) t5) nil))
   (setq i (1+ i))
)
)

 

Lệnh chạy lisp là idc bạn nhé. Lisp này có thể đành số cột dọc theo line, polyline, spline bạn ạ.

 

Chúc bạn vui.

 

 

Cảm ơn bạn Bình và các bạn tue,ndtnv nhiều, lisp của bạn về cơ bản đúng như ý mình nhưng như bác ndtnv nói mình còn 1 số điểm như sau :

 

1- nó chưa làm được với đường pl,spline và đường cong (vì lúc rải block nó kô vuông góc với đường như khi mình me ) mà mình dùng chủ yếu là loại đường này

2- text sau khi dùng lisp nó kô đứng cạnh cái block như text gốc ( nó đứng xa hơn ) và nó kô có cùng đặc tính như text gốc ( cái này kô wa cần thiết bạn bỏ wa cũng đc)

3- thứ tự đánh nó lại là T2/L1-1A sau lại đến T2/L1-13A,T2/L1-12C...trong khi mình muốn là T2/L1-1A,T2/L1-2B,T2/L1-3C....T2/L1-13A

ngoài ra trả lời bạn Tue_NV là đúng là mình cần khoảng cách giữa các block là bằng nhau bạn ạ. cảm ơn các bạn đã quan tâm

mình gửi kèm bản vẽ miêu tả :cry:

 

http://www.cadviet.com/upfiles/Drawing11_1.dwg

  • 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
Chào anh ssq!

E có đọc được bài viết về cái lisp đo chiều dài của các đoạn polyline của anh, em thấy cái này hay quá, em đang cần mà khổ nỗi em chẳng biết viết lisp nên không thể them mắm thêm muôi vô được. Anh có thể giúp em hoàn thiện được không?

Em xin nhắc lại mục đích em cần là đo tấc cả các đường thẳng, polyline được quét (quét một lần càng tốt) và ghi chiều dài của nó ở cuối đoạn đó luôn.

Cảm ơn anh nhiều!

 

Bạn thử dùng ct này xem sao và cho ý kiến. Tên lệnh là "docd".Nó đo line, polyline, arc.

 

http://www.cadviet.com/upfiles/docd.lsp

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ảm ơn bạn Bình và các bạn tue,ndtnv nhiều, lisp của bạn về cơ bản đúng như ý mình nhưng như bác ndtnv nói mình còn 1 số điểm như sau :

 

1- nó chưa làm được với đường pl,spline và đường cong (vì lúc rải block nó kô vuông góc với đường như khi mình me ) mà mình dùng chủ yếu là loại đường này

2- text sau khi dùng lisp nó kô đứng cạnh cái block như text gốc ( nó đứng xa hơn ) và nó kô có cùng đặc tính như text gốc ( cái này kô wa cần thiết bạn bỏ wa cũng đc)

3- thứ tự đánh nó lại là T2/L1-1A sau lại đến T2/L1-13A,T2/L1-12C...trong khi mình muốn là T2/L1-1A,T2/L1-2B,T2/L1-3C....T2/L1-13A

ngoài ra trả lời bạn Tue_NV là đúng là mình cần khoảng cách giữa các block là bằng nhau bạn ạ. cảm ơn các bạn đã quan tâm

mình gửi kèm bản vẽ miêu tả :cry:

 

http://www.cadviet.com/upfiles/Drawing11_1.dwg

Chào bạn nguyenkhoadung98,

Bạn dùng thử cái lisp mình đã sửa này nhé. Có thể nó chưa đúng hoàn toàn với ý bạn, nhưng mình xin giải thích một chút như sau:

1/- Do bản vẽ Drawing11_1.dwg bạn post lên mình không mở được nên mình sử dụng bản vẽ lần trước để thử nghiệm.

2/- Bạn không nói rõ việc cùng đặc tính nên mình mới cho nó về cùng lớp với text gốc, còn việc trùng style text mình mày mò chưa ra mà chỉ làm cùng cao độ text mẫu thôi. Việc xác định vị trí text như bài trước mình đã nói là hoàn toàn bạn có thể thay đổi mà. Trong lisp này dựa vào điều bạn đã viết mình suy luận và lấy vị trí đặt text là cùng khoảng cách tương đối với điểm chèn của block d0. Nhưng do góc text thay đổi theo đường cong nên nó cũng không chuẩn như trên hình mẫu. Góc text ở đây mình lấy theo các cặp điểm chèn liền kề chứ chưa lấy theo tiếp tuyến như bác ndtnv nói được.

3/- Thứ tự thay đổi các text từ lisp lần trước mình đã kiểm rồi và thấy nó chạy rất chuẩn mà bạn. Lần này mình cũng không thay đổi gì phần này. Bạn kiểm tra lại nhé. Bạn lưu ý là do mình chọn text mẫu chỉ có 8 ký tự nên nếu bạn thay đổi số ký tự của cái text mẫu là thua luôn đấy. Mình dùng hàm (substr ....) để cắt chuỗi mà.

4/- Trong lisp này mình dựa vào góp ý của bác Tue_NV để chỉnh cho cột vuông góc với đường chuẩn và bổ sung thêm việc chèn block và text vào điểm bắt đầu của đường chuẩn.

5/- Cái góp ý của bác ndtnv cực kỳ hay, nhưng do mình chưa thạo lắm về các hàm vlax nên còn đang loay hoay, chưa thể viết ngay cho bạn được. Bạn ráng chờ mấy bữa nữa nhé để mình tìm hiểu kỹ thêm rồi sẽ viết lại lisp khác hay hơn theo ý bác ndtnv.

Trước mắt bạn dùng tạm cái lisp này, có thể sẽ giúp bạn phần nào.

(defun C:idc ()
(setq dt (entsel "/n Chon doi tuong goc")
  pg (getpoint " Chon diem goc doi tuong de copy")
  txt (entsel "/n Chon text goc")
  dc (entsel "/n Chon duong chuan")
  kc (getreal "/n Chon khoang cach giua cac doi tuong: ")
  elst (entget (car txt))
  text (cdr (assoc 1 elst))
  t1 (substr text 1 6)
  t2 (substr text 7 1)
  t3 (substr text 8 1)
  gt (cdr (assoc 50 elst))
   h (cdr (assoc 40 elst)) 
  bn (cdr (assoc 2 (entget (car dt))))
  lt (cdr (assoc 8 elst))
  st (cdr (assoc 7 elst))
  mt (cdr (assoc 62 elst)) 
)
(command "measure" dc "b" bn "y" kc)
(setq ss (ssget "p")
   i 0
   n (sslength ss)
   p0 (cdr (assoc 10 (entget (car dc))))
   p1 (cdr (assoc 10 (entget (ssname ss 0))))
   gr (angle p0 p1)
   gd (/ (* gr 180) pi)		   
)
(command "insert" bn "r" gd p0 "" "" "")

(if (or (= (cdr (assoc 72 elst)) 0) (= (cdr (assoc 73 elst)) 0))
 (setq pt (cdr (assoc 10 elst)))
 (setq pt (cdr (assoc 11 elst)))
)
(setq a (- (car pt) (car pg))
  b (- (cadr pt) (cadr pg))
)
(command "text" (list (+ (car p0) a) (+ (cadr p0) b)) h gd (strcase text nil))
(while (	   (setq p0 (cdr (assoc 10 (entget (ssname ss i)))))
   (if (/= nil (ssname ss (1+ i)))
	   (setq p1 (cdr (assoc 10 (entget (ssname ss (1+ i))))))
	   (setq p1 (cdr (assoc 10 (entget (ssname ss (1- i))))))
   )
   (setq gr (angle p0 p1)
		 gd (/ (* gr 180) pi)
   )
   (if (and (> gd 90) (		   (setq gd (+ gd 180))
   )
   (if (/= (atoi t2) nil)
	   (setq t4 (+ i (atoi t2) 1))
	   (setq t4 100)
   )
   (if (or (> (ascii t3) 67) (		   (setq t5 (chr 65))
	   (setq t5 t3)
   )
   (if (= 0 (rem i 3))
	   (setq t5 (chr (+ (ascii t5) 1)))
	   (if (= 1 (rem i 3))
		   (setq t5 (chr (+ (ascii t5) 2)))
	   )
   )
  ;;;(command "copy" dt "" pg p0)
   (command "layer" "m" lt "" "")
   (command "text" (list (+ (car p0) a) (+ (cadr p0) b)) h gd (strcase (strcat t1 (itoa t4) t5) nil))
   (setq i (1+ i))
)
)

Chúc bạn vui.

  • 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

co ai chi minh cach cai phim so 1 la layer net thay,so 2 la layer net dut,.....

cai nay nghe noi co ma khong biet lam, minh chi su dung khoang 5 layer tro lai thoi nhung hay phai doi qua doi lai nen rat can

cam on truoc nhe

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 nguyenkhoadung98,

Bạn dùng thử cái lisp mình đã sửa này nhé. Có thể nó chưa đúng hoàn toàn với ý bạn, nhưng mình xin giải thích một chút như sau:

3/- Thứ tự thay đổi các text từ lisp lần trước mình đã kiểm rồi và thấy nó chạy rất chuẩn mà bạn. Lần này mình cũng không thay đổi gì phần này. Bạn kiểm tra lại nhé. Bạn lưu ý là do mình chọn text mẫu chỉ có 8 ký tự nên nếu bạn thay đổi số ký tự của cái text mẫu là thua luôn đấy. Mình dùng hàm (substr ....) để cắt chuỗi mà.

Chào bác phamthanhBinh

Thứ tự thay đổi các text có vấn đề. Mình cũng chưa kiểm tra Lisp của bác nhưng khi chạy Lisp thì thứ tự không đúng nữa.

Việc chọn text mẫu có 8 kí tự và việc tách chuỗi như thế này là không nên chút nào :

(Setq t1 (substr text 1 6)

t2 (substr text 7 1)

t3 (substr text 8 1))

Bởi lẽ khi người sử dụng thay đổi số kí tự thì Code lỗi ngay

Thay vì như trên bác có thể viết như thế này :

Giả sử bien String có n kí tự -> ta dùng strlen để đếm kí tự -> sau đó sử dụng substr để tách như sau :

(Setq n (strlen String)

t1 (substr String 1 (- n 2))

t2 (substr String (- n 1) 1)

t3 (substr String n 1))

Diễn giải : Với n=8 thì bác thấy ngay rằng đoạn code trên trở về với đoạn Code của bác phải không?

  • 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
Bạn có thể post yêu cầu về autolisp ở topic này.

Nhờ bác Nguyen Hoanh giúp cho cái lsp để sửa block.

Block là một phép toán : 2 x 3 x 4 x 5 = 120. Được tạo bình thường gồm các tex "2","3","4","5","x","=","20" .Chèn vào bản vẽ ở vị trí bất kì và có thể copy nhiều cái.

-Khi gọi lệnh, ví dụ TGT (tính giá trị), pick vào "2" hoặc "3", hoặc vv, sửa số khác, kết quả "120" sẽ tự thay đổi.

Cám ơn bác 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
Bạn có thể post yêu cầu về autolisp ở topic này.

 

 

Chào các bác ,

em mơi xin đựoc cái LISP có thể xuất ra trụ hố khoan và mặt cắt địa chất công trình nhưng nội dung tôi không ưng ý lém

Nên nhờ các bác chỉ giáo để em có thể chỉnh theo ý của em cho đẹp và hoàn thiện hơn

 

trụ cắt hố khoan nguyên bản là đây:

 

http://www.cadviet.com/upfiles/Tru_nguyen_ban_1.bmp

 

Tôi cần sửa thành trụ cắt mẫu này:

 

http://www.cadviet.com/upfiles/Tru_Ho_khoan_mau_1.bmp

 

Mẫu LISP đây:

 

(Defun c:SPt ()

(setq M:err *error* *error* *merr*

cmde (getvar "CMDECHO" )

)

(Setvar "CMDECHO" 0)

(Command "Units" "" "2" "" "" "" "" )

 

;;;;;;;;;Khai bao ve cong trinh

 

(setq COTR (getstring T "\nTen cong trinh :"))

(setq Hangmuc (getstring T "\nHang muc :"))

(setq y (getint "\nCo bao nhieu lo khoan:"))

 

;;;;;;;

;;;;;;;;Phan luan ly

 

(if (> y 1)

( progn

 

(setq X (getint "\nBan co ve mat cat khong ! Hay nhap (0 or 1) :"))

(cond ; cond1

((= x 1)

 

;;;;;;;;;;Khai bao ve mat cat

 

(setq TLD ( getreal " \nCho ty le dung mat cat: 1 / "))

(setq TLN ( getreal " \nCho ty le ngang mat cat: 1 / "))

(setq Batdau ( getreal " \nCho cao do lon nhat = "))

(setq Saumax ( getreal " \nCho do sau ho khoan lon nhat "))

(setq TYLE (getint "\nTy le tru cat lo khoan: 1/ "))

(Setq B (getpoint "\nnhap diem muon ve mat cat :"))

 

;;;;;;;;;;Ve Khung mat cat

;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;Ve thuoc ty le

 

(command "Color" "7")

(setq Soo (+( / (* Saumax 100 ) TLD) 1) )

(setq Vtchu ( polar B 0 -8 )) ; Diem bat dau text coa do tren thuoc ty le

(if ( >= Batdau 0) (command "text" "style" "vntime" Vtchu "2" "0" (rtos Batdau 2 2 )))

(if ( < Batdau 0) (command "text" "style" "vntime" Vtchu "2" "0" (rtos Batdau 2 2) ))

(setq dem 1 )

(while (<= dem Soo )

(setq VTcuoit( polar B (-(/ PI 2)) (-(* dem 10) 10 )))

(setq X1( polar VTcuoit (-(/ PI 2)) 10 ) )

(setq Y1( polar X1 0 1.5 ))

(command "rectangle" VTcuoit Y1 )

(if (= (rem dem 2) 0 ) (command "solid" VTcuoit "@1.5,0" "@-1.5,-10" "@1.5,0" ""))

 

(setq Ghichu( polar X1 0 -8 )) ; diem text cao doj tren thuoc

(setq Khdich (/ TLD 100))

(setq Chu (- Batdau (* dem Khdich ) ) ); Cao do tren thuoc ty le

(if ( >= Chu 0) (command "text" "style" "vntime" Ghichu "2" "0" ( Rtos Chu 2 2) ))

(if ( < Chu 0) (command "text" "style" "vntime" Ghichu "2" "0" (rtos Chu 2 2) ))

(setq dem ( + 1 dem ))

); (while (<= dem Soo )

;;;;;;;;;;;;;;;;Xong thuoc ty le

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

 

;;;;;;;;;;;Bat dau khung ten

 

(setq Dnguon( polar B (-(/ PI 2)) (* (+ Soo 1 ) 10 ) ) ) ; Diem nguon de ve.

 

(setq Diem1 ( polar Dnguon 0 -30 )) ; Diem tren ben trai khung ten

(setq Diem2 ( polar Diem1 (-(/ PI 2)) 8 ))

(setq Diem3 ( polar Diem2 (-(/ PI 2)) 8 ))

(setq Diem4 ( polar Diem3 (-(/ PI 2)) 8 ))

(setq Diem12 ( polar Diem1 0 50 ))

(setq Diem22 ( polar Diem2 0 50 ))

(setq Diem32 ( polar Diem3 0 50 ))

(setq Diem42 ( polar Diem4 0 50 ))

 

(command "Color" "1")

(command "line" Diem1 Diem4 Diem42 Diem12 "C" "")

(command "line" Diem2 Diem22 "")

(command "line" Diem3 Diem32 "")

 

;;;Ghi chu khung ten

 

(command "Color" "7")

(setq Kh1chu ( polar Diem1 (-(/ PI 2)) 5)); Diem ghi "cao do lo khoan" thang dung

(setq Ghi1 ( polar Kh1chu 0 15.7)) ; Diem chen text "Cao do lo khoan"

 

(command "text" "style" "Chuso" ghi1 "2" "0" "Cao ®é lç khoan (m)")

 

(setq ghi2 ( polar ghi1 (-(/ PI 2)) 8.0)) ; Diem chen text "ky hieu lo khoan"

 

(command "text" "style" "Chuso" ghi2 "2" "0" "ký hiÖu lç khoan ")

 

(setq ghi3 ( polar ghi1 (-(/ PI 2)) 16)) ; Diem chen text "khoang cach"

 

(command "text" "style" "Chuso" ghi3 "2" "0" "Kho¶ng c¸ch (m)")

 

;;;;; Xong Khung ten

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;; Bat dau vao so lieu lo khoan de ve mat cat

 

(setq so 1)

(while (<= so y)

;;;;Khai bao ve cac lo khoan

 

(setq KYHLK (getstring T ( strcat "\nKy Hieu Lo khoan thu " (rtos so 2 0 ) " :" )))

(setq vitrilk (getstring T "\nVi tri lo khoan :"))

(setq NKC (getstring T "\Ngay khoi cong:"))

(setq NHT (getstring T "\nNgay hoan thanh:"))

(setq CAODO (getreal (strcat "\nCao do lo khoan thu" (rtos so 2 0 ) ":")))

(setq Dosau ( getreal ( strcat "\nCho do sau ho khoan thu " (rtos so 2 0 ) " :" )))

(setq SOLOP (getint ( strcat " \nCho so lop ho khoan thu " (rtos so 2 0 ) " :" )))

 

;;;;Xong phan khai bao ve cac lo khoan

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;

;;;;;Bat dau ve mat cat

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;

(setq Ktg (polar B (-(/ PI 2)) (/(*(- Batdau Caodo) 1000) TLD ))) ; Khoang chenh tu vi tri thuoc toi LK

(if (= so 1) (setq Khcach 0 ))

(setq KC (/ (* Khcach 1000 ) TLN)) ; ; khoang cach ngang tu thuoc toi LK

(setq K1 ( polar Ktg 0 (+ 25 KC ) ) ) ; Diem bat dau ve LK

(setq Tg K1)

(setq D1( polar Tg 0 2.0 )) ; Diem bat dau ve duong thu hai cua LK

(setq DC1( polar Tg (-(/ PI 2)) (* Dosau(/ 1000 TLD))) ); Diem cuoi cua duong thu nhat lo khoan

(setq DDo (polar DC1 0 1)) ; Diem bat dau ve duong dong

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;Diem nguon ve tru cat

 

(Setq NGA (polar ghi3 (- (/ pi 2)) 100)

A (polar NGA 0 (* so 192.5))); ?diem nguon de ve tru cat

 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(setq DC2( polar DC1 0 2.0)) ;Diem cuoi cua duong thu 2 lo khoan

(setq DC3 (polar Dnguon 0 (+ 26 KC )))

(setq DC3-1 (polar DC3 (/ PI -2) 4)) ; Diem text cao do LK tren khung ten

(setq DC4 (polar DC3 (-(/ PI 2)) 12)) ; Diem ve KYHLK

(setq KHLK0 (polar DC4 0 4.0))

(setq KHLK1 (polar DC4 0 8.0)) ; Diem ve vacch ngang KHLK

(setq KHLK2 (polar KHLK1 (-(/ PI 2)) 1.5)) ; Diem ghi do sau o ky hieu LK

(setq KHLK3 (polar KHLK1 (/ PI 2) 1.5)) ; Diem ghi cao do o ky hieu LK

;(setq DC4-1 (polar DC4 (/ PI 2) 1.3))

;(setq DC4-2 (polar DC4-1 (-(/ PI 2)) 2.6))

 

(setq D5 (polar Dnguon (-(/ PI 2)) 16))

(setq D5-1 (polar D5 0 (+ 26 KC ))) ; Diem ve gach

(command "Color" "7")

( command "Text" "j" "m" DC3-1 "2.0" "-90" ( Rtos CAODO 2 2))

(command "Color" "1")

(command "insert" "LKH" DC4 "" "" ""); ve ky hieu lo khoan

;(command "line" DC4-1 DC4-2 "")

(command "line" D5-1 "@0,-8" "")

(command "Color" "2")

(command "line" DDo DC3 "")

(command "line" K1 DC1 ""); ve duong thu nhat cua lo khoan

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;Ve bieu do SPT o mat cat

(setq DSPT1 (polar K1 0 10.0)

DSPT12 (polar DSPT1 0 5.0)

DSPT13 (polar DSPT1 0 10.0)

DSPT14 (polar DSPT1 0 15.0)

DSPT15 (polar DSPT1 0 20.0)

DSPT16 (polar DSPT1 0 25.0)

;;;;;;;;;;;;;;;;;;;;;;;

DSPT2 (polar DC1 0 10.0)

DSPT22 (polar DSPT2 0 5.0)

DSPT23 (polar DSPT2 0 10.0)

DSPT24 (polar DSPT2 0 15.0)

DSPT25 (polar DSPT2 0 20.0)

DSPT26 (polar DSPT2 0 25.0))

(command "Color" "254")

(command "line" DSPT1 DSPT2 ""

"line" DSPT12 DSPT22 ""

"line" DSPT13 DSPT23 ""

"line" DSPT14 DSPT24 ""

"line" DSPT15 DSPT25 ""

"line" DSPT16 DSPT26 "" )

(command "text" "j" "m" (polar DSPT1 (/ pi 2) 1.5 ) "2.0" "0" "0"

"text" "j" "m" (polar DSPT12 (/ pi 2) 1.5 ) "2.0" "0" "10"

"text" "j" "m" (polar DSPT13 (/ pi 2) 1.5 ) "2.0" "0" "20"

"text" "j" "m" (polar DSPT14 (/ pi 2) 1.5 ) "2.0" "0" "30"

"text" "j" "m" (polar DSPT15 (/ pi 2) 1.5 ) "2.0" "0" "40"

"text" "j" "m" (polar DSPT16 (/ pi 2) 1.5 ) "2.0" "0" "50")

;;;;;Xong bieu do SPT o mat cat

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(command "line" D1 DC2 ""); ve duong thu hai cua lo khoan

(command "line" DC1 DC2 ""); ve duong day lo khoan

(command "line" KHLK1 "@7.0,0" "")

(command "Text" "j" "m" (polar KHLK3 0 3.50) "2.0" "0" ( Rtos CAODO 2 2))

(command "Text" "j" "m" (polar KHLK2 0 3.50) "2.0" "0" ( Rtos Dosau 2 2))

(command "Text" "j" "m" (polar KHLK0 0 1.50) "2.0" "0" KYHLK)

;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;Tam sang tru cat

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;; khoamg cach giua cac lo khoan la 10

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(setq A1 (polar A 0 182.50))

(setq A2 (Polar A1 (- (/ pi 2.00)) 275.00))

(setq A3 (polar A2 0 (- 182.50)))

(setq BO (polar A 0 15.00))

(setq G1 (polar A 0 5.00))

;(setq T1 (polar G1 (- (/ pi 2.00)) 5.00))

;(setq T2 (polar T1 (- (/ pi 2.00)) 5.00))

;(setq T3 (polar A1 (- (/ pi 2.00)) 5.00))

;(setq T4 (polar T3 0 (- 37.51)))

;(setq T5 (polar T4 (- (/ pi 2.00)) 5.00))

;(setq T6 (polar T5 0 10.00))

;(setq T7 (polar T4 0 (- 61.63)))

 

(command "Color" "7")

;(command "text" "style" "VntimeH" T1 "1.5" "0" "Bé Giao Th«ng VËn T¶i")

;(command "text" "style" "VntimeH" T2 "1.5" "0" "Liªn HiÖp §­êng S¾t ViÖt Nam")

;(command "text" "style" "VntimeH" T4 "1.5" "0" "CT. T­ vÊn §Çu t­ & X©y dùng")

(command "text" "style" "VntimeH" T6 "1.5" "0" "§éI Kh¶o s¸t §Þa chÊt")

(command "Color" "red")

 

 

(command ".line" A A1 A2 A3 "c")

(command "Color" "7")

 

 

(setq Bsai (polar BO (- (/ pi 2.00)) 45.00))

(setq B1 (polar Bsai 0 10.00));Bsai - khong dat trung bien o tren

(setq B2 (polar B1 0 10.00))

(setq B3 (polar B2 0 10.00))

(setq B4 (polar B3 0 10.00))

(setq B5 (polar B4 0 20.00))

(setq B16 (polar B5 0 33.00))

(setq B17 (polar B16 0 27.00))

(setq B6 (polar B17 0 30.00))

(setq B7 (polar B6 0 15.00))

(setq B8 (polar B7 (- (/ pi 2.00)) 33.00))

(setq B9 (polar B6 (- (/ pi 2.00)) 33.00))

(setq B10 (polar B5 (- (/ pi 2.00)) 33.00))

(setq B11 (polar B4 (- (/ pi 2.00)) 33.00))

(setq B12 (polar B3 (- (/ pi 2.00)) 33.00))

(setq B13 (polar B2 (- (/ pi 2.00)) 33.00))

(setq B14 (polar B1 (- (/ pi 2.00)) 33.00))

(setq B15 (polar Bsai (- (/ pi 2.00)) 33.00))

(setq B19 (polar B16 (- (/ pi 2.00)) 33.00))

(setq B18 (polar B17 (- (/ pi 2.00)) 33.00))

(setq B20 (polar B16 (- (/ pi 2.00)) 8.00))

(setq B21 (polar B20 0 7.00))

(setq B22 (polar B21 0 5.00))

(setq B23 (polar B22 0 5.00))

(setq B24 (polar B23 0 5.00))

(setq B25 (polar B24 0 5.00))

(setq B26 (polar B19 0 7.00))

(setq B27 (polar B26 0 5.00))

(setq B28 (polar B27 0 5.00))

(setq B29 (polar B28 0 5.00))

(setq B30 (polar B18 0 5.00))

(setq B31 (polar B30 0 5.00))

(setq B32 (polar B31 0 5.00))

(setq B33 (polar B32 0 5.00))

(setq B34 (polar B33 0 5.00))

(command "color" "7")

(command ".line" Bsai B1 B14 B15 "c")

(command ".line" B1 B2 B13 B14 "c")

(command ".line" B2 B3 B12 B13 "c")

(command ".line" B3 B4 B11 B12 "c")

(command ".line" B4 B5 B10 B11 "c")

(command ".line" B5 B6 B9 B10 "c")

(command ".line" B6 B7 B8 B9 "c")

(command ".line" B16 B19 "")

(command ".line" B17 B18 "")

(command ".line" B20 B25 "")

(command ".line" B21 B26 "")

(command ".line" B22 B27 "")

(command ".line" B23 B28 "")

(command ".line" B24 B29 "")

 

 

(setq B151 (polar B15 0 5.00))

(setq KH (polar B151 (/ PI 2.00) 16.50))

;(command "text" "style" "" "VntimeH" "c")

(command "text" "J" "M" KH "2.0" "90" "§é s©u ®¸y líp (m)")

(setq B141 (polar B14 0 5.00))

(setq CD (polar B141 (/ PI 2.00) 16.50))

(command "text" "J" "M" CD "2.0" "90" "Cao ®é ®¸y líp (m)")

(setq B131 (polar B13 0 5.00))

(setq DS (polar B131 (/ PI 2) 16.50))

(command "text" "J" "M" DS "2.0" "90" "ChiÒu dµy líp (m)")

(setq B121 (polar B12 0 5.00))

(setq BD (polar B121 (/ PI 2.00) 16.50))

(command "text" "J" "M" BD "2.0" "90" "Ký hiÖu líp")

(setq B411 (polar B4 0 10.00))

(setq TC (polar B411 (- (/ PI 2)) 8.68))

(command "text" "j" "m" TC "2.50" "0" "Trô c¾t")

(setq B412 (polar B4 0 10.00))

(setq LK (polar B412 (- (/ PI 2)) 15.65))

(command "text" "j" "m" LK "2.5" "0" "Lç khoan")

(setq B413 (polar B4 0 10.00))

(setq TL (polar B413 (- (/ PI 2.00)) 24.06))

 

(setq B51 (polar B5 0 17.50))

(setq MT (polar B51 (- (/ PI 2.00)) 18.00))

(command "text" "j" "m" MT "3.0" "0" "M« t¶ ®Êt ®¸")

(setq B611 (polar B6 0 5.0))

(setq SH (polar B611 (- (/ PI 2.00)) 16.50))

(command "text" "j" "m" SH "2.0" "90" "Sè hiÖu vµ ®é s©u")

(setq B612 (polar B6 0 10.0))

(setq DA (polar B612 (- (/ PI 2.00)) 16.50))

(command "text" "j" "m" DA "1.80" "90" "LÊy mÉu ThÝ nghiÖm (m)")

(setq Bgiatri (polar B16 0 12.50))

(setq Bgiatri1 (polar Bgiatri (- (/ PI 2.00)) 4.00))

(command "text" "j" "m" Bgiatri1 "2.50" "0" "Gi¸ TrÞ N")

(setq BDSX (polar B19 0 3.5))

(setq BDSX1 (polar BDSX (/ PI 2.00) 12.50))

(command "text" "j" "m" BDSX1 "2.00" "90" "§é s©u x.spt")

(setq Bx151 (polar B26 0 2.5))

(setq Bx1511 (polar Bx151 (/ PI 2.00) 12.50))

(command "text" "j" "m" Bx1511 "2.00" "90" "N1 (15cm)")

(setq Bx152 (polar B27 0 2.5))

(setq Bx1512 (polar Bx152 (/ PI 2.00) 12.50))

(command "text" "j" "m" Bx1512 "2.00" "90" "N2 (15cm)")

(setq Bx153 (polar B28 0 2.5))

(setq Bx1513 (polar Bx153 (/ PI 2.00) 12.50))

(command "text" "j" "m" Bx1513 "2.00" "90" "N3 (15cm)")

(setq Bx154 (polar B29 0 2.5))

(setq Bx1514 (polar Bx154 (/ PI 2.00) 12.50))

(command "text" "j" "m" Bx1514 "2.00" "90" " N = N1 + N2 ")

(setq BDN (polar B17 0 15.00))

(setq BDN1 (polar BDN (- (/ PI 2.00)) 16.50))

(command "text" "j" "m" BDN1 "2.50" "0" "BiÓu ®å X.SPT")

(setq BS10 (polar B30 (/ pi 2.0) 2.0))

(command "text" "j" "m" Bs10 "2.00" "0" "10")

(setq BS20 (polar B31 (/ pi 2.0) 2.0))

(command "text" "j" "m" Bs20 "2.00" "0" "20")

(setq BS30 (polar B32 (/ pi 2.0) 2.0))

(command "text" "j" "m" Bs30 "2.00" "0" "30")

(setq BS40 (polar B33 (/ pi 2.0) 2.0))

(command "text" "j" "m" Bs40 "2.00" "0" "40")

(setq BS50 (polar B34 (/ pi 2.0) 2.0))

(command "text" "j" "m" Bs50 "2.00" "0" "50")

(setq B21 (polar Bsai (/ PI 2.00) 5.00))

(setq B22 (polar Bsai (/ PI 2.00) 10.00))

(setq B62 (polar B6 0 -25.00))

(setq B621 (polar B62 (/ PI 2.00) 5.00))

(setq B622 (polar B62 (/ PI 2.00) 10.00))

(setq B42 (polar B4 (/ PI 2.00) 26.27))

(setq B421 (polar B42 0 7.83))

 

;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;

(setq B251 (polar B5 (/ pi 2.00) 37.87))

(setq B2511 (polar B251 0 13.11))

(command "text" "j" "m" B2511 "3.0" "0" (strcat "C«ng tr×nh :" COTR));COTR)

(command "text" "style" "VntimeH" B421 "4.0" "0" (strcat "Trô c¾t lç khoan :" KYHLK))

(command "text" "j" "m" TL "2.0" "0" (strcat "Tû LÖ : 1/" (rtos TYLE 2 0)))

(command "text" "style" "Vntime" B622 "2.5" "0" (strcat "Ngµy khëi c«ng :" NKC))

(command "text" "style" "Vntime" B621 "2.5" "0" (strcat "Ngµy hoµn thµnh :" NHT))

(command "text" "style" "Vntime" B21 "2.5" "0" (strcat "Cao ®é miÖng lç khoan :" (rtos caodo 2 2) "m"))

(command "text" "style" "Vntime" B22 "2.5" "0" (strcat "VÞ trÝ lç khoan :" vitrilk))

(command "text" "style" "Vntime" (polar B22 (/ pi 2.00) 5) "2.5" "0" (strcat "H¹ng môc :" hangmuc))

 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;; XONG PHÇN KHUNG lo khoan

;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;Tam sang mat cat

 

(setq DEM1 1)

(setq H0 0)

(setq H1 0)

( setq Lop 1 )

( while (<= Lop SOLOP )

 

(command "Color" "2")

;;;;;;;;;;;;;;;;;;;;;;

;;; Luan ly so lop

(if (= lop solop)

(setq Saulop Dosau)

( setq Saulop( getreal ( strcat " \nCho do sau lop thu " (rtos lop 2 0 ) " :" )))

 

)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;Tam sang phan Xuong thu 1 (ve Tru cat)

 

(setq KHLOP (getstring ( strcat " \nKy hieu lop thu " (rtos lop 2 0 ) " :" )))

(setq BEDAYLOP (- Saulop H0)) ; chieu day lop ; Dung

(setq Hchen (/ (* 1000.00 Saulop) TYLE)) ; Khoang cach chen day lop

(setq Hchen1 (+ (/ (- Hchen H1) 2) h1)) ; Khoang cach chen beday lop

(setq Hmota (polar B10 (- (/ pi 2.00)) Hchen1)) ; Khoang cach chen mo ta dat

(setq Hmota1 (polar Hmota 0 5.00)) ; Diem chen mo ta dat

(setq Mota (getstring T "\nMo ta:"))

(setq Hchen2 (polar B11 (- (/ pi 2.00)) Hchen1))

(setq Hchen3 (polar Hchen2 0 -5.00)) ; §iÓm chÌn ký hiÖu líp

(setq Hkyhu (polar B15 (- (/ pi 2.00)) Hchen)) ; Khoang cach chen ky hieu lop

(setq Chenkyhu (polar Hkyhu 0 5.00)) ; Diem chen ky hieu

(command "text" "style" "chuso" Hmota1 "2.0" "0" Mota)

(command "text" "j" "m" (polar ds (- (/ pi 2.00)) (+ Hchen1 16.50) ) "2.0" "0" (rtos BEDAYLOP ))

(command "text" "j" "m" Hchen3 "2.0" "0" KHLOP)

(command "_circle" Hchen3 2 "" )

 

 

(setq GHIcaodo (- CAODO Saulop))

(setq B15rg (polar B15 (- (/ pi 2.00)) Hchen))

(setq B14rg (polar B14 (- (/ pi 2.00)) Hchen))

(setq B13rg (polar B13 (- (/ pi 2.00)) Hchen))

(setq B12rg (polar B12 (- (/ pi 2.00)) Hchen))

(setq B11rg (polar B11 (- (/ pi 2.00)) Hchen))

(setq B10rg (polar B10 (- (/ pi 2.00)) Hchen))

(setq B9rg (polar B9 (- (/ pi 2.00)) Hchen))

(setq B8rg (polar B8 (- (/ pi 2.00)) Hchen))

(setq B19rg (polar B19 (- (/ pi 2.00)) Hchen))

(setq B26rg (polar B26 (- (/ pi 2.00)) Hchen))

(setq B27rg (polar B27 (- (/ pi 2.00)) Hchen))

(setq B28rg (polar B28 (- (/ pi 2.00)) Hchen))

(setq B29rg (polar B29 (- (/ pi 2.00)) Hchen))

(setq B18rg (polar B18 (- (/ pi 2.00)) Hchen))

(setq B30rg (polar B30 (- (/ pi 2.00)) Hchen))

(setq B31rg (polar B31 (- (/ pi 2.00)) Hchen))

(setq B32rg (polar B32 (- (/ pi 2.00)) Hchen))

(setq B33rg (polar B33 (- (/ pi 2.00)) Hchen))

(setq B34rg (polar B34 (- (/ pi 2.00)) Hchen))

(setq BLK1 (polar B11 0 9.00))

(setq BLK2 (polar B10 0 -9.00))

(setq B17rg (polar BLK1 (- (/ pi 2.00)) Hchen))

(setq B16rg (polar BLK2 (- (/ pi 2.00)) Hchen))

(setq Bghicaodo (polar B14rg 0 5.00))

(setq Bghidosau (polar B15rg 0 5.00))

(command "color" "magenta")

(command ".line" B13rg B17rg "")

(command ".line" B16rg B19rg "")

(command "color" "white")

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;

;;;;;;;;;;;Ghi cao do, do sau (khi lop = so lop)

(if (= lop solop)

(progn

(command "text" "j" "m" (polar Bghicaodo (/ pi 2) 1.50) "2.0" "0" (rtos ghicaodo )

"text" "j" "m" (polar Bghidosau (/ pi 2) 1.50) "2.0" "0" (rtos Saulop ))

)

(progn

(command "text" "j" "m" Bghicaodo "2.0" "0" (rtos ghicaodo )

"text" "j" "m" Bghidosau "2.0" "0" (rtos Saulop ))

)

)

;;;;;;;;; Xong ghi cac do, do sau

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;Ket thuc phan Xuong thu 1

;;;;;;;;;;;;;;Tiep tuc Mat cat

(setq D2( polar D1 (-(/ PI 2 )) (* Saulop (/ 1000 TLD) ))) ; Diem gianh goi ve lop

(setq D3( polar D2 0 -2.0 )) ; Diem

(setq KGhidosau( polar D2 0.5 1.2 )) ; Diem ghi do sau lop

(setq KGhicaodo( polar KGhidosau 0 -3.8 )) ; diem ghi cao do lop

(if (= so 1)

( progn

( command "line" D3 "@ -10,0" "" )

(command "line" D2 "@ 3,0" "" )

); dong progn

); Dong (if (= so 1)

(if (> so 1)

( progn

( command "line" D2 "@ 3,0" "")

(command "line" D3 "@ -2,0" "" )

); dong progn

); dong (if (> so 1)

(if (= so Y)

( progn

( command "line" D2 "@ 10,0" "" )

(command "line" D3 "@ -2,0" "" )

);Dong progn

); dong (if (= so Y)

( command "Color" "7")

( command "Text" "style" "chuso" KGhidosau "2.0" "0" ( Rtos Saulop 2 2))

( command "Text" "Justify" "R" KGhicaodo "2.0" "0"(rtos Ghicaodo 2 2))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;Phan xuong thu 2 (Tiep tuc tru cat)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

 

(command "Color" "7")

(if (= lop solop)

(progn ; progn solop

 

(command ".line" B15 B15rg "")

(command ".line" B14 B14rg "")

(command ".line" B13 B13rg "")

(command ".line" B12 B12rg "")

(command ".line" B11 B11rg "")

(command ".line" B19 B19rg "")

(command ".line" B9 B9rg "")

(command ".line" B8 B8rg "")

(command ".line" BLK1 B17rg "")

(command ".line" BLK2 B16rg "")

(command ".line" B26 B26rg "")

(command ".line" B27 B27rg "")

(command ".line" B28 B28rg "")

(command ".line" B29 B29rg "")

(command ".line" B18 B18rg "")

(command ".line" B30 B30rg "")

(command ".line" B31 B31rg "")

(command ".line" B32 B32rg "")

(command ".line" B33 B33rg "")

(command ".line" B34 B34rg "")

(command ".line" B10 B10rg "")

(command ".line" B15rg B8rg "")

);Dong progn solop

);dong if so lop

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;Ket thuc phan xuong thu 2

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;Tiep tuc mat cat

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(setq H0 Saulop)

(setq H1 Hchen)

(setq dem1 (+ dem1 1))

(setq lop (+ 1 lop ))

);Dong ( while (<= Lop SOLOP )

(command "Color" "7")

(command "line" tg DC1 "" )

(if ( >= Caodo 0) (command "text" "style" "chuso" Chucaodo "2" "0" (Strcat "+"( Rtos Caodo 2 2) )))

(if ( < Caodo 0) (command "text" "style" "chuso" Chucaodo "2" "0" (rtos Caodo 2 2 ) ))

(command "Color" "2")

(command "line" DC1 DC2 D1 "")

(command "Color" "7")

(command "Text" "style" "chuso" Chuhk "2.5" "0" Chuoi )

(command "Color" "1")

(if (= so 1)

( progn

( setq DCD ( polar DC1 0 -10 ))

( command "line" tg "@ -10,0" DCD "" )

);Dong ( progn

);Dong (if (= so 1)

(if (= so Y)

( progn

( setq DCC ( polar DC2 0 10))

( command "line" D1 "@ 10,0" DCC "" )

(setq Diem122 ( polar Diem12 0 2.0 ))

(setq Diem132 ( polar Diem32 0 2.0 ))

(setq Diem142 ( polar Diem42 0 2.0 ))

(setq Diem222 ( polar Diem22 0 2.0 ))

(setq Cuoi1 (polar DC3 0 20))

(setq Cuoi2 (polar DC3 (- (/ pi 2)) 8))

(setq Cuoi3 (polar DC3 (- (/ pi 2)) 16))

(setq Cuoi4 (polar DC3 (- (/ pi 2)) 24))

(command "Color" "1")

(command "line" Diem122 Cuoi1 "")

(command "line" Diem222 (polar Cuoi2 0 20) "")

(command "line" Diem132 (polar Cuoi3 0 20) "")

(command "line" Diem142 (polar Cuoi4 0 20) "")

 

);dong( progn

);(if (= so Y)

 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;Bat dau phan xuong thu 3 (Tiep tuc tru cat)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

 

(command "Color" "white")

(setq Tm (getint "\nTong so mau thi nghiem nguyen dang:"))

(setq M0 1)

(while (<= M0 Tm)

(setq KHmau (getstring (strcat "\n Ky hieu mau thu " (rtos M0 2 0) ":")))

(setq Dsaumau (getreal (strcat "\nDo sau lay mau thu" (rtos M0 2 0) ":")))

 

(setq Kchenmau (+ (/ (* Dsaumau 1000) TYLE) (/ 1.00 (/ TYLE 100)))) ; Khoang chen mau

;; Ve gach

(setq Kchenmau1 (polar B9 (- (/ pi 2.00)) Kchenmau)) ; Khoang chen mau thang dung

(setq Dchenmau (polar Kchenmau1 0 2.00)) ; Dau gach mau

(setq CUOI (polar Dchenmau 0 11.0)) ; Cuoi gach mau

(command ".line" Dchenmau CUOI "" )

;; Ghi so hieu mau

(setq Kchenmau2 (polar B9 (- (/ pi 2.00)) (- Kchenmau 1.50))) ; Khoang so hieu thang dung

(setq Dghimau (polar Kchenmau2 0 7.50)) ; Diem ghi so hieu mau

(command "text" "j" "m" Dghimau "2.0" "0" Khmau)

;; Ghi do sau lay mau

(setq Kchenmau3 (polar B9 (- (/ pi 2.00)) (+ Kchenmau 1.50))) ; Khoang do sau thang dung

(setq Ddosau (polar Kchenmau3 0 7.50)) ; Diem ghi so do sau mau

(command "text" "j" "m" Ddosau "2.00" "0" (strcat (rtos (float Dsaumau) ) "-" (rtos (float (+ Dsaumau 0.20)))))

;; Ve mau o tru cat

(setq Dve (polar BLK2 (- (/ pi 2.00)) Kchenmau )) ;Diem ve mau

(command "insert" "MND" Dve "" "" "")

(setq BL0 (getstring "\nTrang thai;Cung=1,Nua cung=2, Deo Cung=3, Deo mem=4, Deo chay=5, Chay=6 :"))

(command "insert" BL0 Dve "" "" "" )

;; Ve mau o mat cat

(setq KMMC (+ (/ (* Dsaumau 1000) TLD) 1.00)

KMMC1 (polar D1 (- (/ pi 2)) KMMC))

(command "insert" BL0 KMMC1 "" "" "" )

(command "insert" "MND" KMMC1 "" "" "")

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(setq M0 (+ M0 1.00))

); dong while mau nguyen dang

;;;;; Xong mau nguyen dang

;;;;

;;;; Mau khong nguyen dang

(setq Tn (getint "\nTong so mau khong nguyen dang:"))

(setq N0 1)

(while (<= N0 Tn)

(setq KHmauK (getstring (strcat "\n Ky hieu mau thu " (rtos N0 2 0) ":")))

(setq DsaumauK (getreal (strcat "\nDo sau lay mau thu" (rtos N0 2 0) ":")))

;(setq Den (getreal "\n Den do sau :"))

(setq KchenmauK (/ (* DsaumauK 1000.00) TYLE)) ; Khoang chen mau

; Ve gach

(setq Kchenmau1K (polar B9 (- (/ pi 2.00)) KchenmauK)) ; Khoang chen mau thang dung

(setq DchenmauK (polar Kchenmau1K 0 2.00)) ; Dau gach mau

(setq CUOIK (polar DchenmauK 0 11.0)) ; Cuoi gach mau

(command ".line" DchenmauK CUOIK "" )

; Ghi so hieu mau

(setq Kchenmau2K (polar B9 (- (/ pi 2.00)) (- KchenmauK 1.50))) ; Khoang so hieu thang dung

(setq DghimauK (polar Kchenmau2K 0 7.5)) ; Diem ghi so hieu mau

(command "text" "j" "m" DghimauK "2.0" "0" KhmauK)

; Ghi do sau lay mau

(setq Kchenmau3K (polar B9 (- (/ pi 2.00)) (+ KchenmauK 1.50))) ; Khoang do sau thang dung

(setq DdosauK (polar Kchenmau3K 0 7.5)) ; Diem ghi so do sau mau

(command "text" "j" "m" DdosauK "2.00" "0" (strcat (rtos DsaumauK 2 2)))

; Ve mau o tru cat

(setq Dvek (polar BLK2 (- (/ pi 2.00)) Kchenmauk)) ;Diem ve mau thang dung

(setq Dvek1 (polar Dvek 0 0.75)) ;Diem ve mau

(command "insert" "MKND" Dvek1 "" "" "")

 

(setq BL1 (getstring "\nTrang thai;Cung=1,Nua cung=2, Deo Cung=3, Deo mem=4, Deo chay=5, Chay=6, Deo=deo, Bao hoa=BH :"))

(command "insert" Bl1 (polar Dvek1 0 -0.75) "" "" "" )

;;;Ve mau o mat cat

(setq KMM (+ (/ (* DsaumauK 1000) TLD) 1.00)

KMM1 (polar D1 (- (/ pi 2)) KMM))

(command "insert" BL1 KMM1 "" "" "" )

(command "insert" "MKND" (polar KMM1 0 0.75) "" "" "")

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(setq N0 (+ N0 1))

); dong while mau khong nguyen dang

(Setvar "CMDECHO" cmde)

(Princ "\n\n Lien he voi Pham Thanh Trung KSDC - 0912018376 ")

(Setq *erro* m:err m:err nil)

 

;;;;;;;;;;; Xong mau khong nguyen dang

;;;;;;;;;;;

;;;;;;;;;;; Bat dau vao SPT

 

(setq SOSPT (getint "\nTong so lan dong SPT:"))

(setq SPT 1)

(while (<= SPT SOSPT)

(setq DsauSPT (getreal (strcat "\nDo sau Dong SPT thu" (rtos SPT 2 0) ":")))

(setq N1 (getint "\nSo bua 15cm dau:"))

(setq N2 (getint "\nSo bua 15cm Tiep theo:"))

(setq N3 (getint "\nSo bua 15cm cuoi:"))

(setq N (+ N2 N3))

(setq KSPT (+ (/ (* DsauSPT 1000.00) TYLE) 1.00)) ; Khoang chen mau SPT

(setq KSPT1 (polar BLK2 (- (/ pi 2.00)) (+ KSPT 1))) ; Khoang ve mau SPT thang dung

;(command "insert" "MSPT" KSPT1 "" "" "")

 

;;;;;;;;;; Ve gach SPT

(setq KSPT2 (polar B19 (- (/ pi 2.00)) (+ KSPT 1))) ; Khoang chen mau thang dung

(setq DSPT22 (polar KSPT2 0 0.5)) ; Dau gach mau

(setq DSPT23 (polar DSPT22 0 6.00)) ; Cuoi gach mau

(command ".line" DSPT22 DSPT23 "" )

;;;;;;;;; Ghi Do sau dong SPT

(setq DSSPT (polar KSPT2 (- (/ pi 2.00)) -1.50)) ; Khoang so hieu thang dung

(setq DghiSPT (polar DSSPT 0 3.50)) ; Diem ghi so hieu mau

(command "text" "j" "m" DghiSPT "2.0" "0" (rtos DsauSPT 2 2) )

(setq DghiSPT1 (polar DghiSPT (- (/ pi 2.00)) 3.0)) ; Diem ghi so hieu mau

(command "text" "j" "m" DghiSPT1 "2.0" "0" (rtos (+ DsauSPT 0.45) ))

;;;;;;;;;;Ghi so bua

(setq KN1 (polar KSPT2 0 9.50))

(command "text" "j" "m" KN1 "2.0" "0" (rtos N1 2 0 ))

(setq KN2 (polar KSPT2 0 14.50))

(command "text" "j" "m" KN2 "2.0" "0" (rtos N2 2 0 ))

(setq KN3 (polar KSPT2 0 19.50))

(command "text" "j" "m" KN3 "2.0" "0" (rtos N3 2 0 ))

(setq KN (polar KSPT2 0 24.50))

(if (> N 50)

(command "text" "j" "m" KN "2.0" "0" ">50")

(command "text" "j" "m" KN "2.0" "0" (rtos N 2 0 ))

)

 

;;;;;;;;;;Ve do thi o tru cat

 

 

(setq DTH (polar B18 (- (/ pi 2.00)) (+ KSPT 1))) ;Diem nguon

(setq DTH1 (polar DTH 0 (/ N 2.00)))

(if (> N 50)

(progn

(setq DTH1 (polar DTH 0 25.00))

(command "insert" "Dspt" DTH1 "" "" "")

 

(command "insert" "mt" DTH1 "" "" "")

);dong

(command "insert" "Dspt" DTH1 "" "" "")

 

);Dong (if (> N 50)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;ve do thi o mat cat

(setq MCPT (+ (/ (* DsauSPT 1000.00) TLD) 2.00))

(setq MCPT1 (polar DSPT1 (- (/ pi 2.00)) MCPT)) ;Diem nguon

(setq MCPT2 (polar MCPT1 0 (/ N 2.00)))

(if (> N 50)

(progn

(setq MCPT2 (polar MCPT1 0 25.00))

(command "insert" "Dspt" MCPT2 "" "" "")

 

(command "insert" "mt" MCPT2 "" "" "")

);dong

(command "insert" "Dspt" MCPT2 "" "" "")

 

);Dong (if (> N 50)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

 

(setq SPT (+ SPT 1))

);Dong(while (<= SPT SOSPT)

 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;vong lap ve thuoc

(command "color" "254")

(setq NTD (fix (/ Dosau (/ TYLE 100))))

(setq NTN (fix (* (/ Dosau (/ TYLE 100)) 10)))

;;;;;;;;;;;;;;;Thuoc SPT;;;;;;;;;;;;;;;;;;;;;;;;;;;

(setq NTD1 1)

(setq NTN1 1)

(while (<= NTD1 NTD )

 

(setq Bth1 (polar B18 (- (/ pi 2.00)) (* 10 NTD1)))

(setq Bth2 (polar Bth1 0 30))

(command ".line" Bth1 Bth2 "" )

 

;;;;;;;;;;;;;;;;;;

;;;;;;;;;;Thuoc o bieu do SPT tren mat cat

;;;;;;;;;;;;;;;

(setq Bthmc1 (polar DSPT1 (- (/ pi 2.00)) (* 10 NTD1)))

(setq Bthmc2 (polar Bthmc1 0 25))

(command ".line" Bthmc1 Bthmc2 "" )

 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;Thuoc ti le o lo khoan

(setq Bth3 (polar B15 (- (/ pi 2.00)) (* 10 NTD1)))

(setq Bth4 (polar Bth3 0 2.50))

(command ".line" Bth3 Bth4 "" ); doan dai

(setq NTD1 (+ NTD1 1))

)

(while (<= NTN1 NTN )

(setq Bth5 (polar B15 (- (/ pi 2.00)) NTN1))

(setq Bth6 (polar Bth5 0 1.20))

(command ".line" Bth5 Bth6 "" ); doan ngan

(setq NTN1 (+ NTN1 1))

)

 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

 

;;;;;;;;;;;;;;Xong lo khoan

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

 

(Setvar "CMDECHO" cmde)

(Princ "\n\n Lien he voi .........................")

(Setq *erro* m:err m:err nil)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;Tiep Tuc Mat cat

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

 

(if (< so Y)

( progn

 

(setq Khcach1( getreal ( strcat "\nCho khoang cach ho khoan thu " (rtos (+ so 1) 2 0 ) " toi ho khoan truoc do ( m ) :" )))

(setq Gachgiua( polar D5-1 (-(/ PI 2 )) 5 ))

(setq ChuKcach( polar Gachgiua 0 (-( / (* Khcach1 1000) 2 TLN) 2)))

(command "text" "style" "vntime" ChuKcach "2" "0" (rtos Khcach1 2 2 ) )

);dong ( progn

);dong (if (< so Y)

 

 

(command "redraw" "")

 

;;;;;;;;Xong phan ve mat cat

 

 

(setq Khcach (+ Khcach Khcach1 ) )

(setq so(+ 1 so ))

);dong (while (<= so y)

));Dong cond1

;;;;;;;;;;;;;;

;;;;;;;;;;;;;

 

); Dong progn if Y>1

) ; Dong if Y>1

;;;;;;;;;;;;

;;;;;;;;;;;;Neu Y=1

 

 

 

); ket thuc

 

;;;; Xong tat ca

 

 

Mong các bác giúp em em cảm ơn và hậu 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
Chào bác phamthanhBinh

Thứ tự thay đổi các text có vấn đề. Mình cũng chưa kiểm tra Lisp của bác nhưng khi chạy Lisp thì thứ tự không đúng nữa.

Việc chọn text mẫu có 8 kí tự và việc tách chuỗi như thế này là không nên chút nào :

(Setq t1 (substr text 1 6)

t2 (substr text 7 1)

t3 (substr text 8 1))

Bởi lẽ khi người sử dụng thay đổi số kí tự thì Code lỗi ngay

Thay vì như trên bác có thể viết như thế này :

Giả sử bien String có n kí tự -> ta dùng strlen để đếm kí tự -> sau đó sử dụng substr để tách như sau :

(Setq n (strlen String)

t1 (substr String 1 (- n 2))

t2 (substr String (- n 1) 1)

t3 (substr String n 1))

Diễn giải : Với n=8 thì bác thấy ngay rằng đoạn code trên trở về với đoạn Code của bác phải không?

Chào bác Tue_NV,

Rất mừng vì sự quan tâm góp ý của bác. Mình cũng thấy chưa hay lắm nhưng thực ra cách giải quyết của bác cũng còn có vấn đề là nếu số ký tự cuối cần cắt không phải là 2 thì cũng dính chấu bác ạ. Ví dụ chuỗi text mẫu mà bạn nguyenkhoadung chọn là T2/L1-13A > Khi đó cái kết quả của mình nó cũng sẽ sai liền. Vấn đề ở đây theo mình hiểu là việc dùng hàm (substr ...) để cắt chuỗi là chưa thực sự giải quyết được hoàn chỉnh vấn đề chứ không phải cách cắt nó theo chuẩn đầu hay chuẩn cuối bác ạ. Vì vậy mình mới lưu ý bạn nguyenkhoadung khi chọn text mẫu phải đúng như cái bạn ấy đã post là có 8 ký tự. Nếu bạn ấy chọn dùng text có kết cấu là T2/L1-1A thì lisp sẽ cho kết quả đúng như bạn ấy muốn là T2/L1-2B, T2/L1-3C, T2/L1-4A,............T2/L1-13A,......

Nếu text mẫu là T2/L1-3A thì lisp sẽ cho các text kết quả là : T2/L1-4B, T2/L1-5C, T2/L1-6A,......

Nếu text mẫu là T2/L1-1C thì lisp sẽ cho kết quả là T2/L1-2D, T2/L1-3E,..........

Đó là theo cách mình hiểu và suy luận cái ý của bạn nguyenkhoadung chứ chưa hẳn đã đúng với ý bạn ấy. Chỉ tiếc là bạn ấy chả nói rõ nên mình cứ suy luận mà làm như vậy. Có gì chưa đạt thì lại sửa tiếp vậy.

Quả thực đối với việc thay đổi nội dung text thì mình vẫn chưa tìm ra được hàm nào có khả năng xử lý triệt để được vấn đề. Mình cũng đã nghĩ tới việc tìm ký tự "-" trong chuỗi để cắt, nhưng vẫn vướng cái chuỗi phía sau là 1A, 13A hay 131A...... hay là 1AB, 13ABC........ bác ạ. Cái quy luật này chỉ có bạn nguyenkhoadung phải nói rõ ra thì mình mới có thể làm chuẩn xác được thôi chứ hiện tại việc mò ra quy luật thật khó. Đó là lý do mà mình cứ post đại cái suy luận đầu tiên lên để mọi người góp ý bác ạ. Cái suy luận đầu tiên của mình là nếu ký tự thứ 7 của text mẫu là số thì ở kết quả sẽ là giá trị tăng dần với bước nhảy là 1. còn nếu ký tự thứ 8 (cuối cùng) của text mẫu là text thì ở kết quả sẽ được thay thế bởi các text có ký tự với mã Ascii của nó tăng thêm 1 và tuần hoàn với bước là 3. Đó là cái ý của mình khi viết lisp này bác ạ.

Rất mong các bác góp ý thêm về cái cách suy luận đó của mì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
Chào các bác ,

em mơi xin đựoc cái LISP có thể xuất ra trụ hố khoan và mặt cắt địa chất công trình nhưng nội dung tôi không ưng ý lém

Nên nhờ các bác chỉ giáo để em có thể chỉnh theo ý của em cho đẹp và hoàn thiện hơn

 

trụ cắt hố khoan nguyên bản là đây:

 

http://www.cadviet.com/upfiles/Tru_nguyen_ban_1.bmp

 

Tôi cần sửa thành trụ cắt mẫu này:

 

http://www.cadviet.com/upfiles/Tru_Ho_khoan_mau_1.bmp

 

Mẫu LISP đây:

 

Mong các bác giúp em em cảm ơn và hậu tạ

Chào bạn hautrungnguyen8x,

Thực là chả hiểu ý của bạn nữa. Bạn không ứng ý chỗ nào trong cái lisp này nhỉ? Bạn muốn hoàn thiện nó ra sao? Bạn muốn chỉ giáo về điều gì? Về cách viết lisp, sửa lisp hay về cách thể hiện trên bản vẽ ?.......

Hai cái hình bạn post nó bé li ti vậy làm sao mà đọc được đây, mình đã dùng cả mấy cái kính lup rồi vẫn chào thua. Tốt hơn bạn nên post file bản vẽ lên chứ đừng post hình ảnh thế này, chả giúp gì cho người đọc cả bạn ạ.

Đây là một lisp về chuyên môn khá sâu của bạn, do vậy bạn cần trình bày rõ cái bạn cần thì mọi người mới có thể giúp bạn được. Mình thấy trong lisp này đã có những diễn giải khá chi tiết cho người dùng rồi đó. Nếu bạn có khả năng kha khá về lisp thì chắc việc chỉnh sửa nó theo ý bạn cũng không khó lắm. Bạn thử tìm hiểu kỹ nó xem, vì chỉ có bạn mới biết bạn cần chỉnh sửa như thế nào thôi. Chức năng của từng đoạn lisp đã được mô tả, tuy chưa phải là đủ nhưng ít niều cũng sẽ gợi ý được cho bạn cái hướng giải quyết vấn đề của bạn bạn ạ.

Nếu bạn chưa thể tự làm thì cần post thật rõ cái gì bạn thấy chưa được và bạn muốn nó ra sao bạn nhé. Tốt nhất là có các bản vẽ minh họa suy nghĩ của bạn bạn nhé.

Chúc bạn vui và thành công.

Lần sau những bài tương tự thế này bạn nên post trong topic Hỏi về lisp sẽ có nhiều người quan tâm hơ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
Chào bác Tue_NV,

Rất mừng vì sự quan tâm góp ý của bác. Mình cũng thấy chưa hay lắm nhưng thực ra cách giải quyết của bác cũng còn có vấn đề là nếu số ký tự cuối cần cắt không phải là 2 thì cũng dính chấu bác ạ. Ví dụ chuỗi text mẫu mà bạn nguyenkhoadung chọn là T2/L1-13A > Khi đó cái kết quả của mình nó cũng sẽ sai liền. Vấn đề ở đây theo mình hiểu là việc dùng hàm (substr ...) để cắt chuỗi là chưa thực sự giải quyết được hoàn chỉnh vấn đề chứ không phải cách cắt nó theo chuẩn đầu hay chuẩn cuối bác ạ. Vì vậy mình mới lưu ý bạn nguyenkhoadung khi chọn text mẫu phải đúng như cái bạn ấy đã post là có 8 ký tự. Nếu bạn ấy chọn dùng text có kết cấu là T2/L1-1A thì lisp sẽ cho kết quả đúng như bạn ấy muốn là T2/L1-2B, T2/L1-3C, T2/L1-4A,............T2/L1-13A,......

Nếu text mẫu là T2/L1-3A thì lisp sẽ cho các text kết quả là : T2/L1-4B, T2/L1-5C, T2/L1-6A,......

Nếu text mẫu là T2/L1-1C thì lisp sẽ cho kết quả là T2/L1-2D, T2/L1-3E,..........

Đó là theo cách mình hiểu và suy luận cái ý của bạn nguyenkhoadung chứ chưa hẳn đã đúng với ý bạn ấy. Chỉ tiếc là bạn ấy chả nói rõ nên mình cứ suy luận mà làm như vậy. Có gì chưa đạt thì lại sửa tiếp vậy.

Quả thực đối với việc thay đổi nội dung text thì mình vẫn chưa tìm ra được hàm nào có khả năng xử lý triệt để được vấn đề. Mình cũng đã nghĩ tới việc tìm ký tự "-" trong chuỗi để cắt, nhưng vẫn vướng cái chuỗi phía sau là 1A, 13A hay 131A...... hay là 1AB, 13ABC........ bác ạ. Cái quy luật này chỉ có bạn nguyenkhoadung phải nói rõ ra thì mình mới có thể làm chuẩn xác được thôi chứ hiện tại việc mò ra quy luật thật khó. Đó là lý do mà mình cứ post đại cái suy luận đầu tiên lên để mọi người góp ý bác ạ. Cái suy luận đầu tiên của mình là nếu ký tự thứ 7 của text mẫu là số thì ở kết quả sẽ là giá trị tăng dần với bước nhảy là 1. còn nếu ký tự thứ 8 (cuối cùng) của text mẫu là text thì ở kết quả sẽ được thay thế bởi các text có ký tự với mã Ascii của nó tăng thêm 1 và tuần hoàn với bước là 3. Đó là cái ý của mình khi viết lisp này bác ạ.

Rất mong các bác góp ý thêm về cái cách suy luận đó của mình.

Chào bác PhamThanhBinh

Cách suy luận đó của bác rất đúng. Nhưng xét về cái chung thì chưa đúng. Ví dụ Text mẫu có 9 kí tự T2/L1-11A, hay 10 kí tự là T2/L1-101A.

Do đó, mình cũng đưa ra góp ý để giải quyết vấn đề như thế này : Như bạn thấy là file NguyenKhoadung98 đưa có Text mẫu có 8 kí tự với 6 kí tự đầu là cố định, 2 kí tự sau là thay đổi. (2 kí tự sau này có thể là 3 kí tự nếu text mẫu là 9 kí tự, là 4 kí tự nếu text mẫu là 10 kí tự). Kí tự cuối cùng là kí tự chữ

 

Cách giải quyết cho vấn đề chung mình đưa ra :

 

Giả sử bien String có n kí tự -> ta dùng strlen để đếm kí tự -> sau đó sử dụng substr để tách như sau :

(Setq n (strlen String))

(Setq

t1 (substr String 1 6)

t2 (substr String 7 (- n 7))

t3 (substr String n 1)

)

Trong đó : n số kí tự của chuỗi string

t1 : chính là chuỗi có 6 kí tự cố định và kí tự thứ nhất tính từ kí tự đầu tiên

t2 : chính là chuỗi được trích từ vị trí thứ 7 và lấy (n-7) kí tự

(trừ 6 kí tự cố định đầu tiên và 1 kí tự chữ sau cùng)

t3 : số kí tự trích từ vị trí cuối cùng n và lấy 1 kí tự. Kí tự đó chính là kí tự chữ

 

Không biết Bác Bình đã thử chạy lại đoạn Code chưa nhưng khi thử với file cua NguyenKhoa dung thì vị trí chèn Text bị đảo lộn

bác hãy chạy thử file này thì biết :

http://www.cadviet.com/upfiles/Drawing_4.dwg

Bác Bình sử dụng DWGgateway mà mở CAD2007, mình sử dụng CAD2004 và dùng DWGgateway mở file bạn Dũng được 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
Chào bác PhamThanhBinh

Cách suy luận đó của bác rất đúng. Nhưng xét về cái chung thì chưa đúng. Ví dụ Text mẫu có 9 kí tự T2/L1-11A, hay 10 kí tự là T2/L1-101A.

Do đó, mình cũng đưa ra góp ý để giải quyết vấn đề như thế này : Như bạn thấy là file NguyenKhoadung98 đưa có Text mẫu có 8 kí tự với 6 kí tự đầu là cố định, 2 kí tự sau là thay đổi. (2 kí tự sau này có thể là 3 kí tự nếu text mẫu là 9 kí tự, là 4 kí tự nếu text mẫu là 10 kí tự). Kí tự cuối cùng là kí tự chữ

 

Cách giải quyết cho vấn đề chung mình đưa ra :

 

Giả sử bien String có n kí tự -> ta dùng strlen để đếm kí tự -> sau đó sử dụng substr để tách như sau :

(Setq n (strlen String))

(Setq

t1 (substr String 1 6)

t2 (substr String 7 (- n 7))

t3 (substr String n 1)

)

Trong đó : n số kí tự của chuỗi string

t1 : chính là chuỗi có 6 kí tự cố định và kí tự thứ nhất tính từ kí tự đầu tiên

t2 : chính là chuỗi được trích từ vị trí thứ 7 và lấy (n-7) kí tự

(trừ 6 kí tự cố định đầu tiên và 1 kí tự chữ sau cùng)

t3 : số kí tự trích từ vị trí cuối cùng n và lấy 1 kí tự. Kí tự đó chính là kí tự chữ

 

Không biết Bác Bình đã thử chạy lại đoạn Code chưa nhưng khi thử với file cua Nguyenkhoa dung thì vị trí chèn Text bị đảo lộn

bác hãy chạy thử file này thì biết :

http://www.cadviet.com/upfiles/Drawing_4.dwg

Bác Bình sử dụng DWGgateway mà mở CAD2007, mình sử dụng CAD2004 và dùng DWGgateway mở file bạn Dũng được mà

Chào bác Tue_NV,

1/- Mình đã mở được file bác gửi. Nhưng như vậy là hoàn toàn đúng với điều mình định đó bác ạ. Sở dĩ vị trí text bị đảo lộn phèo là do cái đường chuẩn của bạn nguyên khoa dung là một arc , mình cũng không hiểu tại sao với arc thì lệnh measure lại có chuyện đảo cái thứ tự của điểm chia như vậy nữa (nghĩa là nó lấy điểm chia theo thứ tự ngược lại) bác ạ. Cái lệnh measure nó tính từ điểm đầu của đường curve mà bác. Thế mà với thằng arc này lại như vầy. Thật khó hiểu quá. Chẳng những vậy cái pháp tuyến của nó cũng chổng tu luôn nên khi mình xài cái lệnh measure với block như bác nói, cái cột đèn nó nằm lộn ngược vào trong bác ạ. Như vậy mình sẽ phải thêm hàm điều kiện cho đường chuẩn này ra sao đây. Mình vẫn chưa nghĩ ra được bác ạ. Còn nội dung các text là đã đúng với yêu cầu của bạn nguyenkhoadung rồi mà.

Thực ra khi thử lisp mình chỉ thử với các đường chuẩn là line, Lwpolyline và spline chứ chưa thử với Arc nên không phát hiện ra cái lỗi này bác ạ. Nay mở file bác gửi mới kiểm tra được. Để mình sẽ xem thêm về lỗi này rồi thử sửa lại lisp xem sao.

2/- Mình đã cài thằng dwggateway rồi nhưng vẫn không mở được file của bạn nguyenkhoadung 98, cũng chả biết tại sao nữa, nhưng file bác gửi thì mở được ngay.

3/- Mình đồng ý với bác nếu như text mẫu chỉ có một ký tự ở cuối như bác đã nói, nhưng nếu nó là T2/L1-12ABC thì sao bác nhỉ? Cho nên mình muốn bạn nguyenkhoadung cho biết chính xác cái dạng của text mẫu là vì vậy.

4/- Mình cũng đang ngâm cứu cái hướng mà bác ndtnv chỉ, xong chưa thành công bác ạ.

Chúc bác luôn vui vẻ và hạnh phúc.

  • 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
Bạn thử dùng ct này xem sao và cho ý kiến. Tên lệnh là "docd".Nó đo line, polyline, arc.

 

http://www.cadviet.com/upfiles/docd.lsp

Chào q288!

Cảm ơn bạn nhiều nha!

để mình dùng thử rồi hồi âm bạn sau. Chúc sưc khoẻ!

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ác Tue_NV,

1/- Mình đã mở được file bác gửi. Nhưng như vậy là hoàn toàn đúng với điều mình định đó bác ạ. Sở dĩ vị trí text bị đảo lộn phèo là do cái đường chuẩn của bạn nguyên khoa dung là một arc , mình cũng không hiểu tại sao với arc thì lệnh measure lại có chuyện đảo cái thứ tự của điểm chia như vậy nữa (nghĩa là nó lấy điểm chia theo thứ tự ngược lại) bác ạ. Cái lệnh measure nó tính từ điểm đầu của đường curve mà bác. Thế mà với thằng arc này lại như vầy. Thật khó hiểu quá. Chẳng những vậy cái pháp tuyến của nó cũng chổng tu luôn nên khi mình xài cái lệnh measure với block như bác nói, cái cột đèn nó nằm lộn ngược vào trong bác ạ. Như vậy mình sẽ phải thêm hàm điều kiện cho đường chuẩn này ra sao đây. Mình vẫn chưa nghĩ ra được bác ạ. Còn nội dung các text là đã đúng với yêu cầu của bạn nguyenkhoadung rồi mà.

Thực ra khi thử lisp mình chỉ thử với các đường chuẩn là line, Lwpolyline và spline chứ chưa thử với Arc nên không phát hiện ra cái lỗi này bác ạ. Nay mở file bác gửi mới kiểm tra được. Để mình sẽ xem thêm về lỗi này rồi thử sửa lại lisp xem sao.

2/- Mình đã cài thằng dwggateway rồi nhưng vẫn không mở được file của bạn nguyenkhoadung 98, cũng chả biết tại sao nữa, nhưng file bác gửi thì mở được ngay.

3/- Mình đồng ý với bác nếu như text mẫu chỉ có một ký tự ở cuối như bác đã nói, nhưng nếu nó là T2/L1-12ABC thì sao bác nhỉ? Cho nên mình muốn bạn nguyenkhoadung cho biết chính xác cái dạng của text mẫu là vì vậy.

4/- Mình cũng đang ngâm cứu cái hướng mà bác ndtnv chỉ, xong chưa thành công bác ạ.

Chúc bác luôn vui vẻ và hạnh phúc.

Chào bác PhamThanhBinh

1./Đường Line, Pline còn 1 điểm chưa được đó là khi vẽ đường Line hay Pline từ phải sang trái. Tức là bác vẽ line hay pline từ phải sang trái đó thì khi chạy Lisp các cột điện bị chổng vó lên liền (các cột diện bị lộn ngược khi vẽ từ phải sang trái) và do đó các điểm chèn Text di chuyển về gần đường chuẩn hơn. Điều này là chưa được. Đối với Spline thì khi vẽ từ phải sang trái thì các cột điện cũng bị lộn đầu liền. Hơn nữa với Spline còn có điều chưa được là : Khi chạy với đường thật cong thì các Text sẽ bị lỗi ngay. Hướng của Text rất lộn xộn không trùng với phương tiếp tuyến của đường cong nữa.

Cái này mình nghĩ phải đi theo phương pháp của bác ndtnv

2./ Quy luật thay đổi Text của bạn làm cho bạn dũng không có gì sai. Nhưng giả sử bạn Dũng bắt đầu đánh số trụ đèn có 9 kí tự trở lên thì lỗi ngay. Trường hợp đánh số trụ đèn có 9 kí tự trên 1 đường tiếp theo chẳng hạn.

Theo hình vẽ thì Text mẫu cần tách có 3 loại cần tách:

a. Đó là chuỗi text1 chứa 6 kí tự cố định và kí tự đầu tiên được xác định từ vị trí đầu tiên của chuỗi.

b. Đó là chuỗi text2 chứa các kí tự là text số và thay đổi theo điểm chèn text (Với text 2 chứa toàn kí tự là số không có chữ)

c. Đó là chuỗi text3 chứa các kí tự là text chữ và thay đổi theo điểm chèn text (Với text 3 có thể chứa cả chữ và số).

Đoạn Code sau đây mình mày mò viết được theo yêu cầu trên, bác có thể tham khảo, và có thể tuỳ biến. AutoLisp là "thiên biến vạn hoá" mà :

(defun c:tachchuoi()
(setq ss (car(entsel "\n Chon chuoi :")))
(setq str (cdr(assoc 1 (entget ss))))
(setq t1 (substr str 1 6)
n (strlen str)
i 7
t22 (substr str i 1)
t2 "")

(while (and (= (ascii t22) 48))

(setq t22 (substr str i 1)
t2 (strcat t2 t22)
i (1+ i)
)
)
(setq t2 (substr t2 1 (- (strlen t2) 1)))
(setq t3 (substr str (- i 1) (- n 6 (strlen t2)))
)
(alert (strcat "\n Chuoi 1 la :" t1 "\n Chuoi 2 la :" t2 "\nChuoi 3 la :" t3))
)

Chúc bác vui và thành công

  • 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
Vừa edit lại được rồi, mọi người thử lại đi nhé.

 

Khổ quá, chữ :leluoi: nó bị đổi thành :cry:

Nên dòng lệnh:

(* (* D (sin (- A :cry:)) (phia p1 (polar p1 goc 1.0) p2))

Bị đổi thành:

(* (* D (sin (- A :cry:)) (phia p1 (polar p1 goc 1.0) p2))

thế là sai mất.

 

Đã đổi lại thành B ), và đã test lại thấy ok rồi.

Chân thành xin lỗi mọi người.

 

với lệnh "sd" sắp xếp dim

cad của mình báo vày ne`:" too many arguments" la` sao đây???

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 thử dùng ct này xem sao và cho ý kiến. Tên lệnh là "docd".Nó đo line, polyline, arc.

 

http://www.cadviet.com/upfiles/docd.lsp

Chào q288!

Cái lisp bạn cho nó cũng rất hay nhưng chưa đúng ý mình lắm, cảm ơn bạn nhiều nha.

Mình có cái lisp này nhưng nó chỉ cho mình đo một đoạn thôi. Nếu mình muốn đo 2 đoan thì mình phải đo từng đoạn rồi cộng hai con số này lại, như thế cũng khổ lắm, giờ mình muốn chọn hai (hoặc 3 đoạn) cần đo rồi pick một điểm cần đặt giá trị đó tại một điểm nào đó. Bạn giúp mính sửa lisp này với (mình không biết sửa) Cảm ơn bạn!

Chúc sức khoẻ!

Lisp cũ nè:

;;;------------------------------------------------------------------------------------

(defun getTw();;;Get current text width factor

(cdr (assoc 41 (tblsearch "style" (getvar "textstyle"))))

)

;;;------------------------------------------------------------------------------------

(defun getTh( / Th);;;Get current textheight or textsize

(if (= (setq Th (cdr (assoc 40 (tblsearch "style" (getvar "textstyle"))))) 0) (getvar "textsize") Th)

)

;;;------------------------------------------------------------------------------------

(defun emkT (S p)

;;;Write text S at point p by entmake function

;;;Text style, heigh and width factor get from current values

(entmake (list (cons 0 "TEXT") (cons 10 p) (cons 40 (getTh))

(cons 41 (getTw)) (cons 1 S) (cons 7 (getvar "textstyle"))))

)

;;;------------------------------------------------------------------------------------

(defun calcL (e);;;Calculate length of Line, Pline, 3dPoly, Spline, Circle, Arc, Polygon

(vlax-curve-getDistAtParam e (vlax-curve-getEndParam e))

)

;;;------------------------------------------------------------------------------------

(defun C:CHD( / Opt S1 S2 e p L)

(vl-load-com)

(if (not preT) (setq preT "L="))

(if (not sufT) (setq sufT ""))

(setq S1 preT S2 sufT)

(prompt (strcat "\nMeasure and write length. Current prefix:[" preT "]\tSuffix:[" sufT "]"))

(initget "Y N")

(setq Opt (getkword "\nChange prefix and suffix? [Yes/No] :"))

(if (not Opt) (setq Opt "N"))

(if (= Opt "Y") (progn

(setq

S1 (getstring "\nPrefix :") preT S1

S2 (getstring "\nSuffix :") sufT S2

)

))

(while (setq e (car (entsel "\nSelect Object or :")))

(setq

p (getpoint "\nBase point: ")

L (calcL e)

)

(emkT S1 p)

(emkT (strcat " " (rtos L) S2) p)

)

(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
co ai chi minh cach cai phim so 1 la layer net thay,so 2 la layer net dut,.....

cai nay nghe noi co ma khong biet lam, minh chi su dung khoang 5 layer tro lai thoi nhung hay phai doi qua doi lai nen rat can

cam on truoc nhe

cái này dùng lisp mà 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
Chào q288!

Cái lisp bạn cho nó cũng rất hay nhưng chưa đúng ý mình lắm, cảm ơn bạn nhiều nha.

Mình có cái lisp này nhưng nó chỉ cho mình đo một đoạn thôi. Nếu mình muốn đo 2 đoan thì mình phải đo từng đoạn rồi cộng hai con số này lại, như thế cũng khổ lắm, giờ mình muốn chọn hai (hoặc 3 đoạn) cần đo rồi pick một điểm cần đặt giá trị đó tại một điểm nào đó. Bạn giúp mính sửa lisp này với (mình không biết sửa) Cảm ơn bạn!

Chúc sức khoẻ!

Bạn thử dùng đoạn Lisp này xem :

Lisp này mình cải tiến dựa trên Lisp cũ của bác ssg và cải tiến theo yêu cầu của bạn :

Lisp này chơi tất cả mọi đối tượng LINE,ARC,CIRCLE,POLYLINE,LWPOLYLINE,ELLIPSE,SPLINE

;;;--------------------------------------------------------------------
(defun Length1(e) (vlax-curve-getDistAtParam e (vlax-curve-getEndParam e)))
;;;--------------------------------------------------------------------
(defun C:TL( / ss L e)
(setq olddim (getvar "DimZin"))
(setvar "dimzin" 0)

(setq
ss (ssget (list (cons 0 "LINE,ARC,CIRCLE,POLYLINE,LWPOLYLINE,ELLIPSE,SPLINE")))
L 0.0
)
(vl-load-com)
(while (setq e (ssname ss 0))
(setq L (+ L (length1 e)))
(ssdel e ss)
)


(setq po (getpoint "\n Pick diem Text :"))
(setq cao (getdist "\n Cho Chieu cao Text :"))
(setq tphan (getint "\n So le thap phan cua chieu dai :"))
(Command "style" "CADVIET" "TIMES.TTF" "0" "1" "0" "n" "n")
(Command "text" po cao "0" (rtos L 2 tphan))
(setvar "Dimzin" olddim)
)

 

Thay vì cảm ơn nhiều nhiều hãy tick thanks nhiều nhiều để ủng hộ cho hoành tráng nào :cry:

Chúc bạn thành công.

Có gì không được post lên đây mình sẽ sửa theo ý bạ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

cảm ơn sự nhiệt tình của bạn Bình và Bác Tue mình đã chạy thử lisp của bạn Bình và thấy các vấn đề sau :

 

1- với đuờng PLine thì nói chung là đã ok

 

2-với đuờng SPline và đuờng cong thì block nó bị nguợc và thứ tự đánh chữ bị đảo nguợc sau text gốc là T1/L1-1A thì sẽ phải đến T1/L1-2B rồi đến T1/L1-3C rôi đến T1/L1-4A,T1/L1-5B......( mình chủ yếu là dùng đường loại SPline :cry: )

 

3- về text thì mình cần các text sau giống text gốc về khoảng cách với điểm gốc và song song với tiếp tuyến của đường chuẩn như trong file kèm theo mình đã vẽ chi tiếp ( vi khó nói miêu tả :cry: )

 

4- về số ký tự thì text mẫu ban đầu của mình luôn là T1/L1-1A ( không hiểu như vậy có dễ dàng hơn cho các bạn kô )

 

file đính kèm ( mình đã chuyển về CAD 2004 )

 

 

http://www.cadviet.com/upfiles/12.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
Chào q288!

Cái lisp bạn cho nó cũng rất hay nhưng chưa đúng ý mình lắm, cảm ơn bạn nhiều nha.

Mình có cái lisp này nhưng nó chỉ cho mình đo một đoạn thôi. Nếu mình muốn đo 2 đoan thì mình phải đo từng đoạn rồi cộng hai con số này lại, như thế cũng khổ lắm, giờ mình muốn chọn hai (hoặc 3 đoạn) cần đo rồi pick một điểm cần đặt giá trị đó tại một điểm nào đó. Bạn giúp mính sửa lisp này với (mình không biết sửa) Cảm ơn bạn!

Chúc sức khoẻ!

Lisp cũ nè:

;;;------------------------------------------------------------------------------------

(defun getTw();;;Get current text width factor

(cdr (assoc 41 (tblsearch "style" (getvar "textstyle"))))

)

;;;------------------------------------------------------------------------------------

(defun getTh( / Th);;;Get current textheight or textsize

(if (= (setq Th (cdr (assoc 40 (tblsearch "style" (getvar "textstyle"))))) 0) (getvar "textsize") Th)

)

;;;------------------------------------------------------------------------------------

(defun emkT (S p)

;;;Write text S at point p by entmake function

;;;Text style, heigh and width factor get from current values

(entmake (list (cons 0 "TEXT") (cons 10 p) (cons 40 (getTh))

(cons 41 (getTw)) (cons 1 S) (cons 7 (getvar "textstyle"))))

)

;;;------------------------------------------------------------------------------------

(defun calcL (e);;;Calculate length of Line, Pline, 3dPoly, Spline, Circle, Arc, Polygon

(vlax-curve-getDistAtParam e (vlax-curve-getEndParam e))

)

;;;------------------------------------------------------------------------------------

(defun C:CHD( / Opt S1 S2 e p L)

(vl-load-com)

(if (not preT) (setq preT "L="))

(if (not sufT) (setq sufT ""))

(setq S1 preT S2 sufT)

(prompt (strcat "\nMeasure and write length. Current prefix:[" preT "]\tSuffix:[" sufT "]"))

(initget "Y N")

(setq Opt (getkword "\nChange prefix and suffix? [Yes/No] :"))

(if (not Opt) (setq Opt "N"))

(if (= Opt "Y") (progn

(setq

S1 (getstring "\nPrefix :") preT S1

S2 (getstring "\nSuffix :") sufT S2

)

))

(while (setq e (car (entsel "\nSelect Object or :")))

(setq

p (getpoint "\nBase point: ")

L (calcL e)

)

(emkT S1 p)

(emkT (strcat " " (rtos L) S2) p)

)

(princ)

)

 

Chào bạn,

Theo như bạn viết thì mình hiểu là bạn muốn cộng tất cả chiều dài các đoạn rồi chỉ viết ra tổng chiều dài thôi, phải vậy không? Nếu như vậy thì mình sửa lại như sau:

 

;;;------------------------------------------------------------------------------------

(defun getTw ()

;;;Get current text width factor

(cdr (assoc 41 (tblsearch "style" (getvar "textstyle"))))

)

;;;------------------------------------------------------------------------------------

(defun getTh (/ Th)

;;;Get current textheight or textsize

(if (= (setq

Th (cdr (assoc 40 (tblsearch "style" (getvar "textstyle"))))

)

0

)

(getvar "textsize")

Th

)

)

;;;------------------------------------------------------------------------------------

(defun emkT (S p)

;;;Write text S at point p by entmake function

;;;Text style, heigh and width factor get from current values

(entmake (list (cons 0 "TEXT")

(cons 10 p)

(cons 40 (getTh))

(cons 41 (getTw))

(cons 1 S)

(cons 7 (getvar "textstyle"))

)

)

)

;;;------------------------------------------------------------------------------------

(defun calcL (e)

;;;Calculate length of Line, Pline, 3dPoly, Spline, Circle, Arc, Polygon

(vlax-curve-getDistAtParam e (vlax-curve-getEndParam e))

)

;;;------------------------------------------------------------------------------------

(defun C:CHD (/ Opt S1 S2 e p L)

(vl-load-com)

(if (not preT)

(setq preT "L=")

)

(if (not sufT)

(setq sufT "")

)

(setq S1 preT

S2 sufT

)

(prompt (strcat

"\nMeasure and write length. Current prefix:["

preT

"]\tSuffix:["

sufT

"]"

)

)

(initget "Y N")

(setq Opt (getkword "\nChange prefix and suffix? [Yes/No] :"))

(if (not Opt)

(setq Opt "N")

)

(if (= Opt "Y")

(progn

(setq

S1 (getstring "\nPrefix :")

preT S1

S2 (getstring "\nSuffix :")

sufT S2

)

)

)

(setq ss (ssget)

n 0

total 0

)

 

(repeat (sslength ss)

(setq e (ssname ss n)

L (calcL e)

total (+ total L)

n (1+ n)

)

)

(setq p (getpoint "\nBase point: "))

(emkT S1 p)

(emkT (strcat " " (rtos total) S2) p)

 

(princ)

)

 

Bạn chạy thử xem có đúng ý bạn không, nếu không thì sửa tiếp. Chào 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

Chào cả nhà !

Mình thấy ở ngoài có người hỏi nhưng chưa ai trả lời ! Mình cũng đang cần cái này mong cả nhà giúp đỡ !

Mình đang rất cần lisp kiểm tra như sau:

 

+ layer 1 là Pline (mầu xanh cây) bắt snap hai đầu vào layer 2 cũng là Pline (mầu đen)

Nếu hai đầu layer 1 chưa tới hoặc vượt quá layer 2 thì lisp sẽ báo lỗi bằng point hoặc Circle

Mong cả nhà giúp mình với cám ơn nhiều lắm !

 

Ảnh Minh họa :ban_ve_minh_hoa.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

Chào các bạn,

Nhờ các bạn viết dùm mình đọan code "Chèn block vào trung điểm của các đường thẳng được chọn", trình tự như sau:

- Gõ tên lệnh

- Chương trình sẽ yêu cầu chọn block cần insert

- Chương trinh sẽ yêu cầu chọn các đường thẳng để insert block

- Thực thi lệnh

Xin chân thành cảm ơ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
Chào các bạn,

Nhờ các bạn viết dùm mình đọan code "Chèn block vào trung điểm của các đường thẳng được chọn", trình tự như sau:

- Gõ tên lệnh

- Chương trình sẽ yêu cầu chọn block cần insert

- Chương trinh sẽ yêu cầu chọn các đường thẳng để insert block

- Thực thi lệnh

Xin chân thành cảm ơn!

Chọn block bằng cách nào?

-Hiện bảng danh sách.

-Chỉ block có sẳn trên bản vẽ:

+Góc quay, tỉ lệ giống y như block được chọn.

+Chỉ lấy tên block được chọ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

Chào bạn duy782006,mình xin giải thích rõ hơn

Nhờ các bạn viết dùm mình đọan code "Chèn block vào trung điểm của các đường thẳng được chọn", trình tự như sau:

- Gõ tên lệnh

- Chương trình sẽ yêu cầu chọn block cần insert (chỉ đường dẫn đến thư mục chứa file block)

- Chương trinh sẽ yêu cầu chọn các đường thẳng trong bản vẽ để insert block

- Thực thi lệnh

- Kết quả là block sẽ chèn và tự động align dọc theo phương của các đường thẳng được chọn

Xin chân thành cảm ơ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
Khách
Chủ đề này bây giờ đã bị đóng lại để trả lời thêm.

×