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

Bảng toạ độ các đỉnh thửa đất

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

em có một đôi tượng vùng, trong có có rất nhiều các đỉnh khác nhau trong file autocad. Em muốn thể hiện tất cả các đỉnh tọa độ x,y đó như một bản chú thích cho đối bằng bảng exel và insert bảng exel đó vào cad thì em phải sử dụng những lệnh nào? hay các tiện ích lisp khác? (tất cả các vấn đề đó em đều muốn làm trên autocad. hiện tại em dang dùng autocad2004)

 

Cảm ơn các anh.

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
em có một đôi tượng vùng, trong có có rất nhiều các đỉnh khác nhau trong file autocad. Em muốn thể hiện tất cả các đỉnh tọa độ x,y đó như một bản chú thích cho đối bằng bảng exel và insert bảng exel đó vào cad thì em phải sử dụng những lệnh nào? hay các tiện ích lisp khác? (tất cả các vấn đề đó em đều muốn làm trên autocad. hiện tại em dang dùng autocad2004)

 

Cảm ơn các anh.

"Đối tượng vùng" là Region? Nếu đúng thì bạn nên rút kinh nghiệm, không nên dùng tiếng Việt trong các trường hợp này. Dùng thuật ngữ của chính AutoCAD thì ai cũng hiểu.

Đoạn đánh dấu đỏ tiếp theo thì... hiểu chết liền!

Chỉ có thể trả lời chung chung là AutoCAD không có lệnh để làm những việc tương tự như vậy. Nếu muốn phải dùng chương trình, nhưng trước hết, bạn phải diễn đạt lại ý mình một cách đầy đủ, cụ thể và chính xác! Về việc này, bản thân ssg cũng như anh Hoành đã nhắc nhiều lần rồi: Tôi có những cái này -> Yêu cầu chương trình làm những việc này -> Kết quả cuối cùng tôi muốn là thế này

Và tốt nhất là bạn post lên ví dụ minh họa bằng *.dwg và *.xls

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
"Đối tượng vùng" là Region? Nếu đúng thì bạn nên rút kinh nghiệm, không nên dùng tiếng Việt trong các trường hợp này. Dùng thuật ngữ của chính AutoCAD thì ai cũng hiểu.

Đoạn đánh dấu đỏ tiếp theo thì... hiểu chết liền!

Chỉ có thể trả lời chung chung là AutoCAD không có lệnh để làm những việc tương tự như vậy. Nếu muốn phải dùng chương trình, nhưng trước hết, bạn phải diễn đạt lại ý mình một cách đầy đủ, cụ thể và chính xác! Về việc này, bản thân ssg cũng như anh Hoành đã nhắc nhiều lần rồi: Tôi có những cái này -> Yêu cầu chương trình làm những việc này -> Kết quả cuối cùng tôi muốn là thế này

Và tốt nhất là bạn post lên ví dụ minh họa bằng *.dwg và *.xls

em minh hoa theo hình upload nhé. Anh nào biết giúp em sớm với 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
em minh hoa theo hình upload nhé. Anh nào biết giúp em sớm với nhé

"Đối tượng vùng" - theo cách nói của bạn thanhgam2003 chính là polygon, nếu nghiên cứu về GIS thì trong GIS dùng từ "Polygon" = "Đối tượng vùng" - trong cad vẫn có sử dụng từ này, cụ thể là Autodesk Map, vì đây là từ chuyên môn về GIS.Nó cũng gần như tương tự Region trong Autocad.

Muốn thực hiện yêu cầu của bạn thì phải viết thêm code, chứ bản thân cad không có sẵn công cụ làm việc đó. Không biết bạn có biết về VBA trong CAD không ? nếu biết chút ít thì tôi có thể giúp bạn.còn lisp thì pó tay vì tui không biết. Yêu cầu của bạn giống như trích hồ sơ kỹ thuật thửa đất dùng trong địa chính vậy... :bigsmile:

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
"Đối tượng vùng" - theo cách nói của bạn thanhgam2003 chính là polygon, nếu nghiên cứu về GIS thì trong GIS dùng từ "Polygon" = "Đối tượng vùng" - trong cad vẫn có sử dụng từ này, cụ thể là Autodesk Map, vì đây là từ chuyên môn về GIS.Nó cũng gần như tương tự Region trong Autocad.

Muốn thực hiện yêu cầu của bạn thì phải viết thêm code, chứ bản thân cad không có sẵn công cụ làm việc đó. Không biết bạn có biết về VBA trong CAD không ? nếu biết chút ít thì tôi có thể giúp bạn.còn lisp thì pó tay vì tui không biết. Yêu cầu của bạn giống như trích hồ sơ kỹ thuật thửa đất dùng trong địa chính vậy... :)

EM CẢM ƠN ANH. HIX, NHƯNG EM LÀ DÂN BẢN ĐỒ_ DÂN XÃ HỘI CHỨ KHÔNG PHẢI KỸ THUẬT, NÊN VBA EM KHÔNG BIẾT. HUHUHU...CHẮC EM LẠI PHẢI NGỒI GÕ TAY TỪNG HỒ SƠ RỒI.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
EM CẢM ƠN ANH. HIX, NHƯNG EM LÀ DÂN BẢN ĐỒ_ DÂN XÃ HỘI CHỨ KHÔNG PHẢI KỸ THUẬT, NÊN VBA EM KHÔNG BIẾT. HUHUHU...CHẮC EM LẠI PHẢI NGỒI GÕ TAY TỪNG HỒ SƠ RỒI.

 

Đừng khóc, hãy làm theo hướng dẫn của bác Ssg, bạn sẽ có cơ hội được giúp đỡ.

Hãy hành động để thể hiện là bạn rất cần trước khi bó gối.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
EM CẢM ƠN ANH. HIX, NHƯNG EM LÀ DÂN BẢN ĐỒ_ DÂN XÃ HỘI CHỨ KHÔNG PHẢI KỸ THUẬT, NÊN VBA EM KHÔNG BIẾT. HUHUHU...CHẮC EM LẠI PHẢI NGỒI GÕ TAY TỪNG HỒ SƠ RỒI.

Tôi thấy bạn này không nhiệt tình với bản thân gì cả:

Hình bạn upload đâu ?

Sao bạn không trả lời đối tượng của bạn là LWPOLYLINE hay REGION ?

 

*Nếu là LWPOLYLINE thì làm thủ công như sau:

Gỏ LIST ~~> chọn đối tượng,

Bấm F2 sẻ xuất hiện bảng liệt kê tọa độ các đỉnh. Bôi đen (xanh) phần liệt kê tọa độ

 

Đây là ví dụ

at point X=4531.0256 Y= -94.1555 Z= 0.0000

at point X=4503.4365 Y=-108.7042 Z= 0.0000

at point X=4538.6893 Y=-128.6130 Z= 0.0000

at point X=4561.6802 Y=-115.5957 Z= 0.0000

Vào EDIT ~~> Paste Special chọn kiểu text

Cad sẻ dán danh sách này vào cho bạn, bạn chỉnh sửa lại ~~> xong

