Đến nội dung


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

[Yêu cầu] lisp Phun tọa độ các điểm từ file txt vào CAD


  • Please log in to reply
107 replies to this topic

#41 thanhduan2407

thanhduan2407

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 995 Bài viết
Điểm đánh giá: 223 (khá)

Đã gửi 29 July 2010 - 11:25 PM

Bạn lấy data (File txt) ở đâu mà phức tạp thế ? :(

Tham khảo hàm Split chấp nhận các dấu cách, dấu Tab, dấu phẩy.
vd : Stt “dấu cách” tọa độ X “dấu Tab” tọa độ Y “dấu phẩy” tọa độ Z “dấu cách” Mã Code
Chú ý : giữa các giá trị chỉ có 1 kí tự , không áp dụng cho t/hợp có nhiều dấu Tab hoặc nhiều dấu phẩy.

(defun Split(str / i kitu line lst txtPhanbiet)
(setq i 1
txtPhanbiet " ,")
(while (< i (strlen str))
(setq kitu (substr str i 1))
(if (vl-string-search kitu txtPhanbiet)
(progn
(if (null Lst)
(setq Lst (list (substr Str 1 (- i 1))))
(setq Lst (append Lst (list (read (substr Str 1 (- i 1)))))))
(setq Str (substr Str (+ i 1)) i 1))
(setq i (1+ i)) ) )
(setq Lst (append Lst (list Str))) )

Cảm ơn bác nhiều
Không phải là file số liệu nó phức tạp đâu bác
Mà là cháu muốn mở 1 file số liệu mà kí tự phân biệt có thể là dấu cách hoặc dấu tab hoặc dấu phẩy mà cháu không phải chuyển đổi sang một dạng nhất định. Bác có thể nói cho cháu cách sử dụng hàm trên được không ạ?
Cháu đã học VB và cháu muốn học thêm về Lisp. Càng học cháu càng say mê. Không biết bác Gia_bach đã học từ đâu mà sao bác giỏi thế. bác có thể cho cháu lời khuyên khi nghiên cứu Lisp được không ạ?
Cháu cảm ơn bác nhiều. Bác thật Pro
  • 0



Tôi là con kiến bò trên sa mạc kiến thức bao la. Biển học thật rộng lớn







#42 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1436 Bài viết
Điểm đánh giá: 1426 (rất tốt)

Đã gửi 30 July 2010 - 10:22 AM

Xin lổi bạn , mình trình bày không mạch lạc lấm.
Đúng như như ý bạn nói. Không cấn Block, xuất điểm ra chỉ theo các nội dung trên.
Mong được bạn giúp

Cập nhật theo yêu cầu :
Lisp tạo ra 1 đ/tuợng POINT và 3 đ/tuợng TEXT như sau :
1. Lớp Point có kí hiệu điểm (cột 2-3)
2. Lớp Sothutu : TEXT Số thứ tự (cột 1)
3. Lớp Caodo : TEXT Cao độ (cột 4)
4. Lớp Code : TEXT Code (cột 5)


với định dạng của file điểm đo : STT X Y Z Code ,
chấp nhận kí tự phân biệt giữa các giá trị trong file điểm đo : dấu cách, dấu Tab, dấu phẩy.
(defun c:RFT(/ code data f h line pt pxy spc txt stt ten);Read File Txt
;| By : Gia Bach, gia_bach @ www.CadViet.com |;
(vl-load-com)
(defun Split(str / i kitu line lst txtPhanbiet)
(setq i 1 txtPhanbiet (strcat(chr 9)(chr 32)(chr 44)))
(while (< i (strlen str))
(setq kitu (substr str i 1))
(if (vl-string-search kitu txtPhanbiet)
(progn
(if (null Lst)
(setq Lst (list (substr Str 1 (- i 1))))
(setq Lst (append Lst (list (read (substr Str 1 (- i 1)))))))
(setq Str (substr Str (+ i 1)) i 1))
(setq i (1+ i)) ) )
(setq Lst (append Lst (list Str))) )
(or *h* (setq *h* 2 ))
(initget 6)
(setq h (getdist (strcat "\nNhap chieu cao Text <" (rtos *h*) "> :")) )
(if h (setq *h* h) (setq h *h*))
(if (setq ten (getfiled "Chon File txt" (getvar "dwgprefix") "txt" 8))
(progn
(or (tblsearch "layer" "Point") (command "-layer" "n" "Point" "") )
(or (tblsearch "layer" "Sothutu") (command "-layer" "n" "Sothutu" "c" 3 "Sothutu" "") )
(or (tblsearch "layer" "Caodo") (command "-layer" "n" "Caodo" "c" 4 "Caodo" "") )
(or (tblsearch "layer" "Code") (command "-layer" "n" "Code" "c" 2 "Code" "") )
(setq spc (vla-get-ModelSpace (vla-get-ActiveDocument(vlax-get-Acad-Object))))
(setq f (open (findfile ten) "r"))
(while (setq Line (read-line f))
(if (wcmatch Line (strcat "*"(chr 9)"*,*"(chr 32)"*,*`"(chr 44)"*"))
(progn
(setq data (split Line) code (last data))
(if (and
(= (vl-list-length data)5)
(setq pt (vl-remove code (cdr data)))
(not(vl-catch-all-error-p (vl-catch-all-apply 'vlax-3d-point pt))) )
(progn
(setq stt (car data) pXY (list (car pt)(cadr pt)))
(vla-put-Layer (vla-addpoint spc (vlax-3d-point pXY)) "Point")
(vla-put-Layer (setq txt (vla-addtext spc stt (vlax-3d-point (list 0 0 0)) h)) "Sothutu")
(vla-put-Alignment txt 8)
(vla-put-TextAlignmentPoint txt (vlax-3d-point pXY))
(vla-put-Layer (setq txt (vla-addtext spc code (vlax-3d-point (list 0 0 0)) h)) "Code")
(vla-put-Alignment txt 6)
(vla-put-TextAlignmentPoint txt (vlax-3d-point (polar pXY 0 (* 0.2 h))))
(vla-put-Layer (vla-addtext spc (caddr pt) (vlax-3d-point pXY) h) "Caodo") ))))) ) )
(princ))


.........
Mà là cháu muốn mở 1 file số liệu mà kí tự phân biệt có thể là dấu cách hoặc dấu tab hoặc dấu phẩy mà cháu không phải chuyển đổi sang một dạng nhất định. Bác có thể nói cho cháu cách sử dụng hàm trên được không ạ?
Cháu đã học VB và cháu muốn học thêm về Lisp. Càng học cháu càng say mê.
.............

to : thanhduan2407
- Bạn tham khảo cách sử dụng hàm Split ở trên, chỉ đơn giản thay dòng (split Line "\t") bằng (split Line)
và dòng (vl-string-search "\t" Line) bằng (wcmatch Line (strcat "*"(chr 9)"*,*"(chr 32)"*,*`"(chr 44)"*"))
- Nếu bạn đã biết VB thì việc học LISP rất đơn giản (Ngôn ngữ chỉ là cách thể hiện, thuật toán mới là vấn đề)
- Bạn có thể tham khảo bài Hướng dẫn lập trình Lisp, Hãy tự mình khám phá... của bác SSG.

Bài viết đã được chỉnh sửa nội dung bởi gia_bach: 30 July 2010 - 11:23 AM

  • 1

#43 khaosat2009

khaosat2009

    biết lệnh offset

  • Members
  • PipPipPip
  • 171 Bài viết
Điểm đánh giá: 10 (tàm tạm)

Đã gửi 30 July 2010 - 12:13 PM

[quote name='gia_bach' date='Jul 30 2010, 10:22' post='102365']
Cập nhật theo yêu cầu :
Lisp tạo ra 1 đ/tuợng POINT và 3 đ/tuợng TEXT như sau :
1. Lớp Point có kí hiệu điểm (cột 2-3)
2. Lớp Sothutu : TEXT Số thứ tự (cột 1)
3. Lớp Caodo : TEXT Cao độ (cột 4)
4. Lớp Code : TEXT Code (cột 5)


với định dạng của file điểm đo : STT X Y Z Code ,
chấp nhận kí tự phân biệt giữa các giá trị trong file điểm đo : dấu cách, dấu Tab, dấu phẩy.
(defun c:RFT(/ code data f h line pt pxy spc txt stt ten);Read File Txt
;| By : Gia Bach, gia_bach @ www.CadViet.com |;
(vl-load-com)
(defun Split(str / i kitu line lst txtPhanbiet)
(setq i 1 txtPhanbiet (strcat(chr 9)(chr 32)(chr 44)))
(while (< i (strlen str))
(setq kitu (substr str i 1))
(if (vl-string-search kitu txtPhanbiet)
(progn
(if (null Lst)
(setq Lst (list (substr Str 1 (- i 1))))
(setq Lst (append Lst (list (read (substr Str 1 (- i 1)))))))
(setq Str (substr Str (+ i 1)) i 1))
(setq i (1+ i)) ) )
(setq Lst (append Lst (list Str))) )
(or *h* (setq *h* 2 ))
(initget 6)
(setq h (getdist (strcat "\nNhap chieu cao Text <" (rtos *h*) "> :")) )
(if h (setq *h* h) (setq h *h*))
(if (setq ten (getfiled "Chon File txt" (getvar "dwgprefix") "txt" 8))
(progn
(or (tblsearch "layer" "Point") (command "-layer" "n" "Point" "") )
(or (tblsearch "layer" "Sothutu") (command "-layer" "n" "Sothutu" "c" 3 "Sothutu" "") )
(or (tblsearch "layer" "Caodo") (command "-layer" "n" "Caodo" "c" 4 "Caodo" "") )
(or (tblsearch "layer" "Code") (command "-layer" "n" "Code" "c" 2 "Code" "") )
(setq spc (vla-get-ModelSpace (vla-get-ActiveDocument(vlax-get-Acad-Object))))
(setq f (open (findfile ten) "r"))
(while (setq Line (read-line f))
(if (wcmatch Line (strcat "*"(chr 9)"*,*"(chr 32)"*,*`"(chr 44)"*"))
(progn
(setq data (split Line) code (last data))
(if (and
(= (vl-list-length data)5)
(setq pt (vl-remove code (cdr data)))
(not(vl-catch-all-error-p (vl-catch-all-apply 'vlax-3d-point pt))) )
(progn
(setq stt (car data) pXY (list (car pt)(cadr pt)))
(vla-put-Layer (vla-addpoint spc (vlax-3d-point pXY)) "Point")
(vla-put-Layer (setq txt (vla-addtext spc stt (vlax-3d-point (list 0 0 0)) h)) "Sothutu")
(vla-put-Alignment txt 8)
(vla-put-TextAlignmentPoint txt (vlax-3d-point pXY))
(vla-put-Layer (setq txt (vla-addtext spc code (vlax-3d-point (list 0 0 0)) h)) "Code")
(vla-put-Alignment txt 6)
(vla-put-TextAlignmentPoint txt (vlax-3d-point (polar pXY 0 (* 0.2 h))))
(vla-put-Layer (vla-addtext spc (caddr pt) (vlax-3d-point pXY) h) "Caodo") ))))) ) )
(princ))

Mình load RFT về, không biết tại sao mình lại không xuất các điểm ra Cad được,
file tọa độ của mình đây :
http://www.cadviet.c...es/3/toado9.txt
http://www.cadviet.c...les/3/ntdau.txt
Mong được anh giúp và hướng dẫn cho. Cám ơn
  • 0

#44 tnmtpc

tnmtpc

    biết dimcontinue

  • Members
  • PipPipPipPipPip
  • 370 Bài viết
Điểm đánh giá: 206 (khá)

Đã gửi 30 July 2010 - 03:00 PM

Lisp yêu cầu cấu trúc file điểm đo có 5 cột : STT X Y Z Code.
Data của file toado9.txtntdau.txt chỉ có 4 cột : STT X Y Z làm sao lấy đuợc giá trị Code?
pótay :(

Yêu cầu không rõ ràng, do vậy làm khó cho GIA_BACH. pó tay là phải. Để mình nói hộ cho các bạn ấy yêu cầu thế này nhé:
Yêu cầu một lisp như sau: sau khi gõ lệnh lisp, xuất hiện hộp thoại chọn file dữ liệu. File dữ liệu có định dạng STT X Y Z CODE, tuy nhiên không nhất thiết phải có đầy đủ 5 cột, nhưng tối thiểu phải có 4 cột trong đó 3 cột bắt buột là STT X Y, cột còn lại là tùy chọn (có thể là Z có thể là CODE). Về kiểu phân tách dữ liệu giữa các cột có thể là dấu tab, dấu cách, dấu phảy nhưng kiểu nào một kiểu không thể lẫn lộn nhiều kiểu trong một file. Thực thể bắn vào Cad có thể là point kèm theo các thông tin STT Z CODE được phân lớp riêng, hoặc có thể là block do người sử dụng lựa chọn.
Diễn giải như thế không biết đã trúng ý chưa
  • 0

#45 khaosat2009

khaosat2009

    biết lệnh offset

  • Members
  • PipPipPip
  • 171 Bài viết
Điểm đánh giá: 10 (tàm tạm)

Đã gửi 30 July 2010 - 04:19 PM

Yêu cầu không rõ ràng, do vậy làm khó cho GIA_BACH. pó tay là phải. Để mình nói hộ cho các bạn ấy yêu cầu thế này nhé:
Yêu cầu một lisp như sau: sau khi gõ lệnh lisp, xuất hiện hộp thoại chọn file dữ liệu. File dữ liệu có định dạng STT X Y Z CODE, tuy nhiên không nhất thiết phải có đầy đủ 5 cột, nhưng tối thiểu phải có 4 cột trong đó 3 cột bắt buột là STT X Y, cột còn lại là tùy chọn (có thể là Z có thể là CODE). Về kiểu phân tách dữ liệu giữa các cột có thể là dấu tab, dấu cách, dấu phảy nhưng kiểu nào một kiểu không thể lẫn lộn nhiều kiểu trong một file. Thực thể bắn vào Cad có thể là point kèm theo các thông tin STT Z CODE được phân lớp riêng, hoặc có thể là block do người sử dụng lựa chọn.
Diễn giải như thế không biết đã trúng ý chưa

Xin lổi anh giabach và cám ơn Anh tnmtpc đã giúp . Đúng như ý anh tnmtpc giải thích
Trong file text mình có 5 cột gồm STT - Tọa độ X - Tọa độ Y - Cao độ Z - Ghi chú Code ---->( Có thể dạng Tab, cách hay " , " )
Sau khi gỏ lệnh lisp, xuất hiện hộp thoại chọn file text tọa độ trên, Chọn file; Lisp yêu cầu người dùng chọn dạng tọa độ Trắc địa hay tọa độ Cad thì xuất các điểm đó ra Cad; Trên bản vẽ : Tạo theo các lớp riêng là : STT, điểm , Cao độ và Code ; Xuất các dử liệu đó theo cột 1 : STT, Điểm ( Theo tọa độ X,Y Cột 2 và 3 ), Cao độ ( theo cột 4 ), Code ( theo cột 5 ).
File mình gởi lại đây, cả dạng mẫu xuất ra.
http://www.cadviet.c.../3/toado9_1.txt
http://www.cadviet.c...k_diem_do_1.rar
Mong được anh giúp, Cám ơn Anh
  • 0

#46 VUVUZELA

VUVUZELA

    biết lệnh chamfer

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

Đã gửi 31 July 2010 - 11:46 AM

Cái này mình mạn phép chỉnh bản quyền của tác giả 1 ty để làm theo yêu cầu của bạn
Có gì pm nhé
;; free lisp from cadviet.com
(defun c:RFT (/ code data f h line pt pxy spc txt stt ten)
;Read File Txt
;| By : Gia Bach, gia_bach @ www.CadViet.com |;
(vl-load-com)
(defun Split (str / i kitu line lst txtPhanbiet)
(setq i 1
txtPhanbiet
(strcat (chr 9) (chr 32) (chr 44))
)
(while (< i (strlen str))
(setq kitu (substr str i 1))
(if (vl-string-search kitu txtPhanbiet)
(progn
(if (null Lst)
(setq Lst (list (substr Str 1 (- i 1))))
(setq Lst (append Lst (list (read (substr Str 1 (- i 1))))))
)
(setq Str (substr Str (+ i 1))
i 1
)
)
(setq i (1+ i))
)
)
(setq Lst (append Lst (list Str)))
)
(or *h* (setq *h* 2))
(initget 6)
(setq h (getdist (strcat "\nNhap chieu cao Text <" (rtos *h*) "> :")
)
)
(if h
(setq *h* h)
(setq h *h*)
)
(if (setq ten (getfiled "Chon File txt" (getvar "dwgprefix") "txt" 8))
(progn
(or (tblsearch "layer" "Point")
(command "-layer" "n" "Point" "")
)
(or (tblsearch "layer" "Sothutu")
(command "-layer" "n" "Sothutu" "c" 3 "Sothutu" "")
)
(or (tblsearch "layer" "Caodo")
(command "-layer" "n" "Caodo" "c" 4 "Caodo" "")
)
(or (tblsearch "layer" "Code")
(command "-layer" "n" "Code" "c" 2 "Code" "")
)
(setq spc (vla-get-ModelSpace
(vla-get-ActiveDocument (vlax-get-Acad-Object))
)
)
(setq f (open (findfile ten) "r"))
(while (setq Line (read-line f))
(if (wcmatch
Line
(strcat "*" (chr 9) "*,*" (chr 32) "*,*`" (chr 44) "*")
)
(progn
(setq data (split Line)
code (last data)
)
(if (and
(= (vl-list-length data) 5)
(setq pt (vl-remove code (cdr data)))
(not (vl-catch-all-error-p
(vl-catch-all-apply 'vlax-3d-point pt)
)
)
)
;;;neu du lieu data co 5 bien so
(progn
(setq stt (car data)
pXY (list (car pt) (cadr pt))
)
(vla-put-Layer
(vla-addpoint spc (vlax-3d-point pXY))
"Point"
)
(vla-put-Layer
(setq txt (vla-addtext
spc
stt
(vlax-3d-point (list 0 0 0))
h
)
)
"Sothutu"
)
(vla-put-Alignment txt 8)
(vla-put-TextAlignmentPoint txt (vlax-3d-point pXY))
(vla-put-Layer
(setq txt (vla-addtext
spc
code
(vlax-3d-point (list 0 0 0))
h
)
)
"Code"
)
(vla-put-Alignment txt 6)
(vla-put-TextAlignmentPoint
txt
(vlax-3d-point (polar pXY 0 (* 0.2 h)))
)
(vla-put-Layer
(vla-addtext spc (caddr pt) (vlax-3d-point pXY) h)
"Caodo"
)
)
;;het progn list data=5
;;;neu du lieu data co 4 bien so (ban co the dung ham COND hoac if de bay loi
(progn
(setq pt (vl-remove code (cdr data)))
(not (vl-catch-all-error-p
(vl-catch-all-apply 'vlax-3d-point pt)
)
)


(setq stt (car data)
pXY (list (car pt) (cadr pt))
)
(vla-put-Layer
(vla-addpoint spc (vlax-3d-point pXY))
"Point"
)
(vla-put-Layer
(setq txt (vla-addtext
spc
stt
(vlax-3d-point (list 0 0 0))
h
)
)
"Sothutu"
)
(vla-put-Alignment txt 8)
(vla-put-TextAlignmentPoint txt (vlax-3d-point pXY))
(vla-put-Layer
(vla-addtext spc (last data) (vlax-3d-point pXY) h)
"Caodo"
)
)
;;;het progn list=4
)
)
)
)
)
)
(princ)
)

  • 0

Hệ thống Liên Kết, Thiết Kế Tự Động

ttps://www.facebook...etThietKeTuDong


#47 QuyetKSTD

QuyetKSTD

    biết zoom

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

Đã gửi 31 July 2010 - 02:27 PM

Mình cũng mới ra trường, mình có một file txt tọa độ và độ cao của các điểm. MÌnh cần phun các điểm này lên cad, mình đang chạy Cad 2004, mong các bạn giúp mình với. Mình xin cảm ơn các bạn nhiều
Cấu trúc file dữ liệu txt của mình như sau : STT[dấu tab]X[dấu tab]Y[dấu tab]H
Đây là file dữ liệu text của mình


1 2329601.111 354348.8217 4.05
2 2329680.452 354348.2847 4.8
3 2329695.731 354348.2665 4.59
4 2329760.395 354350.4096 3.83
5 2329734.627 354350.1736 4.06
6 2330033.924 354349.2966 4.02
7 2329853.42 354349.7547 2.51
8 2329954.23 354348.8552 2.96
9 2330024.335 354351.0173 4.36
10 2329141.601 353367.2477 0.87
11 2330083.283 354226.1244 4.41
12 2330096.782 354188.1586 4.56
13 2330084.739 354223.5669 4.41
14 2330072.18 354255.2336 4.24
15 2330082.446 354246.8349 4.28
16 2330086.674 354234.9562 4.31
17 2330090.746 354233.5468 4.34
18 2330116.096 354243.8815 4.56
19 2330118.593 354238.1892 4.6
20 2330101.13 354230.8936 4.38
21 2330091.073 354224.7862 4.53
22 2330091.201 354221.8695 4.55
23 2330099.308 354215.9192 4.74
24 2330071.157 354221.5968 4.64
25 2330095.871 354223.633 4.76
26 2330100.713 354225.8228 4.74
27 2330096.417 354228.2863 4.4
28 2330076.872 354207.8337 4.33
29 2330098.445 354236.9191 4.18
30 2330089.139 354245.2211 4.54
31 2330093.554 354234.947 4.43
32 2330093.809 354234.1311 4.3
33 2330077.296 354206.8475 4.36
34 2330077.296 354206.8359 4.36
35 2330080.467 354207.1728 4.34
36 2330077.579 354223.6025 4.32
37 2328911.223 353810.2686 1.55
38 2328930.38 353819.8861 1.35
39 2328932.433 353812.9436 1.94
40 2328924.433 353805.1256 1.6
41 2328947.281 353825.2526 0.83
42 2328949.977 353816.2742 1.76
43 2328906.788 353794.8497 2.29
44 2328976.065 353841.1843 0.85
45 2328979.015 353829.1792 1.93
46 2328880.018 353796.0264 0.95
47 2328884.037 353784.6955 2.26
48 2329026.355 353856.6625 1.55
49 2329027.518 353848.5523 1.71
50 2328858.222 353787.9463 0.95
51 2328862.666 353775.4874 1.88
52 2329054.445 353866.6599 1.27
53 2329053.742 353858.7875 1.73
54 2328839.054 353780.611 1.26
55 2328843.557 353768.0034 1.91
56 2329078.308 353869.6154 2.39
57 2329085.9 353867.6712 3.99
58 2328821.916 353769.5474 1.71
59 2328825.473 353760.1213 1.95
60 2329026.61 353860.7997 1.44
61 2329003.847 353875.4712 1.46
62 2329011.732 353897.4581 0.79
63 2329021.917 353911.9714 1.73
64 2329028.05 353914.3383 3.28
65 2329044.328 353901.1668 3.16
66 2329040.012 353897.6879 2.55
67 2329034.921 353863.9433 1.39
68 2329039.723 353881.0748 1.45
69 2329044.894 353889.0434 1.77
70 2329011.37 353425.3278 4.61
71 2329064.694 353867.1626 1.64
72 2329069.979 353873.7371 1.81
73 2329061.087 353463.8208 3.11
74 2329329.408 354070.541 2.66
75 2329080.108 353860.5343 4.69
76 2328794.414 354261.704 6.67
77 2329329.419 354070.4917 2.7
78 2329189.908 353430.8551 0.9
79 2329601.943 353646.8228 1.8
80 2329581.827 353628.4327 1.77
81 2329588.321 353590.2256 1.85
82 2329552.453 353635.0785 1.7
83 2329566.867 353618.4323 1.68
84 2329548.335 353606.4003 1.64
85 2329563.541 353597.9979 1.64
86 2329559.423 353565.6399 1.5
87 2329528.219 353567.7175 1.34
88 2329360.117 353856.4385 3.01
89 2329901.307 353838.1542 2.03
90 2329879.959 353833.0103 2.06
91 2329410.493 354139.359 3.16
92 2329414.134 354181.8021 3.26
93 2329460.394 354210.5262 3.06
94 2329438.549 354182.5595 3.21
95 2329428.269 354155.6503 3.36
96 2329444.118 354137.8585 3.37
97 2329450.543 354157.3651 3.18
98 2329462.536 354182.8739 3.08
99 2329471.821 354156.3236 3.13
100 2329498.932 354159.7108 2.94
101 2329484.285 354175.7011 3.03
102 2329478.605 354199.3376 3.22
103 2329476.064 354222.5253 2.98
104 2329491.459 354232.4484 3.11
105 2329509.754 354224.4423 2.73
106 2329497.199 354210.2139 2.79
107 2329500.637 354180.743 2.89
108 2329515.733 354203.4819 2.89
109 2329519.619 354178.6653 2.83
110 2329559.919 354231.6953 2.76
111 2329571.177 354254.3869 2.86
112 2329577.346 354209.3126 2.83
113 2329540.482 354182.3826 2.79
114 2329524.382 354228.2562 2.68
115 2329533.636 354206.4522 2.67
116 2329543.566 354223.8679 2.69
117 2329553.784 354207.0975 2.68
118 2329626.709 354331.7136 3.51
119 2329631.417 354307.7982 3.58
120 2329600.893 354265.6954 3.42
121 2329656.473 354242.136 3.08
122 2329641.136 354231.0403 3.23
123 2329628.227 354248.2159 3.73
124 2329627.013 354275.7271 3.65
125 2329639.01 354283.0229 3.67
126 2329697.331 354296.742 3.03
127 2329698.904 354271.4127 3.04
128 2329728.226 354318.2756 3.34
129 2329733.608 354337.3948 3.46
130 2329749.658 354324.7107 3.54
131 2329735.412 354298.1964 3.2
132 2329741.424 354314.1186 3.35
133 2329327.247 354208.2119 2.83
134 2329382.94 354215.3401 2.71
135 2329400.162 354250.7598 2.74
136 2329590.31 354326.2031 4.12
137 2329567.523 354298.5968 4.14
138 2329551.795 354288.4233 4.09
139 2329530.579 354281.19 3.99
140 2329508.943 354268.9288 3.89
141 2329491.988 354267.0737 3.97
142 2329472.663 354263.0806 3.85
143 2329464.457 354128.786 3.11
144 2329461.662 354104.0341 3.12
145 2329436.668 354113.7444 3.42
146 2329446.863 354082.3093 3.33
147 2329447.192 354101.0716 3.3
148 2329452.454 354120.1631 3.23
149 2329014.338 353983.0356 1.72
150 2329004.07 354005.1022 1.76
151 2328988.285 354016.6165 1.8
152 2328977.317 354034.1895 1.81
153 2329003.535 354023.2941 1.79
154 2329023.772 354001.9913 1.72
155 2329031.652 353982.1207 1.69
156 2329032.875 353961.4675 1.66
157 2329044.695 353990.4159 1.69
158 2329049.043 353969.7627 1.67
159 2329048.499 353948.2936 1.64
160 2329060.35 353958.853 1.63
161 2329069.861 353973.5229 1.59
162 2329061.981 353991.1177 1.61
163 2329052.575 354004.0478 1.64
164 2329038.11 354011.4198 1.72
165 2329019.846 354026.4674 1.75
166 2328993.661 354039.0803 1.83
167 2329011.432 354040.0549 1.82
168 2328990.496 354057.3544 1.82
169 2329088.88 353976.5068 1.82
170 2329098.556 353970.0502 1.92
171 2329099.094 353969.461 1.92
172 2329109.388 354100.9901 1.96
173 2329115.774 354082.3129 1.97
174 2329091.236 354016.8952 1.87
175 2329118.582 354052.5581 2.01
176 2329097.306 354049.8987 1.94
177 2329079.97 354054.5447 1.86
178 2329088.598 354043.3077 1.87
179 2329073.536 354024.497 1.83
180 2329065.01 354035.6059 1.82
181 2329056.511 354046.945 1.82
182 2329067.337 354109.8725 1.81
183 2329061.774 354086.6043 1.84
184 2329059.196 354065.9122 1.89
185 2329041.657 354070.4651 1.85
186 2329038.549 354086.206 1.84
187 2329035.826 354115.7098 1.76
188 2329054.451 354133.0674 1.77
189 2329048.2 354110.8097 1.75
190 2329029.83 354103.7988 1.81
191 2329041.392 354140.1436 1.73
192 2329045.719 354159.8214 1.73
193 2329060.005 354163.5647 1.74
194 2329123.259 354116.0352 1.91
195 2329121.565 354102.2377 1.94
196 2329133.097 354091.2322 1.96
197 2329097.002 354076.1075 1.99
198 2329079.472 354089.8692 1.91
199 2329079.575 354068.2903 1.92
200 2329099.401 354063.3615 1.94
201 2329108.934 354073.4725 1.97
202 2329109.467 354132.6348 1.85
203 2329102.084 354112.7204 1.88
204 2329083.817 354111.8766 1.86
205 2329086.662 354131.7224 1.81
206 2329078.821 354145.9014 1.78
207 2329084.443 354161.5853 1.77
208 2329102.146 354146.9556 1.81
209 2329086.538 354224.0938 1.7
210 2329126.434 354242.1297 1.73
211 2329125.352 354227.33 1.71
212 2329127.709 354213.3064 1.84
213 2329106.1 354221.002 1.72
214 2329101.997 354204.2132 1.81
215 2329109.828 354191.2014 1.79
216 2329095.116 354169.3198 1.76
217 2329109.344 354175.6344 1.74
218 2329116.48 354160.4862 1.82
219 2329159.585 354221.5597 1.76
220 2329137.947 354216.668 1.76
221 2329124.202 354198.1743 1.76
222 2329129.275 354181.278 1.72
223 2329160.525 354208.2795 1.75
224 2329146.39 354197.641 1.75
225 2329151.466 354181.7352 1.7
226 2329169.994 354201.3772 1.74
227 2329167.87 354178.5351 1.73
228 2329136.449 354160.2965 1.89
229 2329149.083 354162.7697 1.8
230 2329144.757 354149.3288 1.87
231 2329125.069 354142.1175 1.88
232 2329150.965 354136.2676 1.88
233 2329133.172 354125.1692 1.9
234 2329169.971 354147.125 1.78
235 2329162.062 354159.5629 1.46
236 2329154.539 354122.9936 1.88
237 2329168.803 354105.9881 1.87
238 2329186.445 354123.9234 1.77
239 2329205.451 354129.2301 1.77
240 2329192.144 354145.4276 1.76
241 2329192.056 354068.6113 1.86
242 2329166.475 354083.4023 1.95
243 2329197.398 354112.6559 1.79
244 2329186.238 354095.3848 1.84
245 2329178.505 354134.0333 1.78
246 2329172.778 354122.4415 1.81
247 2329143.789 354108.3114 1.93
248 2329157.596 354094.9717 1.96
249 2329144.009 354077.1375 1.24
250 2329130.953 354075.7252 1.97
251 2329146.794 354054.4384 1.99
252 2329187.345 353995.6889 1.92
253 2329132.434 353961.3012 1.92
254 2329132.028 353935.1167 1.84
255 2329119.202 353926.778 1.72
256 2329109.045 353960.1 1.84
257 2329109.709 353948.4834 1.68
258 2329109.348 353930.9206 1.72
259 2329101.629 353920.3708 1.67
260 2329083.57 353942.8778 1.6
261 2329088.078 353930.3007 1.65
262 2329075.722 353913.924 1.68
263 2329093.13 354005.5501 1.91
264 2329111.642 354027.8498 1.98
265 2329115.959 354004.2776 1.98
266 2329125.05 353988.8494 2.01
267 2329130.009 354031.9827 2.02
268 2329127.738 354056.8024 1.99
269 2329158.064 354064.8042 1.99
270 2329166.641 354042.8475 1.96
271 2329147.118 354039.4426 1.99
272 2329150.307 354015.8454 2.01
273 2329169.275 354027.0437 1.97
274 2329173.484 354055.9448 1.87
275 2329182.549 354074.7298 1.85
276 2329187.861 354044.5164 1.95
277 2329198.877 354060.5214 1.87
278 2329201.533 354075.7256 1.89
279 2329214.057 354052.622 1.89
280 2329203.212 354027.854 1.94
281 2329226.797 354038.1144 1.92
282 2329237.518 354042.2618 1.98
283 2329222.929 354012.2059 1.85
284 2329229.828 354000.1155 1.74
285 2329236.555 353979.3012 1.92
286 2329238.533 353992.1372 1.76
287 2329249.809 354004.2657 1.72

Chào bạn...
Mình xem chuỗi toạ độ này quen lắm. Bạn gần khu vực Thị trấn Mạo Khê??? Liên hệ với mình nếu thấy cần.
  • 0
Đầu bằng mũ cối,
Óc bằng cái kim,
Tim bằng lọ xilin,
Phổi bằng lõ điếu,
Có tí trí thông minh lằm ở đâu!???
http://me.zing.vn/ap...g/IWZC7CWO.html

#48 khaosat2009

khaosat2009

    biết lệnh offset

  • Members
  • PipPipPip
  • 171 Bài viết
Điểm đánh giá: 10 (tàm tạm)

Đã gửi 31 July 2010 - 07:23 PM

Cái này mình mạn phép chỉnh bản quyền của tác giả 1 ty để làm theo yêu cầu của bạn
Có gì pm nhé

;; free lisp from cadviet.com
(defun c:RFT (/ code data f h line pt pxy spc txt stt ten)
;Read File Txt
;| By : Gia Bach, gia_bach @ www.CadViet.com |;
(vl-load-com)
(defun Split (str / i kitu line lst txtPhanbiet)
(setq i 1
txtPhanbiet
(strcat (chr 9) (chr 32) (chr 44))
)
(while (< i (strlen str))
(setq kitu (substr str i 1))
(if (vl-string-search kitu txtPhanbiet)
(progn
(if (null Lst)
(setq Lst (list (substr Str 1 (- i 1))))
(setq Lst (append Lst (list (read (substr Str 1 (- i 1))))))
)
(setq Str (substr Str (+ i 1))
i 1
)
)
(setq i (1+ i))
)
)
(setq Lst (append Lst (list Str)))
)
(or *h* (setq *h* 2))
(initget 6)
(setq h (getdist (strcat "\nNhap chieu cao Text <" (rtos *h*) "> :")
)
)
(if h
(setq *h* h)
(setq h *h*)
)
(if (setq ten (getfiled "Chon File txt" (getvar "dwgprefix") "txt" 8))
(progn
(or (tblsearch "layer" "Point")
(command "-layer" "n" "Point" "")
)
(or (tblsearch "layer" "Sothutu")
(command "-layer" "n" "Sothutu" "c" 3 "Sothutu" "")
)
(or (tblsearch "layer" "Caodo")
(command "-layer" "n" "Caodo" "c" 4 "Caodo" "")
)
(or (tblsearch "layer" "Code")
(command "-layer" "n" "Code" "c" 2 "Code" "")
)
(setq spc (vla-get-ModelSpace
(vla-get-ActiveDocument (vlax-get-Acad-Object))
)
)
(setq f (open (findfile ten) "r"))
(while (setq Line (read-line f))
(if (wcmatch
Line
(strcat "*" (chr 9) "*,*" (chr 32) "*,*`" (chr 44) "*")
)
(progn
(setq data (split Line)
code (last data)
)
(if (and
(= (vl-list-length data) 5)
(setq pt (vl-remove code (cdr data)))
(not (vl-catch-all-error-p
(vl-catch-all-apply 'vlax-3d-point pt)
)
)
)
;;;neu du lieu data co 5 bien so
(progn
(setq stt (car data)
pXY (list (car pt) (cadr pt))
)
(vla-put-Layer
(vla-addpoint spc (vlax-3d-point pXY))
"Point"
)
(vla-put-Layer
(setq txt (vla-addtext
spc
stt
(vlax-3d-point (list 0 0 0))
h
)
)
"Sothutu"
)
(vla-put-Alignment txt 8)
(vla-put-TextAlignmentPoint txt (vlax-3d-point pXY))
(vla-put-Layer
(setq txt (vla-addtext
spc
code
(vlax-3d-point (list 0 0 0))
h
)
)
"Code"
)
(vla-put-Alignment txt 6)
(vla-put-TextAlignmentPoint
txt
(vlax-3d-point (polar pXY 0 (* 0.2 h)))
)
(vla-put-Layer
(vla-addtext spc (caddr pt) (vlax-3d-point pXY) h)
"Caodo"
)
)
;;het progn list data=5
;;;neu du lieu data co 4 bien so (ban co the dung ham COND hoac if de bay loi
(progn
(setq pt (vl-remove code (cdr data)))
(not (vl-catch-all-error-p
(vl-catch-all-apply 'vlax-3d-point pt)
)
)
(setq stt (car data)
pXY (list (car pt) (cadr pt))
)
(vla-put-Layer
(vla-addpoint spc (vlax-3d-point pXY))
"Point"
)
(vla-put-Layer
(setq txt (vla-addtext
spc
stt
(vlax-3d-point (list 0 0 0))
h
)
)
"Sothutu"
)
(vla-put-Alignment txt 8)
(vla-put-TextAlignmentPoint txt (vlax-3d-point pXY))
(vla-put-Layer
(vla-addtext spc (last data) (vlax-3d-point pXY) h)
"Caodo"
)
)
;;;het progn list=4
)
)
)
)
)
)
(princ)
)

Cám ơn Bạn thật nhiều, Mình có thể nhớ bạn hướng dẫn nội dung của lisp trên được không ? Mình muốn học và hiểu về cách xây dựng đoạn Lisp trên.
Mong được bạn giúp
  • 0

#49 tnmtpc

tnmtpc

    biết dimcontinue

  • Members
  • PipPipPipPipPip
  • 370 Bài viết
Điểm đánh giá: 206 (khá)

Đã gửi 31 July 2010 - 08:43 PM

Cái này mình mạn phép chỉnh bản quyền của tác giả 1 ty để làm theo yêu cầu của bạn
Có gì pm nhé

;; free lisp from cadviet.com
(defun c:RFT (/ code data f h line pt pxy spc txt stt ten)
;Read File Txt
;| By : Gia Bach, gia_bach @ www.CadViet.com |;
(vl-load-com)
(defun Split (str / i kitu line lst txtPhanbiet)
(setq i 1
txtPhanbiet
(strcat (chr 9) (chr 32) (chr 44))
)
(while (< i (strlen str))
(setq kitu (substr str i 1))
(if (vl-string-search kitu txtPhanbiet)
(progn
(if (null Lst)
(setq Lst (list (substr Str 1 (- i 1))))
(setq Lst (append Lst (list (read (substr Str 1 (- i 1))))))
)
(setq Str (substr Str (+ i 1))
i 1
)
)
(setq i (1+ i))
)
)
(setq Lst (append Lst (list Str)))
)
(or *h* (setq *h* 2))
(initget 6)
(setq h (getdist (strcat "\nNhap chieu cao Text <" (rtos *h*) "> :")
)
)
(if h
(setq *h* h)
(setq h *h*)
)
(if (setq ten (getfiled "Chon File txt" (getvar "dwgprefix") "txt" 8))
(progn
(or (tblsearch "layer" "Point")
(command "-layer" "n" "Point" "")
)
(or (tblsearch "layer" "Sothutu")
(command "-layer" "n" "Sothutu" "c" 3 "Sothutu" "")
)
(or (tblsearch "layer" "Caodo")
(command "-layer" "n" "Caodo" "c" 4 "Caodo" "")
)
(or (tblsearch "layer" "Code")
(command "-layer" "n" "Code" "c" 2 "Code" "")
)
(setq spc (vla-get-ModelSpace
(vla-get-ActiveDocument (vlax-get-Acad-Object))
)
)
(setq f (open (findfile ten) "r"))
(while (setq Line (read-line f))
(if (wcmatch
Line
(strcat "*" (chr 9) "*,*" (chr 32) "*,*`" (chr 44) "*")
)
(progn
(setq data (split Line)
code (last data)
)
(if (and
(= (vl-list-length data) 5)
(setq pt (vl-remove code (cdr data)))
(not (vl-catch-all-error-p
(vl-catch-all-apply 'vlax-3d-point pt)
)
)
)
;;;neu du lieu data co 5 bien so
(progn
(setq stt (car data)
pXY (list (car pt) (cadr pt))
)
(vla-put-Layer
(vla-addpoint spc (vlax-3d-point pXY))
"Point"
)
(vla-put-Layer
(setq txt (vla-addtext
spc
stt
(vlax-3d-point (list 0 0 0))
h
)
)
"Sothutu"
)
(vla-put-Alignment txt 8)
(vla-put-TextAlignmentPoint txt (vlax-3d-point pXY))
(vla-put-Layer
(setq txt (vla-addtext
spc
code
(vlax-3d-point (list 0 0 0))
h
)
)
"Code"
)
(vla-put-Alignment txt 6)
(vla-put-TextAlignmentPoint
txt
(vlax-3d-point (polar pXY 0 (* 0.2 h)))
)
(vla-put-Layer
(vla-addtext spc (caddr pt) (vlax-3d-point pXY) h)
"Caodo"
)
)
;;het progn list data=5
;;;neu du lieu data co 4 bien so (ban co the dung ham COND hoac if de bay loi
(progn
(setq pt (vl-remove code (cdr data)))
(not (vl-catch-all-error-p
(vl-catch-all-apply 'vlax-3d-point pt)
)
)
(setq stt (car data)
pXY (list (car pt) (cadr pt))
)
(vla-put-Layer
(vla-addpoint spc (vlax-3d-point pXY))
"Point"
)
(vla-put-Layer
(setq txt (vla-addtext
spc
stt
(vlax-3d-point (list 0 0 0))
h
)
)
"Sothutu"
)
(vla-put-Alignment txt 8)
(vla-put-TextAlignmentPoint txt (vlax-3d-point pXY))
(vla-put-Layer
(vla-addtext spc (last data) (vlax-3d-point pXY) h)
"Caodo"
)
)
;;;het progn list=4
)
)
)
)
)
)
(princ)
)

Lisp có trục trặc:
Nếu hàng nào có đủ 5 cột thì nó hiểu cột thứ 5 là "độ cao" còn cột thứ tư bị lờ đi
Trong trắc địa trục X là trục bắc, Y là trục đông, khác với trục toạ độ Đề các trong toán học, do vậy lisp đã thể hiện vị trí points sai.
Các point được bắn vào cad là 2D , nên gán Z cho nó để còn sử dụng vào việc tạo bình đồ. Nếu ai không cần chế độ 3D point thì chỉ cần sử dụng lệnh là phẳng là xong
Bác xem lại các vấn đề trên.
  • 0

#50 khaosat2009

khaosat2009

    biết lệnh offset

  • Members
  • PipPipPip
  • 171 Bài viết
Điểm đánh giá: 10 (tàm tạm)

Đã gửi 01 August 2010 - 08:15 AM

Lisp có trục trặc:
Nếu hàng nào có đủ 5 cột thì nó hiểu cột thứ 5 là "độ cao" còn cột thứ tư bị lờ đi
Trong trắc địa trục X là trục bắc, Y là trục đông, khác với trục toạ độ Đề các trong toán học, do vậy lisp đã thể hiện vị trí points sai.
Các point được bắn vào cad là 2D , nên gán Z cho nó để còn sử dụng vào việc tạo bình đồ. Nếu ai không cần chế độ 3D point thì chỉ cần sử dụng lệnh là phẳng là xong
Bác xem lại các vấn đề trên.

Cám ơn Bạn đã chỉ giúp.
Nhờ các bạn giúp giùm,
1. Cột thứ 6 là code, tên code trùng với kí hiệu nhờ các bạn giúp chèn kí hiệu đó ra bản vẽ luôn.
2. Thên cộ thứ 7 : là NOI ( nối điểm ) mục đích nối điểm tự động, dựa và tên điểm cột 1 nối theo thứ tự ta chọn ( ví dụ 1,2,5,7,9) thì nối các điểm 1-2-5-7-9 thành Pl.
Rất mong được các bạn giúp
  • 0

#51 thanhduan2407

thanhduan2407

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 995 Bài viết
Điểm đánh giá: 223 (khá)

Đã gửi 01 August 2010 - 07:20 PM

Cập nhật theo yêu cầu :
Lisp tạo ra 1 đ/tuợng POINT và 3 đ/tuợng TEXT như sau :
1. Lớp Point có kí hiệu điểm (cột 2-3)
2. Lớp Sothutu : TEXT Số thứ tự (cột 1)
3. Lớp Caodo : TEXT Cao độ (cột 4)
4. Lớp Code : TEXT Code (cột 5)


với định dạng của file điểm đo : STT X Y Z Code ,
chấp nhận kí tự phân biệt giữa các giá trị trong file điểm đo : dấu cách, dấu Tab, dấu phẩy.

(defun c:RFT(/ code data f h line pt pxy spc txt stt ten);Read File Txt
;| By : Gia Bach, gia_bach @ www.CadViet.com |;
(vl-load-com)
(defun Split(str / i kitu line lst txtPhanbiet)
(setq i 1 txtPhanbiet (strcat(chr 9)(chr 32)(chr 44)))
(while (< i (strlen str))
(setq kitu (substr str i 1))
(if (vl-string-search kitu txtPhanbiet)
(progn
(if (null Lst)
(setq Lst (list (substr Str 1 (- i 1))))
(setq Lst (append Lst (list (read (substr Str 1 (- i 1)))))))
(setq Str (substr Str (+ i 1)) i 1))
(setq i (1+ i)) ) )
(setq Lst (append Lst (list Str))) )
(or *h* (setq *h* 2 ))
(initget 6)
(setq h (getdist (strcat "\nNhap chieu cao Text <" (rtos *h*) "> :")) )
(if h (setq *h* h) (setq h *h*))
(if (setq ten (getfiled "Chon File txt" (getvar "dwgprefix") "txt" 8))
(progn
(or (tblsearch "layer" "Point") (command "-layer" "n" "Point" "") )
(or (tblsearch "layer" "Sothutu") (command "-layer" "n" "Sothutu" "c" 3 "Sothutu" "") )
(or (tblsearch "layer" "Caodo") (command "-layer" "n" "Caodo" "c" 4 "Caodo" "") )
(or (tblsearch "layer" "Code") (command "-layer" "n" "Code" "c" 2 "Code" "") )
(setq spc (vla-get-ModelSpace (vla-get-ActiveDocument(vlax-get-Acad-Object))))
(setq f (open (findfile ten) "r"))
(while (setq Line (read-line f))
(if (wcmatch Line (strcat "*"(chr 9)"*,*"(chr 32)"*,*`"(chr 44)"*"))
(progn
(setq data (split Line) code (last data))
(if (and
(= (vl-list-length data)5)
(setq pt (vl-remove code (cdr data)))
(not(vl-catch-all-error-p (vl-catch-all-apply 'vlax-3d-point pt))) )
(progn
(setq stt (car data) pXY (list (car pt)(cadr pt)))
(vla-put-Layer (vla-addpoint spc (vlax-3d-point pXY)) "Point")
(vla-put-Layer (setq txt (vla-addtext spc stt (vlax-3d-point (list 0 0 0)) h)) "Sothutu")
(vla-put-Alignment txt 8)
(vla-put-TextAlignmentPoint txt (vlax-3d-point pXY))
(vla-put-Layer (setq txt (vla-addtext spc code (vlax-3d-point (list 0 0 0)) h)) "Code")
(vla-put-Alignment txt 6)
(vla-put-TextAlignmentPoint txt (vlax-3d-point (polar pXY 0 (* 0.2 h))))
(vla-put-Layer (vla-addtext spc (caddr pt) (vlax-3d-point pXY) h) "Caodo") ))))) ) )
(princ))

to : thanhduan2407
- Bạn tham khảo cách sử dụng hàm Split ở trên, chỉ đơn giản thay dòng (split Line "\t") bằng (split Line)
và dòng (vl-string-search "\t" Line) bằng (wcmatch Line (strcat "*"(chr 9)"*,*"(chr 32)"*,*`"(chr 44)"*"))
- Nếu bạn đã biết VB thì việc học LISP rất đơn giản (Ngôn ngữ chỉ là cách thể hiện, thuật toán mới là vấn đề)
- Bạn có thể tham khảo bài Hướng dẫn lập trình Lisp, Hãy tự mình khám phá... của bác SSG.

Cảm ơn bác rất nhiều
Cháu sẽ cố gắng nghiên cứu
Autolisp thật là món quà tuyệt diệu
Có chỗ nào không hiểu mong bác giúp đỡ cháu nhiều.
Cháu không biết bác bao nhiêu tuổi xưng hô cho phải phép
Cháu năm nay 27 tuổi
Cảm ơn bác đã quan tâm đến bài viết
  • 0



Tôi là con kiến bò trên sa mạc kiến thức bao la. Biển học thật rộng lớn







#52 thanhduan2407

thanhduan2407

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 995 Bài viết
Điểm đánh giá: 223 (khá)

Đã gửi 02 August 2010 - 03:03 PM


(defun trim (str)
(while (and (/= str "") (= (substr str 1 1) " "))
(setq str (substr str 2))
(while (and (/= str "") (= (substr str (strlen str) 1) " "))
(setq str (substr str 1 (1- (strlen str))))
)
)
str
)

Bác Gia_Bach à
Với ý tưởng là đọc 1 file txt với nhiều dấu cách hoặc nhiều dấu tab
Cháu đưa ra một ý tưởng: Cắt bỏ khoảng trống 2 đầu bằng hàm trim(str) sau đó kết hợp với hàm split của bác. Như vậy có ổn không ạ?
Bác có thể cho cháu một ý kiến được không?
(Hàm trim(str) cháu lấy từ diễn đàn )
  • 0



Tôi là con kiến bò trên sa mạc kiến thức bao la. Biển học thật rộng lớn







#53 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1436 Bài viết
Điểm đánh giá: 1426 (rất tốt)

Đã gửi 02 August 2010 - 04:00 PM


(defun trim (str)
(while (and (/= str "") (= (substr str 1 1) " "))
(setq str (substr str 2))
(while (and (/= str "") (= (substr str (strlen str) 1) " "))
(setq str (substr str 1 (1- (strlen str))))
)
)
str
)

Bác Gia_Bach à
Với ý tưởng là đọc 1 file txt với nhiều dấu cách hoặc nhiều dấu tab
Cháu đưa ra một ý tưởng: Cắt bỏ khoảng trống 2 đầu bằng hàm trim(str) sau đó kết hợp với hàm split của bác. Như vậy có ổn không ạ?
Bác có thể cho cháu một ý kiến được không?
(Hàm trim(str) cháu lấy từ diễn đàn )

Đây là thao tác chuẩn hóa dữ liệu.
Bạn có thể sử dụng hàm Trim này, nhưng nó chỉ xóa bớt khoảng trắng (SPACE) còn các kí hiệu khác như dấu TAG, dấu phẩy thì chưa sử lý đuợc. Cần phải bổ sung thêm.

CadViet là diễn đàn dành cho tất cả mọi người, Bạn hạn chế trao đổi cá nhân hay ghi đích danh 1 ai đó.
Trên diễn đàn còn có rất nhiều nguời có khả năng giúp bạn ...

...
Cháu không biết bác bao nhiêu tuổi xưng hô cho phải phép
Cháu năm nay 27 tuổi
Cảm ơn bác đã quan tâm đến bài viết

Tui thuộc thế hệ 6X, đừng gọi bằng thằng là phải phép rùi. :(
  • 1

#54 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 02 August 2010 - 04:17 PM


(defun trim (str)
(while (and (/= str "") (= (substr str 1 1) " "))
(setq str (substr str 2))
(while (and (/= str "") (= (substr str (strlen str) 1) " "))
(setq str (substr str 1 (1- (strlen str))))
)
)
str
)

......
Cháu đưa ra một ý tưởng: Cắt bỏ khoảng trống 2 đầu bằng hàm trim(str) sau đó kết hợp với hàm split của bác. Như vậy có ổn không ạ?
......
(Hàm trim(str) cháu lấy từ diễn đàn )

Hàm vl-string-trim có chức năng tương tự như hàm trim(str) của bạn nhưng hay hơn là không những có thể loại bỏ khoảng trắng ở 2 đầu mà có thể loại bỏ các các kí tự không phải là khoảng trắng ở 2 đầu
Cú pháp : (vl-string-trim char-set str)

Ví dụ 1 :
(vl-string-trim " " "   CAD VIET  ")
-> Return : CAD VIET

Ví dụ 2 :
(vl-string-trim "-" "-----CAD VIET------")
-> Return : CAD VIET
  • 1

#55 thanhduan2407

thanhduan2407

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 995 Bài viết
Điểm đánh giá: 223 (khá)

Đã gửi 02 August 2010 - 04:22 PM

Cập nhật theo yêu cầu :
Lisp tạo ra 1 đ/tuợng POINT và 3 đ/tuợng TEXT như sau :
1. Lớp Point có kí hiệu điểm (cột 2-3)
2. Lớp Sothutu : TEXT Số thứ tự (cột 1)
3. Lớp Caodo : TEXT Cao độ (cột 4)
4. Lớp Code : TEXT Code (cột 5)


với định dạng của file điểm đo : STT X Y Z Code ,
chấp nhận kí tự phân biệt giữa các giá trị trong file điểm đo : dấu cách, dấu Tab, dấu phẩy.

(defun c:RFT(/ code data f h line pt pxy spc txt stt ten);Read File Txt
;| By : Gia Bach, gia_bach @ www.CadViet.com |;
(vl-load-com)
(defun Split(str / i kitu line lst txtPhanbiet)
(setq i 1 txtPhanbiet (strcat(chr 9)(chr 32)(chr 44)))
(while (< i (strlen str))
(setq kitu (substr str i 1))
(if (vl-string-search kitu txtPhanbiet)
(progn
(if (null Lst)
(setq Lst (list (substr Str 1 (- i 1))))
(setq Lst (append Lst (list (read (substr Str 1 (- i 1)))))))
(setq Str (substr Str (+ i 1)) i 1))
(setq i (1+ i)) ) )
(setq Lst (append Lst (list Str))) )
(or *h* (setq *h* 2 ))
(initget 6)
(setq h (getdist (strcat "\nNhap chieu cao Text <" (rtos *h*) "> :")) )
(if h (setq *h* h) (setq h *h*))
(if (setq ten (getfiled "Chon File txt" (getvar "dwgprefix") "txt" 8))
(progn
(or (tblsearch "layer" "Point") (command "-layer" "n" "Point" "") )
(or (tblsearch "layer" "Sothutu") (command "-layer" "n" "Sothutu" "c" 3 "Sothutu" "") )
(or (tblsearch "layer" "Caodo") (command "-layer" "n" "Caodo" "c" 4 "Caodo" "") )
(or (tblsearch "layer" "Code") (command "-layer" "n" "Code" "c" 2 "Code" "") )
(setq spc (vla-get-ModelSpace (vla-get-ActiveDocument(vlax-get-Acad-Object))))
(setq f (open (findfile ten) "r"))
(while (setq Line (read-line f))
(if (wcmatch Line (strcat "*"(chr 9)"*,*"(chr 32)"*,*`"(chr 44)"*"))
(progn
(setq data (split Line) code (last data))
(if (and
(= (vl-list-length data)5)
(setq pt (vl-remove code (cdr data)))
(not(vl-catch-all-error-p (vl-catch-all-apply 'vlax-3d-point pt))) )
(progn
(setq stt (car data) pXY (list (car pt)(cadr pt)))
(vla-put-Layer (vla-addpoint spc (vlax-3d-point pXY)) "Point")
(vla-put-Layer (setq txt (vla-addtext spc stt (vlax-3d-point (list 0 0 0)) h)) "Sothutu")
(vla-put-Alignment txt 8)
(vla-put-TextAlignmentPoint txt (vlax-3d-point pXY))
(vla-put-Layer (setq txt (vla-addtext spc code (vlax-3d-point (list 0 0 0)) h)) "Code")
(vla-put-Alignment txt 6)
(vla-put-TextAlignmentPoint txt (vlax-3d-point (polar pXY 0 (* 0.2 h))))
(vla-put-Layer (vla-addtext spc (caddr pt) (vlax-3d-point pXY) h) "Caodo") ))))) ) )
(princ))

to : thanhduan2407
- Bạn tham khảo cách sử dụng hàm Split ở trên, chỉ đơn giản thay dòng (split Line "\t") bằng (split Line)
và dòng (vl-string-search "\t" Line) bằng (wcmatch Line (strcat "*"(chr 9)"*,*"(chr 32)"*,*`"(chr 44)"*"))
- Nếu bạn đã biết VB thì việc học LISP rất đơn giản (Ngôn ngữ chỉ là cách thể hiện, thuật toán mới là vấn đề)
- Bạn có thể tham khảo bài Hướng dẫn lập trình Lisp, Hãy tự mình khám phá... của bác SSG.

Bác Gia_bach à!
Có sử dụng thì mới biết là có nhiều vấn đề nhỏ trong một vấn đề lớn.
Cháu đã sử dụng được hàm của bác nhưng có một vấn đề là: Mã Code của cháu chỉ sử dụng được từ viết liền nhau, nếu có dấu cách hoặc dấu tab hoặc dấu phẩy trong mã Code thì sẽ báo lỗi. Cháu hiểu lỗi này vì nó sẽ tách tất cả các kí tự trong một dòng. Lại mong bác chỉnh sửa giúp cháu. (cháu rất ngại vì là 1 người lắm chuyện, không chịu suy nghĩ) cháu sẽ cố gắng để sau này được như bác. Thà nhận là không biết gì còn hơn là giấu dốt ko chịu tìm hiểu. Kính mong thư bác hồi âm
  • 0



Tôi là con kiến bò trên sa mạc kiến thức bao la. Biển học thật rộng lớn







#56 thanhduan2407

thanhduan2407

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 995 Bài viết
Điểm đánh giá: 223 (khá)

Đã gửi 03 August 2010 - 10:33 AM

Đây là thao tác chuẩn hóa dữ liệu.
Bạn có thể sử dụng hàm Trim này, nhưng nó chỉ xóa bớt khoảng trắng (SPACE) còn các kí hiệu khác như dấu TAG, dấu phẩy thì chưa sử lý đuợc. Cần phải bổ sung thêm.

CadViet là diễn đàn dành cho tất cả mọi người, Bạn hạn chế trao đổi cá nhân hay ghi đích danh 1 ai đó.
Trên diễn đàn còn có rất nhiều nguời có khả năng giúp bạn ...
Tui thuộc thế hệ 6X, đừng gọi bằng thằng là phải phép rùi. :(

Cảm ơn bác Gia_bach rất nhiều
  • 0



Tôi là con kiến bò trên sa mạc kiến thức bao la. Biển học thật rộng lớn







#57 thanhduan2407

thanhduan2407

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 995 Bài viết
Điểm đánh giá: 223 (khá)

Đã gửi 03 August 2010 - 10:36 AM

Hàm vl-string-trim có chức năng tương tự như hàm trim(str) của bạn nhưng hay hơn là không những có thể loại bỏ khoảng trắng ở 2 đầu mà có thể loại bỏ các các kí tự không phải là khoảng trắng ở 2 đầu
Cú pháp : (vl-string-trim char-set str)

Ví dụ 1 :

(vl-string-trim " " "   CAD VIET  ")
-> Return : CAD VIET

Ví dụ 2 :
(vl-string-trim "-" "-----CAD VIET------")
-> Return : CAD VIET

Cảm ơn anh Tue_NV rất nhiều
Không chỉ có Autolisp tuyệt diệu mà diễn dàn cũng thật tuyệt diệu
Cảm ơn tất cả những ai đã tham gia http://www.cadviet.com
  • 0



Tôi là con kiến bò trên sa mạc kiến thức bao la. Biển học thật rộng lớn







#58 khaosat2009

khaosat2009

    biết lệnh offset

  • Members
  • PipPipPip
  • 171 Bài viết
Điểm đánh giá: 10 (tàm tạm)

Đã gửi 20 September 2010 - 02:32 PM

Lisp có trục trặc:
Nếu hàng nào có đủ 5 cột thì nó hiểu cột thứ 5 là "độ cao" còn cột thứ tư bị lờ đi
Trong trắc địa trục X là trục bắc, Y là trục đông, khác với trục toạ độ Đề các trong toán học, do vậy lisp đã thể hiện vị trí points sai.
Các point được bắn vào cad là 2D , nên gán Z cho nó để còn sử dụng vào việc tạo bình đồ. Nếu ai không cần chế độ 3D point thì chỉ cần sử dụng lệnh là phẳng là xong
Bác xem lại các vấn đề trên.

Đúng là Lissp trên có trục trặc, mong được các anh giúp đỡ.
  • 0

#59 khaosat2009

khaosat2009

    biết lệnh offset

  • Members
  • PipPipPip
  • 171 Bài viết
Điểm đánh giá: 10 (tàm tạm)

Đã gửi 09 October 2010 - 11:41 AM

Cái này mình mạn phép chỉnh bản quyền của tác giả 1 ty để làm theo yêu cầu của bạn
Có gì pm nhé

;; free lisp from cadviet.com
(defun c:RFT (/ code data f h line pt pxy spc txt stt ten)
;Read File Txt
;| By : Gia Bach, gia_bach @ www.CadViet.com |;
(vl-load-com)
(defun Split (str / i kitu line lst txtPhanbiet)
(setq i 1
txtPhanbiet
(strcat (chr 9) (chr 32) (chr 44))
)
(while (< i (strlen str))
(setq kitu (substr str i 1))
(if (vl-string-search kitu txtPhanbiet)
(progn
(if (null Lst)
(setq Lst (list (substr Str 1 (- i 1))))
(setq Lst (append Lst (list (read (substr Str 1 (- i 1))))))
)
(setq Str (substr Str (+ i 1))
i 1
)
)
(setq i (1+ i))
)
)
(setq Lst (append Lst (list Str)))
)
(or *h* (setq *h* 2))
(initget 6)
(setq h (getdist (strcat "\nNhap chieu cao Text <" (rtos *h*) "> :")
)
)
(if h
(setq *h* h)
(setq h *h*)
)
(if (setq ten (getfiled "Chon File txt" (getvar "dwgprefix") "txt" 8))
(progn
(or (tblsearch "layer" "Point")
(command "-layer" "n" "Point" "")
)
(or (tblsearch "layer" "Sothutu")
(command "-layer" "n" "Sothutu" "c" 3 "Sothutu" "")
)
(or (tblsearch "layer" "Caodo")
(command "-layer" "n" "Caodo" "c" 4 "Caodo" "")
)
(or (tblsearch "layer" "Code")
(command "-layer" "n" "Code" "c" 2 "Code" "")
)
(setq spc (vla-get-ModelSpace
(vla-get-ActiveDocument (vlax-get-Acad-Object))
)
)
(setq f (open (findfile ten) "r"))
(while (setq Line (read-line f))
(if (wcmatch
Line
(strcat "*" (chr 9) "*,*" (chr 32) "*,*`" (chr 44) "*")
)
(progn
(setq data (split Line)
code (last data)
)
(if (and
(= (vl-list-length data) 5)
(setq pt (vl-remove code (cdr data)))
(not (vl-catch-all-error-p
(vl-catch-all-apply 'vlax-3d-point pt)
)
)
)
;;;neu du lieu data co 5 bien so
(progn
(setq stt (car data)
pXY (list (car pt) (cadr pt))
)
(vla-put-Layer
(vla-addpoint spc (vlax-3d-point pXY))
"Point"
)
(vla-put-Layer
(setq txt (vla-addtext
spc
stt
(vlax-3d-point (list 0 0 0))
h
)
)
"Sothutu"
)
(vla-put-Alignment txt 8)
(vla-put-TextAlignmentPoint txt (vlax-3d-point pXY))
(vla-put-Layer
(setq txt (vla-addtext
spc
code
(vlax-3d-point (list 0 0 0))
h
)
)
"Code"
)
(vla-put-Alignment txt 6)
(vla-put-TextAlignmentPoint
txt
(vlax-3d-point (polar pXY 0 (* 0.2 h)))
)
(vla-put-Layer
(vla-addtext spc (caddr pt) (vlax-3d-point pXY) h)
"Caodo"
)
)
;;het progn list data=5
;;;neu du lieu data co 4 bien so (ban co the dung ham COND hoac if de bay loi
(progn
(setq pt (vl-remove code (cdr data)))
(not (vl-catch-all-error-p
(vl-catch-all-apply 'vlax-3d-point pt)
)
)
(setq stt (car data)
pXY (list (car pt) (cadr pt))
)
(vla-put-Layer
(vla-addpoint spc (vlax-3d-point pXY))
"Point"
)
(vla-put-Layer
(setq txt (vla-addtext
spc
stt
(vlax-3d-point (list 0 0 0))
h
)
)
"Sothutu"
)
(vla-put-Alignment txt 8)
(vla-put-TextAlignmentPoint txt (vlax-3d-point pXY))
(vla-put-Layer
(vla-addtext spc (last data) (vlax-3d-point pXY) h)
"Caodo"
)
)
;;;het progn list=4
)
)
)
)
)
)
(princ)
)

Nhờ Bạn giúp mình chỉnh cách thể hiện lại trên Cad theo hệ trắc địa, X của mình hiện nay sang Y, và Y của mình hiện nay sang X.
Rất mong được sự giúp đở của Bạn
  • 0

#60 KS.PhanThanhTu

KS.PhanThanhTu

    biết vẽ point

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

Đã gửi 09 October 2010 - 05:53 PM

Mình đã làm xong cho bạn rồi, phần chuyển dữ liệu từ txt sang cad , rất nhanh, miễn tab hay cách đều ok ( bao nhiêu cũng đc)

tạo đầy đủ layer cho bạn, text hiển thị lấy theo text style hiện thời

file gốc bạn để tại C:\goc.txt (dữ liệu như bạn đã nói)

Các modul sau bạn cứ nói cụ thể mình sẽ làm tiếp

Lệnh là FC (fun cad =))), đã chỉnh x là trục bắc , y là trục nam cho bạn
:cheers:

Tải tệp lisp và video hướng dẫn tại :
http://www.fileserve.com/file/Z4H6eF7

Đây là kết quả:
Hình đã gửi
  • 0
KS Phan Thanh Tú.Email: Vansulich@yahoo.com