*Nếu yêu cầu của bạn rỏ ràng tự nhiên sẽ có người giúp bạn con lisp làm việc ngon hơ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

Dân bản đồ mà seo hổng tìm hiểu tí xíu về lập trình nhỉ?mai mốt sẽ rất cần để giải quyết nhu cầu chứ...thui có gì tui sẽ viết cho bạn 1 cái module dùng luô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
Dân bản đồ mà seo hổng tìm hiểu tí xíu về lập trình nhỉ?mai mốt sẽ rất cần để giải quyết nhu cầu chứ...thui có gì tui sẽ viết cho bạn 1 cái module dùng luôn.... :)

em cảm ơn các anh!

Em nói rõ yêu cầu của minh nhé:

+ Đối tượng em cân thể hiện là regoin

+ Em gui kem theo đường link file upload. Huynh nào giúp được thì giúp em sớm nhé.

 

http://www.cadviet.com/upfiles/guicad_1.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
Tôi thấy bạn này không nhiệt tình với bản thân gì cả:

Hình bạn upload đâu ?

Sao bạn không trả lời đối tượng của bạn là LWPOLYLINE hay REGION ?

 

*Nếu là LWPOLYLINE thì làm thủ công như sau:

Gỏ LIST ~~> chọn đối tượng,

Bấm F2 sẻ xuất hiện bảng liệt kê tọa độ các đỉnh. Bôi đen (xanh) phần liệt kê tọa độ

 

Đây là ví dụ

at point X=4531.0256 Y= -94.1555 Z= 0.0000

at point X=4503.4365 Y=-108.7042 Z= 0.0000

at point X=4538.6893 Y=-128.6130 Z= 0.0000

at point X=4561.6802 Y=-115.5957 Z= 0.0000

Vào EDIT ~~> Paste Special chọn kiểu text

Cad sẻ dán danh sách này vào cho bạn, bạn chỉnh sửa lại ~~> xong

*Nếu yêu cầu của bạn rỏ ràng tự nhiên sẽ có người giúp bạn con lisp làm việc ngon hơn :)

 

Chức năng này em cũng đã từng làm rùi. Nó chỉ liệt kê bảng tọa độ ra thôi. Mà HS của em cân thể hiện như file em upload đó. Hix, bớt chút thời gian giúp em với.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Chức năng này em cũng đã từng làm rùi. Nó chỉ liệt kê bảng tọa độ ra thôi. Mà HS của em cân thể hiện như file em upload đó. Hix, bớt chút thời gian giúp em với.

Thấy bạn than quá mà tui chưa có thời gian ngồi viết riêng cho bạn như đã hứa nên chỉ có thể cắt 1 phần của cái project tui đang làm cho bạn dùng.

-Bạn vào CAD load file này lên sau đó chạy macro coordinate.

-Click điểm.

-Nhấn export để xuất sang excel.

-Sau đó bạn chỉ cần bảng toạ độ từ excel vào cad là xong.

Here it is : http://www.yourfilehost.com/media.php?cat=...xport_se7en.dvb

 

good luck

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
Thấy bạn than quá mà tui chưa có thời gian ngồi viết riêng cho bạn như đã hứa nên chỉ có thể cắt 1 phần của cái project tui đang làm cho bạn dùng.

-Bạn vào CAD load file này lên sau đó chạy macro coordinate.

-Click điểm.

-Nhấn export để xuất sang excel.

-Sau đó bạn chỉ cần bảng toạ độ từ excel vào cad là xong.

Here it is : http://www.yourfilehost.com/media.php?cat=...xport_se7en.dvb

 

good luck

em load file nó báo lỗi rồi anh ơi!

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

*Cái này không giống với yêu cầu của bạn lắm nhưng tôi có sẳn nên nêu ra bạn xem thấyđược thì tôi gửi cho (sáng giờ upfile hoài mà rớt hoài :) ):

Trước tiên bạn phải tự đánh tên các điểm cần liệt kê tọa độ và phải chọn các điểm cần liệt kê tọa độ bằng cách click vào nó (không cần theo đúng thứ tự)

Lệnh : LKD

-Lệnh sẻ hỏi: Ban co muon chon diem toa do gia dinh khong: Co/Khong:

+Nếu không chọn tọa độ giả định thì gỏ K (tọa độ x,y sẻ đúng như tạo độ mà bạn dùng lệnh ID để xem)

+Nếu chọn tọa độ giả định thì gỏ C lệnh sẻ hỏi bạn chọn tọa độ giả định và hỏi bạn x,y của điểm vừa chọn (lệnh sẻ căn cứ vào điểm này làm chuẩn để tính các tọa độ bạn cần)

-Lệnh lại hỏi: Ti le /<Chon diem muon liet ke toa do>:

+Nếu thay đổi tỉ lệ thì gỏ T lệnh sẻ hỏi : Mot met ban ve la bao nhieu <Nhap vao>: bạn nhập vào

+Chọn các điểm cần liệt kê lệnh hỏi bạn số thứ tự của nút bạn nhập bằng số nhé không được lẩn chử vào. Lệnh se chèn BLOCK hình chử thập vào vị trí này để bạn biết nút này đã được chon.

+Bảng liệt kê sẻ viết ra tại vị trí 0.0 cứ 10 hàng thì sẻ nhảy sang bảng mới

Xong bạn chỉ cần MOVE bảng này về vị trí bạn thích là xong

Theo tôi cái này giải quyết vấn đề của bạn tốt hơn là tự động.

Bạn nhớ load cả 2 file lisp và tạo đường dẩn đến 2 block trong này nhé (nếu không thì không chạy được đâu)

**Còn có lệnh XTD chọn điểm cần liệt kê và chỉ điểm viết kết quả lệnh xẽ ghi kết qua ra tại nơi bạn chỉ

Mong rằng cái này giúp bạn đở vất vả hơn trong công việc

  • 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ái này không giống với yêu cầu của bạn lắm nhưng tôi có sẳn nên nêu ra bạn xem thấyđược thì tôi gửi cho (sáng giờ upfile hoài mà rớt hoài :) ):

Trước tiên bạn phải tự đánh tên các điểm cần liệt kê tọa độ và phải chọn các điểm cần liệt kê tọa độ bằng cách click vào nó (không cần theo đúng thứ tự)

Lệnh : LKD

-Lệnh sẻ hỏi: Ban co muon chon diem toa do gia dinh khong: Co/Khong:

+Nếu không chọn tọa độ giả định thì gỏ K (tọa độ x,y sẻ đúng như tạo độ mà bạn dùng lệnh ID để xem)

+Nếu chọn tọa độ giả định thì gỏ C lệnh sẻ hỏi bạn chọn tọa độ giả định và hỏi bạn x,y của điểm vừa chọn (lệnh sẻ căn cứ vào điểm này làm chuẩn để tính các tọa độ bạn cần)

-Lệnh lại hỏi: Ti le /<Chon diem muon liet ke toa do>:

+Nếu thay đổi tỉ lệ thì gỏ T lệnh sẻ hỏi : Mot met ban ve la bao nhieu <Nhap vao>: bạn nhập vào

+Chọn các điểm cần liệt kê lệnh hỏi bạn số thứ tự của nút bạn nhập bằng số nhé không được lẩn chử vào. Lệnh se chèn BLOCK hình chử thập vào vị trí này để bạn biết nút này đã được chon.

+Bảng liệt kê sẻ viết ra tại vị trí 0.0 cứ 10 hàng thì sẻ nhảy sang bảng mới

Xong bạn chỉ cần MOVE bảng này về vị trí bạn thích là xong

Theo tôi cái này giải quyết vấn đề của bạn tốt hơn là tự động.

Bạn nhớ load cả 2 file lisp và tạo đường dẩn đến 2 block trong này nhé (nếu không thì không chạy được đâu)

**Còn có lệnh XTD chọn điểm cần liệt kê và chỉ điểm viết kết quả lệnh xẽ ghi kết qua ra tại nơi bạn chỉ

Mong rằng cái này giúp bạn đở vất vả hơn trong công việc

]

 

nếu được anh gửi để em chạy với nhé.

Cảm ơn anh nhiều.

Chúc một ngày tốt là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
]

 

nếu được anh gửi để em chạy với nhé.

Cảm ơn anh nhiều.

Chúc một ngày tốt lành.

 

Gửi trước bạn file lisp này khi nào up được sẻ gửi 2 block cho bạn sau

-Bạn vẻ 1 hình chử thập (kích thước phù hợp với bản vẻ của bạn)và tạo nó thành block tên NHAP và 1 cái tên tdbdiem tạm thời thế d0ể nó chạy sau đó tính sau

 

 









(Defun c:xtd ( )
(princ "\nPHAM QUOC DUY Binh Son - Quang ngai")
 (command "-style" "thep" "VNI-HELVE" "0" "1" "0" "n" "n")
 (if (null met)(setq met 1))
 (Setq temp T)
(While temp
(setq b (strcat "\nTi le /<Chon diem muon liet ke toa do>: "))  
(Initget "t T")
(setq str (getpoint :))
(Cond
 ((= str "t") (setq met (dnint "\nMot met ban ve la bao nhieu "momet)))
 ((= str "T") (setq met (dnint "\nMot met ban ve la bao nhieu "momet)))
  (Progn
 (Setq b str)
 (setq  momet met)
  (setq temp nil)
 )
)
)
(luuos)
 (setvar "osmode" 0)
 (setq x (/ (car :) met))
 (setq y (/ (cadr :) met))
 (command "ORTHO" "OFF" "")
 (setq a (getpoint b"\nChon diem muon viet ket qua: "))
(setq giatri (- (car B) (car a)))
(Cond
 ((< giatri 0) (command "LINE"(list (car B)(cadr B))(list (car a)(cadr a))(list (+ (car a) 30)(cadr a)) "")
 (command "TEXT" (list (car a)(+ (cadr a) 2)) 4 0 (rtos x 2 4))
 (command "TEXT" (list (car a)(- (cadr a) 6)) 4 0 (rtos y 2 4))
)
 ((> giatri 0) (command "LINE"(list (car B)(cadr B))(list (car a)(cadr a))(list (- (car a) 30)(cadr a)) "")
 (command "TEXT" "j" "r" (list (car a)(+ (cadr a) 2)) 4 0 (rtos x 2 4))
 (command "TEXT" "j" "r" (list (car a)(- (cadr a) 6)) 4 0 (rtos y 2 4))
)
)
 (traos)

     (Prin I)
)


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

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

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

(Defun C:lkd ( )
   (setq lc (strcase (getstring "\nBan co muon chon diem toa do gia dinh khong:  Co/Khong:     ")))

  (if (= lc "C") 
        (progn
 (setq a (getpoint "\nChon diem gia dinh: "))
 (setq ax (dnint "\nToa do X gia dinh "ax1))
 (setq  ax1 ax)
 (setq ay (dnint "\nToa do Y gia dinh "ay1))
 (setq  ay1 ay)

(princ "\nPHAM QUOC DUY Binh Son - Quang ngai")
 (command "-style" "thep" "VNI-HELVE" "0" "1" "0" "n" "n")
 (if (null met)(setq met 1))
 (Setq temp T)
(While temp
(setq b (strcat "\nTi le /<Chon diem muon liet ke toa do>: "))  
(Initget "t T")
(setq str (getpoint B))
(Cond
 ((= str "t") (setq met (dnint "\nMot met ban ve la bao nhieu "momet)))
 ((= str "T") (setq met (dnint "\nMot met ban ve la bao nhieu "momet)))
  (Progn
 (Setq b str)
 (setq  momet met)
  (setq temp nil)
 )
)
)
(luuos)
 (setvar "osmode" 0)
 (setq x (/ (car B) met))
 (setq y (/ (cadr B) met))

 (setq xg (/ (car a) met))
 (setq yg (/ (cadr a) met))
 (setq kx (- x xg))
 (setq ky (- y yg))
 (setq xm (+ kx ax))
 (setq ym (+ ky ay))


 (command "INSERT" "nhap" (list (car B)(cadr B)) 1 1 0)
 (setq xht (getreal "\nSo thu tu cua nut : "))
 (setq xh (- xht 1))
 (setq nx (* 8 xh))
 (setq sb (/ xh 10))
 (setq sbn (* 100 (fix sb)))
 (setq snl (- xh (fix sb)))
 (setq nl (- nx (* 80 (fix sb))))

(setq CHIAM (/ XHT 10))
(setq LAMCHAN (fix CHIAM))
(setq NHANM (* LAMCHAN 10))
(setq tenkc (- XHT NHANM))
(setq tenkcn (* TENKC 100))
(setq TENKCM (fix TENKCN))

(Cond
 ((= TENKCM 100)  (command "INSERT" "tdbdiem" (list (- sbn 14) (- 6 nl)) 1 1 0)
)
 ((/= TENKCM 100) 
)
)

 (command "TEXT" (list (+ 0 sbn) (- 0 nl)) 4 0 (rtos xm 2 4))
 (command "TEXT" (list (+ 42 sbn) (- 0 nl)) 4 0 (rtos ym 2 4))
 (command "TEXT" (list (- sbn 10) (- 0 nl)) 4 0 (fix xht))
 (command "LINE" (list (- sbn 14) (- (- 6 nl)  8))(list (+ sbn 80) (- (- 6 nl)  8)) "")
 (command "LINE" (list (- sbn 14) (- 6 nl))(list (- sbn 14)(- (- 6 nl)  8)) "")
 (command "LINE" (list (+ (- sbn 14) 12) (- 6 nl))(list (+ (- sbn 14) 12)(- (- 6 nl)  8)) "")
 (command "LINE" (list (+ (- sbn 14) 53) (- 6 nl))(list (+ (- sbn 14) 53)(- (- 6 nl)  8)) "")
 (command "LINE" (list (+ (- sbn 14) 94) (- 6 nl))(list (+ (- sbn 14) 94)(- (- 6 nl)  8)) "")
 (traos)


(setvar "MODEMACRO" "**CHUC BAN LAM VIEC HIEU QUA** PHAM QUOC DUY - BINH SON - QUANG NGAI")
  (while
(setq b (getpoint "\nChon diem muon xem toa do <Hoac nhan Enter de ket thuc>: "))

 (setq x (/ (car B) met))
 (setq y (/ (cadr B) met))
 (setq xg (/ (car a) met))
 (setq yg (/ (cadr a) met))
 (setq kx (- x xg))
 (setq ky (- y yg))
 (setq xm (+ kx ax))
 (setq ym (+ ky ay))

 (luuos)
(setvar "MODEMACRO" "LIET KE TOA DO TAI DIEM 0-0")
 (setvar "osmode" 0)
 (command "INSERT" "nhap" (list (car B)(cadr B)) 1 1 0)
 (setq xht (getreal "\nSo thu tu cua nut : "))
 (setq xh (- xht 1))
 (setq nx (* 8 xh))
 (setq sb (/ xh 10))
 (setq sbn (* 100 (fix sb)))
 (setq snl (- xh (fix sb)))
 (setq nl (- nx (* 80 (fix sb))))

(setq CHIAM (/ XHT 10))
(setq LAMCHAN (fix CHIAM))
(setq NHANM (* LAMCHAN 10))
(setq tenkc (- XHT NHANM))
(setq tenkcn (* TENKC 100))
(setq TENKCM (fix TENKCN))

(Cond
 ((= TENKCM 100)  (command "INSERT" "tdbdiem" (list (- sbn 14) (- 6 nl)) 1 1 0)
)
 ((/= TENKCM 100) 
)
)

 (command "TEXT" (list (+ 0 sbn) (- 0 nl)) 4 0 (rtos xm 2 4))
 (command "TEXT" (list (+ 42 sbn) (- 0 nl)) 4 0 (rtos ym 2 4))
 (command "TEXT" (list (- sbn 10) (- 0 nl)) 4 0 (fix xht))
 (command "LINE" (list (- sbn 14) (- (- 6 nl)  8))(list (+ sbn 80) (- (- 6 nl)  8)) "")
 (command "LINE" (list (- sbn 14) (- 6 nl))(list (- sbn 14)(- (- 6 nl)  8)) "")
 (command "LINE" (list (+ (- sbn 14) 12) (- 6 nl))(list (+ (- sbn 14) 12)(- (- 6 nl)  8)) "")
 (command "LINE" (list (+ (- sbn 14) 53) (- 6 nl))(list (+ (- sbn 14) 53)(- (- 6 nl)  8)) "")
 (command "LINE" (list (+ (- sbn 14) 94) (- 6 nl))(list (+ (- sbn 14) 94)(- (- 6 nl)  8)) "")
  (traos)


)


)
)


  (if (= lc "K") 
        (progn
(princ "\nPHAM QUOC DUY Binh Son - Quang ngai")
 (command "-style" "thep" "VNI-HELVE" "0" "1" "0" "n" "n")
 (if (null met)(setq met 1))
 (Setq temp T)
(While temp
(setq b (strcat "\nTi le /<Chon diem muon liet ke toa do>: "))  
(Initget "t T")
(setq str (getpoint B))
(Cond
 ((= str "t") (setq met (dnint "\nMot met ban ve la bao nhieu "momet)))
 ((= str "T") (setq met (dnint "\nMot met ban ve la bao nhieu "momet)))
  (Progn
 (Setq b str)
 (setq  momet met)
  (setq temp nil)
 )
)
)
(luuos)
 (setvar "osmode" 0)
 (setq x (/ (car B) met))
 (setq y (/ (cadr B) met))
 (command "INSERT" "nhap" (list (car B)(cadr B)) 1 1 0)
 (setq xht (getreal "\nSo thu tu cua nut : "))
 (setq xh (- xht 1))
 (setq nx (* 8 xh))
 (setq sb (/ xh 10))
 (setq sbn (* 100 (fix sb)))
 (setq snl (- xh (fix sb)))
 (setq nl (- nx (* 80 (fix sb))))

(setq CHIAM (/ XHT 10))
(setq LAMCHAN (fix CHIAM))
(setq NHANM (* LAMCHAN 10))
(setq tenkc (- XHT NHANM))
(setq tenkcn (* TENKC 100))
(setq TENKCM (fix TENKCN))

(Cond
 ((= TENKCM 100)  (command "INSERT" "tdbdiem" (list (- sbn 14) (- 6 nl)) 1 1 0)
)
 ((/= TENKCM 100) 
)
)

 (command "TEXT" (list (+ 0 sbn) (- 0 nl)) 4 0 (rtos x 2 4))
 (command "TEXT" (list (+ 42 sbn) (- 0 nl)) 4 0 (rtos y 2 4))
 (command "TEXT" (list (- sbn 10) (- 0 nl)) 4 0 (fix xht))
  (command "LINE" (list (- sbn 14) (- (- 6 nl)  8))(list (+ sbn 80) (- (- 6 nl)  8)) "")
  (command "LINE" (list (- sbn 14) (- 6 nl))(list (- sbn 14)(- (- 6 nl)  8)) "")
  (command "LINE" (list (+ (- sbn 14) 12) (- 6 nl))(list (+ (- sbn 14) 12)(- (- 6 nl)  8)) "")
  (command "LINE" (list (+ (- sbn 14) 53) (- 6 nl))(list (+ (- sbn 14) 53)(- (- 6 nl)  8)) "")
  (command "LINE" (list (+ (- sbn 14) 94) (- 6 nl))(list (+ (- sbn 14) 94)(- (- 6 nl)  8)) "")
 (traos)


(setvar "MODEMACRO" "**CHUC BAN LAM VIEC HIEU QUA** PHAM QUOC DUY - BINH SON - QUANG NGAI")
  (while
(setq b (getpoint "\nChon diem muon xem toa do <Hoac nhan Enter de ket thuc>: "))
 (setq x (/ (car B) met))
 (setq y (/ (cadr B) met))
 (luuos)
(setvar "MODEMACRO" "LIET KE TOA DO TAI DIEM 0-0")
 (setvar "osmode" 0)
 (command "INSERT" "nhap" (list (car B)(cadr B)) 1 1 0)
 (setq xht (getreal "\nSo thu tu cua nut : "))
 (setq xh (- xht 1))
 (setq nx (* 8 xh))
 (setq sb (/ xh 10))
 (setq sbn (* 100 (fix sb)))
 (setq snl (- xh (fix sb)))
 (setq nl (- nx (* 80 (fix sb))))

(setq CHIAM (/ XHT 10))
(setq LAMCHAN (fix CHIAM))
(setq NHANM (* LAMCHAN 10))
(setq tenkc (- XHT NHANM))
(setq tenkcn (* TENKC 100))
(setq TENKCM (fix TENKCN))

(Cond
 ((= TENKCM 100)  (command "INSERT" "tdbdiem" (list (- sbn 14) (- 6 nl)) 1 1 0)
)
 ((/= TENKCM 100) 
)
)

 (command "TEXT" (list (+ 0 sbn) (- 0 nl)) 4 0 (rtos x 2 4))
 (command "TEXT" (list (+ 42 sbn) (- 0 nl)) 4 0 (rtos y 2 4))
 (command "TEXT" (list (- sbn 10) (- 0 nl)) 4 0 (fix xht))
 (command "LINE" (list (- sbn 14) (- (- 6 nl)  8))(list (+ sbn 80) (- (- 6 nl)  8)) "")
 (command "LINE" (list (- sbn 14) (- 6 nl))(list (- sbn 14)(- (- 6 nl)  8)) "")
 (command "LINE" (list (+ (- sbn 14) 12) (- 6 nl))(list (+ (- sbn 14) 12)(- (- 6 nl)  8)) "")
 (command "LINE" (list (+ (- sbn 14) 53) (- 6 nl))(list (+ (- sbn 14) 53)(- (- 6 nl)  8)) "")
 (command "LINE" (list (+ (- sbn 14) 94) (- 6 nl))(list (+ (- sbn 14) 94)(- (- 6 nl)  8)) "")
  (traos)


)


)
)





(setvar "MODEMACRO" "**CHUC BAN LAM VIEC HIEU QUA** PHAM QUOC DUY - BINH SON - QUANG NGAI")
   (Princ)
)

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

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

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

;;------------------------------------------------------------
(defun DUY_newerror (msg)
 (if (and (/= msg "Function cancelled")
   (/= msg "quit / exit abort")
     )
   (princ (strcat "\n" msg))
 )
 (done)
)
;;----------
(defun init ()
 (setq
   DUY_CMD	   (getvar "CMDECHO")
   DUY_OLDERROR *error*
   *error*	   DUY_newerror

 )
 (setvar "CMDECHO" 0)
 (command ".undo" "BE")
)
;;----------
(defun done ()
 (command ".redraw")
 (command ".undo" "E")
 (if DUY_CMD
   (setvar "CMDECHO" DUY_CMD)
 )
 (if DUY_OLDERROR
   (setq *error* DUY_OLDERROR)
 )
 (princ)
)
;;----------
(defun luuos ()
 (setq
   DUY_OSMODE   (getvar "OSMODE")
   DUY_AUTOSNAP (getvar "AUTOSNAP")
  DUY_LAYERHH (getvar "CLAYER")
  DUY_THANGXEOHH (getvar "ORTHO")
  DUY_filletrad (getvar "FILLETRAD")
 DUY_TEXTSTYLE (getvar "TEXTSTYLE")
  )
)
(defun traos ()
 (if DUY_OSMODE
   (setvar "OSMODE" DUY_OSMODE)
 )
 (if DUY_LAYERHH
   (setvar "CLAYER" DUY_LAYERHH)
 )
 (if DUY_THANGXEOHH
   (setvar "ORTHO" DUY_THANGXEOHH)
 )
 (if DUY_AUTOSNAP
   (setvar "AUTOSNAP" DUY_AUTOSNAP)
 )
(if DUY_filletrad
   (setvar "FILLETRAD" DUY_filletrad)
 )
(if DUY_TEXTSTYLE
   (setvar "TEXTSTYLE" DUY_TEXTSTYLE)
 )


)




;-------


;---------------------------------------
(defun nstr (stri def)
(princ stri)
(princ "<")
(princ " ")
(princ def)
(princ ">")
(princ ":")
(princ " ")
);defun nstr
;--------------------
(defun nstr1 (stri)
(princ stri)
(princ "<")
(princ "Nhap vao")
(princ ">")
(princ ":")
(princ " ")
);defun nstr1
;---------------------
(defun nint (prompt def / temp)
(if def
 (setq temp (getint (nstr prompt def)))
 (setq def (getint (nstr1 prompt)))
);if def
(if temp
 (setq def temp)
 def
);if temp
);defun nint
;---------------------
(defun dnint (prompt def / temp)
(if def
 (setq temp (getreal (nstr prompt def)))
 (setq def (getreal (nstr1 prompt)))
);if def
(if temp
 (setq def temp)
 def
);if temp
);defun nint
;--------------------
(defun ndist (po prompt def / temp) ;nhan kh/cach va luu gia tri mac dinh
(if def
 (setq temp (getdist po (nstr prompt def)))
 (setq def (getdist po (nstr1 prompt)))
)if def
(if temp
   (setq def temp)
   def
);if temp
);defun ndist
;-----------------------------------




  • 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

Nhìn cái hình vẽ bác này pót lên là biết bác này vẽ hồ sơ thửa đất rồi. Làm như thế nếu bản vẽ có 1000 thửa hoặc hơn, mỗi thửa có N đỉnh thì ngồi pick chuột từng điểm một hết năm mất ah. Tôi thấy có bên Cty Hài Hoà có soft để làm cái hồ sơ đó trên CAD đấy. mà họ chắc chắn ko viết soft bằng Lisp đâu viết bằng C 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
Nhìn cái hình vẽ bác này pót lên là biết bác này vẽ hồ sơ thửa đất rồi. Làm như thế nếu bản vẽ có 1000 thửa hoặc hơn, mỗi thửa có N đỉnh thì ngồi pick chuột từng điểm một hết năm mất ah. Tôi thấy có bên Cty Hài Hoà có soft để làm cái hồ sơ đó trên CAD đấy. mà họ chắc chắn ko viết soft bằng Lisp đâu viết bằng C cơ.

Có vẻ như bạn là employee của Hài Hòa? Có bản demo nào share cho anh em dùng thử đi?

 

@thanhgam

Theo bản vẽ bạn post lên thì chẳng có liên quan gì đến Excel cả, chỉ cần đánh số thứ tự các đỉnh và kẻ bảng tọa độ trong CAD là OK? Nếu chỉ vậy thì bạn dùng thử trình này, lệnh là VC (Vertex Co-ordinate). Chương trình chấp nhận mọi đối tượng: region, polyline, line, arc (trừ loại spline), miễn là giữa chúng tạo nên 1 vùng kín. Lưu ý, khi pick điểm, bạn phải cho toàn bộ vùng cần quan tâm display đầy đủ trên màn hình, tương tự như khi bạn dùng lệnh Hatch vậy.

 

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

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;This program make ordinal numbers and co-ordinate table for vertexs.
;;;Accept any objects that are Region, Polyline, Line and Arc (except Spline)
;;;providing there is a closed area between them.
;;;Written by Ssg - December 2007 - www.cadviet.com
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

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


;;;PUBLIC FUNCTIONS
;;;-------------------------------------------------------------------------------
(Defun DTR(x) (/ (*  x pi) 180) ) ;;;change degree to radian, return REAL
;;;-------------------------------------------------------------------------------
(defun lineP (p0 a r / p1) ;;;Line polar: point, degree angle, radius
(setq p1 (polar p0 (dtr a) r))
(command "line" p0 p1 "")
)
;;;-------------------------------------------------------------------------------
(defun linePX (p0 x) (lineP p0 0 x)) ;;;Horizontal line: length x, from p0
;;;-------------------------------------------------------------------------------
(defun linePY (p0 y) (lineP p0 90 y)) ;;;Vertical line: length y, from p0
;;;-------------------------------------------------------------------------------
(defun getVert (e / i L) ;;;Return list of all vertex from pline e
(setq i 0 L nil)
(vl-load-com)
(repeat (fix (+ (vlax-curve-getEndParam e) 1))
   (setq L (append L (list (vlax-curve-getPointAtParam e i))))
   (setq i (1+ i))
)
L
)
;;;-------------------------------------------------------------------------------
(defun getth( / d h) ;;;Return current text height
(setq
   d (tblsearch "style" (getvar "textstyle"))
   h (cdr (assoc 40 d))
)
(if (= h 0) (setq h (cdr (assoc 42 d))))
h
)
;;;-------------------------------------------------------------------------------
(defun wtxtMC (txt p / sty d h) ;;;Write txt on graphic screen, Middle Center
(setq
   sty (getvar "textstyle")
   d (tblsearch "style" sty)
   h1 (cdr (assoc 40 d))
   h2 (cdr (assoc 42 d))
)
(if (> h1 0) (command "text" "j" "mc" p 0 txt)
   (command "text" "j" "mc" p h2 0 txt)
)
)
;;;-------------------------------------------------------------------------------


;;;PRIVATE FUNCTIONS
;;;-------------------------------------------------------------------------------
(defun txt1(txtL / p1 p2 p3 p4 pL i) ;;;Write texts in 1 row
(setq
   p1 (list (+ (car p0) (* 2 h)) (- (cadr p0) (* 1.5 h)))
   p2 (polar p1 0 (* 6 h))
   p3 (polar p2 0 (* 8 h))
   p4 (polar p3 0 (* 8 h))
   pL (list p1 p2 p3 p4)
   i 0
)
(repeat 4
   (wtxtMC (nth i txtL) (nth i pL))
   (setq i (1+ i))
)
)
;;;-------------------------------------------------------------------------------
(defun mesh1() ;;;Make 1 mesh unit
(linepy p0 (* -3 h))
(command "copy" "L" "" p0 (list (+ (car p0) (* 4 h)) (cadr p0)))
(command "array" "L" "" "r" 1 4 (* 8 h))
(linepx (polar p0 (* 1.5 pi) (* 3 h)) (* 28 h))
)
;;;-------------------------------------------------------------------------------


;;;MAIN PROGRAM
;;;-------------------------------------------------------------------------------
(defun C:VC( / p et p0 pvL h oldos i pv num txtL)
;;;Vertex Co-ordinate

;;;INPUT DATA
(setq p (getpoint "\nPick a point inside polygon or region:"))
(command "boundary" p "")
(setq et (entlast))
(redraw et 3)
(setq
   p0 (getpoint "\nBase point of table (upper left):")
   pvL (getvert et)
   h (getTh)
   oldos (getvar "osmode")
)
(setvar "osmode" 0)

;;;HEADER
(linepx p0 (* 28 h))
(mesh1)
(txt1 (list "TT" "X" "Y" "Z"))
(setq p0 (polar p0 (* 1.5 pi) (* 3 h)))

;;;MAKE RECORDS AND ORDINAL NUMBER
(setq i 0)
(repeat (1- (length pvL))
   (mesh1)
   (setq
       pv (nth i pvL)
       num (itoa (1+ i))
       txtL (list num (rtos (car pv)) (rtos (cadr pv)) (rtos (caddr pv)))
   )
   (txt1 txtL)
   (wtxtMC num (polar pv 0 h))
   (setq p0 (polar p0 (* 1.5 pi) (* 3 h)))
   (setq i (1+ i))
)

;;;FINISH
(command "erase" et "")
(setvar "osmode" oldos)
(princ)
)
;;;-------------------------------------------------------------------------------

 

Lẽ ra chương trình này xong từ mấy hôm trước và có tính năng hoàn chỉnh hơn kia. Nhưng chính vì yêu cầu của bạn không rõ ràng nên bị chậm và chỉ có vậy. Bạn dùng thử sẽ thấy rõ là yêu cầu bạn nêu còn rất nhiều bất cập. Bạn phải phân tích đầy đủ những bất cập đó và nêu yêu cầu bổ sung, mình sẽ hoàn thiện tiếp. Có điều là, mình sẽ không làm lại lần thứ 3 đâ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
Có vẻ như bạn là employee của Hài Hòa? Có bản demo nào share cho anh em dùng thử đi?

 

:)

1. oh No, không phải là employee của Hài Hoà đâu. Chỉ biết vì có lần thấy ông anh tôi chạy thử soft đó thôi. Hài Hoà có dùng khoá cứng nên có cài vào mà không có khoá cũng không chạy được...hic...

 

2. Đoạn Lisp của bác không hiểu sao khi chạy nó báo lỗi "error: no function definition: DTR"

 

3. Theo tôi cách bác ssg dùng cái hàm "BOUNDARY" để tạo 1 "vùng" là không tiện vì như thế ta phải pick nhiều lắm nếu có nhiều thửa. Việc tạo vùng đó để cho user tự làm khi họ vẽ (phải bắt buộc thôi). Thực ra nếu bạn gì đó mà làm cái hồ sơ thửa này thì nên cài bản AUTOCAD MAP chứ đừng cài AUTOCAD thông thường (có các phiên bản cho các ngành như ACAD MAP, ACAD MECHANIC, ACAD ARTCHITEC...) trong phiên bản ACADMAP có thêm một menu MAP gồm các lệnh chuyên cho làm bản đồ và việc tạo vùng tự động cho mấy cái thửa kia chỉ là tíc tắc. Khoai Tây đã làm sẵn rồi thì Khoai Lang cứ thế mà dùng thôi :)

 

Nên chăng ssg hãy chọn cách là khi chuơng trình chạy thì cho thông báo "Select close_region" chẳng hạn, như vậy thì user có thể chọn được nhiều Object và tránh được việc "BOUNDARY" bị lỗi khi pick vào trong region (thi thoảng tôi pick vào trong 1 vùng để tạo close_region thì hàm BOUNDARY nó báo lỗi mà không hiểu tại sao)

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
:)

1. oh No, không phải là employee của Hài Hoà đâu. Chỉ biết vì có lần thấy ông anh tôi chạy thử soft đó thôi. Hài Hoà có dùng khoá cứng nên có cài vào mà không có khoá cũng không chạy được...hic...

 

2. Đoạn Lisp của bác không hiểu sao khi chạy nó báo lỗi "error: no function definition: DTR"

 

3. Theo tôi cách bác ssg dùng cái hàm "BOUNDARY" để tạo 1 "vùng" là không tiện vì như thế ta phải pick nhiều lắm nếu có nhiều thửa. Việc tạo vùng đó để cho user tự làm khi họ vẽ (phải bắt buộc thôi). Thực ra nếu bạn gì đó mà làm cái hồ sơ thửa này thì nên cài bản AUTOCAD MAP chứ đừng cài AUTOCAD thông thường (có các phiên bản cho các ngành như ACAD MAP, ACAD MECHANIC, ACAD ARTCHITEC...) trong phiên bản ACADMAP có thêm một menu MAP gồm các lệnh chuyên cho làm bản đồ và việc tạo vùng tự động cho mấy cái thửa kia chỉ là tíc tắc. Khoai Tây đã làm sẵn rồi thì Khoai Lang cứ thế mà dùng thôi :)

 

Nên chăng ssg hãy chọn cách là khi chuơng trình chạy thì cho thông báo "Select close_region" chẳng hạn, như vậy thì user có thể chọn được nhiều Object và tránh được việc "BOUNDARY" bị lỗi khi pick vào trong region (thi thoảng tôi pick vào trong 1 vùng để tạo close_region thì hàm BOUNDARY nó báo lỗi mà không hiểu tại sao)

 

I'm sorry! DTR là function rất thông dụng của dân lisp để đổi độ sang radian. Vì quá thông dụng nên mình quên mất! Khi lập xong chương trình bao giờ mình cũng disable toàn bộ các lisp mình hay dùng (luôn ở chế độ autoload) trước khi test. Lần này sơ suất thế nào đã bị "lọt lưới", và tất nhiên là trên máy mình nó không báo lỗi.

Bạn chỉ thêm vào function DTR là OK (đã sửa lại trong code post ở trên):

 

(defun DTR(x) (/ (* x pi) 180) ) ;;;change degree to radian, return REAL

 

Mình không hiểu lắm về cái món làm bản đồ. Bạn thanhgam yêu cầu mỗi thửa là 1 table ghi tọa độ. Nếu làm hàng loạt thửa thì các tables sắp xếp như thế nào? Tóm lại là mình chỉ làm đúng như thanhgam đã yêu cầu, còn hay dở thế nào thì các bạn trong nghề góp ý thêm.

Về lệnh boundary (giống như lệnh hatch) đã có nhiều người than phiền. Tuy nhiên, mình thấy nếu cho vùng cần boundary hiển thị đầy đủ trên màn hình thì hầu như không gặp lỗi gì. Dùng boundary chẳng qua là một thủ thuật để AutoCAD tự động lấy biên giúp mình, bất kể các đối tượng để tạo nên nó là kiểu gì, nó đều tạo ra 1 pline kín. Mục đích: chương trình sẽ mang tính tổng quát hơn, có thể áp dụng cho nhiều ngành khác có nhu cầu tương tự, không riêng gì đo đạc, bản đồ.

Cũng nhờ cái closed pline này mà việc coding sẽ đơn giản hơn (mình đã có sẵn khá nhiều public functions để xử lý pline). Trong khi đó, rất khó truy cập database của region bằng lisp. Chính cái boundary tạo thành cũng mang tính chất temporary. Sau khi xong việc mình cũng del nó luôn, trả lại nguyên trạng bản vẽ. Mà mình cũng không hiểu tại sao cứ phải là region? Nếu file bản vẽ đã chuyển toàn bộ các thửa đất từ region sang pline thì sẽ thuận lợi hơn cho người lập trình rất nhiều.

Chờ thanhgam phản hồi, cũng như các bạn quan tâm đến chủ đề này góp ý thêm, mình sẽ sửa luôn thể.

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

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

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;This program make ordinal numbers and co-ordinate table for vertexs.
;;;Accept any objects that are Region, Polyline, Line and Arc (except Spline)
;;;providing there is a closed area between them.
;;;Written by Ssg - December 2007 - www.cadviet.com
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;PUBLIC FUNCTIONS
;;;-------------------------------------------------------------------------------
(Defun DTR(x) (/ (*  x pi) 180) ) ;;;change degree to radian, return REAL
;;;-------------------------------------------------------------------------------
(defun lineP (p0 a r / p1) ;;;Line polar: point, degree angle, radius
(setq p1 (polar p0 (dtr a) r))
(command "line" p0 p1 "")
)
;;;-------------------------------------------------------------------------------
(defun linePX (p0 x) (lineP p0 0 x)) ;;;Horizontal line: length x, from p0
;;;-------------------------------------------------------------------------------
(defun linePY (p0 y) (lineP p0 90 y)) ;;;Vertical line: length y, from p0
;;;-------------------------------------------------------------------------------
(defun getVert (e / i L) ;;;Return list of all vertex from pline e
(setq i 0 L nil)
(vl-load-com)
(repeat (fix (+ (vlax-curve-getEndParam e) 1))
   (setq L (append L (list (vlax-curve-getPointAtParam e i))))
   (setq i (1+ i))
)
L
)
;;;-------------------------------------------------------------------------------
(defun getth( / d h) ;;;Return current text height
(setq
   d (tblsearch "style" (getvar "textstyle"))
   h (cdr (assoc 40 d))
)
(if (= h 0) (setq h (cdr (assoc 42 d))))
h
)
;;;-------------------------------------------------------------------------------
(defun wtxtMC (txt p / sty d h) ;;;Write txt on graphic screen, Middle Center
(setq
   sty (getvar "textstyle")
   d (tblsearch "style" sty)
   h1 (cdr (assoc 40 d))
   h2 (cdr (assoc 42 d))
)
(if (> h1 0) (command "text" "j" "mc" p 0 txt)
   (command "text" "j" "mc" p h2 0 txt)
)
)
;;;-------------------------------------------------------------------------------
;;;PRIVATE FUNCTIONS
;;;-------------------------------------------------------------------------------
(defun txt1(txtL / p1 p2 p3 p4 pL i) ;;;Write texts in 1 row
(setq
   p1 (list (+ (car p0) (* 2 h)) (- (cadr p0) (* 1.5 h)))
   p2 (polar p1 0 (* 6 h))
   p3 (polar p2 0 (* 8 h))
   p4 (polar p3 0 (* 8 h))
   pL (list p1 p2 p3 p4)
   i 0
)
(repeat 4
   (wtxtMC (nth i txtL) (nth i pL))
   (setq i (1+ i))
)
)
;;;-------------------------------------------------------------------------------
(defun mesh1() ;;;Make 1 mesh unit
(linepy p0 (* -3 h))
(command "copy" "L" "" p0 (list (+ (car p0) (* 4 h)) (cadr p0)))
(command "array" "L" "" "r" 1 4 (* 8 h))
(linepx (polar p0 (* 1.5 pi) (* 3 h)) (* 28 h))
)
;;;-------------------------------------------------------------------------------
;;;MAIN PROGRAM
;;;-------------------------------------------------------------------------------
(defun C:VC( / p et p0 pvL h oldos i pv num txtL)
;;;Vertex Co-ordinate

;;;INPUT DATA
(setq p (getpoint "\nPick a point inside polygon or region:"))
(command "boundary" p "")
(setq et (entlast))
(redraw et 3)
(setq
   p0 (getpoint "\nBase point of table (upper left):")
   pvL (getvert et)
   h (getTh)
   oldos (getvar "osmode")
)
(setvar "osmode" 0)

;;;HEADER
(linepx p0 (* 28 h))
(mesh1)
(txt1 (list "TT" "X" "Y" "Z"))
(setq p0 (polar p0 (* 1.5 pi) (* 3 h)))

;;;MAKE RECORDS AND ORDINAL NUMBER
(setq i 0)
(repeat (1- (length pvL))
   (mesh1)
   (setq
       pv (nth i pvL)
       num (itoa (1+ i))
       txtL (list num (rtos (car pv)) (rtos (cadr pv)) (rtos (caddr pv)))
   )
   (txt1 txtL)
   (wtxtMC num (polar pv 0 h))
   (setq p0 (polar p0 (* 1.5 pi) (* 3 h)))
   (setq i (1+ i))
)

;;;FINISH
(command "erase" et "")
(setvar "osmode" oldos)
(princ)
)
;;;-------------------------------------------------------------------------------

 

chào bạn SSG, Mình cũng có nhu cầu muốn liệt kê tọa độ các điểm có sãn trên màn hình thành dạng bảng và tách riêng "tên điểm, X,Y,Z" giống như ở trên của Bạn . Bình thường để làm như vậy mình vẽ 1 đường pline đi qua lần lượt các điểm (từ 1 đến n), rồi dùng lệnh list để lấy tọa độ và copy ngược lại để dán vào cad. làm như vậy mỗi khi cần chỉnh lại bảng rất mất thời gian vì cả X,Y,Z đều nằm chung trong 1 text.

Mình đã dùng chương trình này của bạn bằng cách vẽ đường pline đi qua các điểm (từ 1 đến n) và bao kín nhưng thứ tự của các điểm in ra lại không đúng vì cách đánh số của bạn không trùng với tên điểm.

Vậy bạn giúp mình với 1 trong 2 phương án sau:

1. Chon tất cả các điểm trên màn hình và in tọa độ ra thành dạng bảng, số thứ tự chính là tên điểm (từ 1 đến n).

2. - sử dụng chương trình noilinetext.lsp để vẽ một đường pline,

- chọn đường pline và in tọa độ ra thành dạng bảng, số thứ tự chính là tên điểm (từ 1 đến n) và là các đỉnh của pline. Lệnh này giống như lệnh list của cad.

 

Thanks bạn SSG. :)

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 SSG, Mình cũng có nhu cầu muốn liệt kê tọa độ các điểm có sãn trên màn hình thành dạng bảng và tách riêng "tên điểm, X,Y,Z" giống như ở trên của Bạn . Bình thường để làm như vậy mình vẽ 1 đường pline đi qua lần lượt các điểm (từ 1 đến n), rồi dùng lệnh list để lấy tọa độ và copy ngược lại để dán vào cad. làm như vậy mỗi khi cần chỉnh lại bảng rất mất thời gian vì cả X,Y,Z đều nằm chung trong 1 text.

Mình đã dùng chương trình này của bạn bằng cách vẽ đường pline đi qua các điểm (từ 1 đến n) và bao kín nhưng thứ tự của các điểm in ra lại không đúng vì cách đánh số của bạn không trùng với tên điểm.

Vậy bạn giúp mình với 1 trong 2 phương án sau:

1. Chon tất cả các điểm trên màn hình và in tọa độ ra thành dạng bảng, số thứ tự chính là tên điểm (từ 1 đến n).

2. - sử dụng chương trình noilinetext.lsp để vẽ một đường pline,

- chọn đường pline và in tọa độ ra thành dạng bảng, số thứ tự chính là tên điểm (từ 1 đến n) và là các đỉnh của pline. Lệnh này giống như lệnh list của cad.

 

Thanks bạn SSG. :)

Dùng phương án 1, vẽ thêm pline làm gì cho lằng nhằng! Tuy nhiên, có mấy điều cần làm rõ:

1) Điểm là đối tượng point đúng không?

2) Tên điểm lấy ở đâu? Hay là phải pick từng điểm và lấy theo số thứ tự khi pick?

3) Có ghi text biểu diễn số thứ tự cho point hay không? Nếu có thì vị trí tương đối của điểm insert text so với point như thế nào?

4) Quy cách bảng (chiều rộng các row và column) theo như chương trình vừa rồi đuợc không?

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Dùng phương án 1, vẽ thêm pline làm gì cho lằng nhằng! Tuy nhiên, có mấy điều cần làm rõ:

1) Điểm là đối tượng point đúng không?

2) Tên điểm lấy ở đâu? Hay là phải pick từng điểm và lấy theo số thứ tự khi pick?

3) Có ghi text biểu diễn số thứ tự cho point hay không? Nếu có thì vị trí tương đối của điểm insert text so với point như thế nào?

4) Quy cách bảng (chiều rộng các row và column) theo như chương trình vừa rồi đuợc không?

 

Tôi gửi lên cho bác SSG một cái mẫu làm hồ sơ có thể tương đối diễn đạt được mục đích của mấy bạn kia. Trong đó có 1 số điểm cần lưu ý như sau :

 

1. Nên chọn cách là khi chạy chương trình thì đưa ra câu lệnh "Select Close_Polyline" còn chuyện đóng vùng bằng lệnh BO hay nối bằng tay thì cái này bắt buộc User phải làm thôi.

2. Số thứ tự đỉnh thửa do chương trình tự đặt nhưng theo quy định là phải chạy theo chiều thuận kim đồng hồ cho dùng user có nối thuận hay ngược hay dùng lệnh BO đi chăng nữa.

3. Đỉnh thửa là bắt đầu từ 1 và phải là từ trên xuống dưới theo trục Bắc Nam (theo như file vẽ tôi gửi kèm)

4. Bảng toạ độ tại cột thứ 4 là giá trị chiều dài cạnh từ đỉnh i đến đỉnh i+1 chứ ko phải giá trị Z

5. Nếu bảng toạ độ dài quá thì cho bật sang sang thứ 2 thứ 3 gì đó

6. Như ở topic trước bác SSG có thắc mắc nếu nhiều thửa quá thì bảng toạ độ để đâu thì như cách tôi đang làm là vẫn cho vào vị trí do user pick có điều mỗi thửa ta để bảng toạ độ trên 1 layer của CAD.

 

Mấy cái mẫu bạn gì gửi như tôi đoán là dùng để làm HS thửa đất phục vụ cho mấy bác làm bản đồ và địa chính nên tôi mới có ý kiến như vậy, nều ko phải mục đích đó thì thôi vậy, tuy nhiên có thể giúp bác SSG có cái nhìn toàn diện hơn về mấy cái mẫu hồ sơ này.

 

http://www.cadviet.com/upfiles/HS_file.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
Tôi gửi lên cho bác SSG một cái mẫu làm hồ sơ có thể tương đối diễn đạt được mục đích của mấy bạn kia...

... có thể giúp bác SSG có cái nhìn toàn diện hơn về mấy cái mẫu hồ sơ này.

 

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

Cám ơn sự nhiệt tình của bạn!

Nhưng mình thử mấy lần mà không thể nào down bản vẽ được. Chẳng biết lý do từ đâ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

Tạo một tài khoản hoặc đăng nhập để nhận xét

Bạn cần phải là một thành viên để lại một bình luận

Tạo tài khoản

Đăng ký một tài khoản mới trong cộng đồng của chúng tôi. Điều đó dễ mà.

Đăng ký tài khoản mới

Đăng nhập

Bạn có sẵn sàng để tạo một tài khoản ? Đăng nhập tại đây.

Đăng nhập ngay

×