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

Viết lisp theo yêu cầu [phần 2]

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

Cám ơn bác Giabach. Đúng là đoạn code trên khong có ý nghĩa trong thực tế nhưng em cần có nó để phát triển cái Lisp của em.

Ví dụ như trên bản đồ địa chính có các layer tên chủ, loại đất, diện tích bây giờ em muốn lập bảng thống kê gồm 1 cột tên chủ, 1 cột diện tích, 1 cột loại đất thì phải có đoạn code này. Mong bác giúp

Cái lisp của bác hình như còn lỗi gì đó. Nó chạy đến chỗ "bảng thống kê" rồi trở về dòng Command. Bác xem lại dùm em nhé.

Xin phép lão tiền bối gia_bach

 

(setq database (ssget "X" '((-4 . "< AND")(0 . "Text")(8 . "tchu,dchi,dthoai")(-4 . "AND >"))))

bỏ khoảng trắng chỗ in đậm

 

((= lay_name "tchu") (setq hoten (append (list noidung) hoten)))

((= lay_name "dchi") (setq diachi (append (list noidung) diachi)))

((= lay_name "dthoai") (setq sdthoai (append (list noidung) sdthoai)))

 

chỗ gạch dưới có phân biệt chữ hoa và chữ thường

 

Coi chừng Tên ông này cắm nhầm địa chỉ bà kia

 

------------------------------------------

PS: Cho hỏi làm sao để đưa tên lão tiền bối gia_bach vào sau chữ Trích dẫ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
PS: Cho hỏi làm sao để đưa tên lão tiền bối gia_bach vào sau chữ Trích dẫn

ý bạn fải chăng là thế này:

khụ khụ, tớ cũng có tý tuổi đấy, nhưng chưa già đâu nhá, liệu hồn :cheers:

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 chạy thử Lisp tính diện tích các region

(defun c:AreaR (/ cnt tot ss obj );Region Area
 (vl-load-com)
 (princ "\nChon doi tuong Region de tinh dien tich : ")
 (if (setq ss (ssget '((0 . "REGION"))))
   (progn
     (setq cnt 0 tot 0)
     (foreach e (mapcar 'vlax-ename->vla-Object (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss))))
(if (vlax-property-available-p e 'Area)
  (setq cnt (1+ cnt)
	tot (+ tot (vla-get-Area e))
	)))
     (princ (strcat "\nTong dien tich cua "(itoa cnt) " Region la : " (rtos tot) ))
     (if (and
    (setq obj (entsel "\nChon text de ghi ket qua hay Enter de ket thuc."))
    (setq obj (vlax-ename->vla-object (car obj)))
    (eq (vlax-get obj 'ObjectName) "AcDbText")
    )
(vla-put-TextString obj (rtos tot))
)
     (princ)
     )
   (princ "\nKhong co doi tuong Region nao duoc chon." )
   )
 (princ)
 )

Cảm ơn bạn nha. lisp đúng như mình mong muố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
.................

Cái lisp của bác hình như còn lỗi gì đó. Nó chạy đến chỗ "bảng thống kê" rồi trở về dòng Command. Bác xem lại dùm em nhé.

 

Hiện nay thì codebox đang bị lỗi do hiểu dấu mở ngoặc là mã HTML. Nếu bác cách ra một dấu cách, ví dụ < or Enter to exit> thì không sao, bởi hệ thống nhận ra đó không phải là HTML .

Do lỗi codebox , bạn xóa một dấu cách chỗ in đậm

(setq database (ssget "X" '((-4 . "< AND")(0 . "Text")(8 . "tchu,dchi,dthoai")(-4 . "AND >"))))

 

PS: bạn nên Upload file Cad bản đồ địa chính có các layer tên chủ, loại đất, diện tích cần thống kê.

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ác lão tiền bối cho hậu bối hỏi ngoài lề chút nha[]

To Thaistreetz

Trích dẫn(Lão tiền bối Gia Bách @ Sep 09 9999, 09:09)

khụ khụ, tớ cũng có tý tuổi đấy, nhưng chưa già đâu nhá, liệu hồn

làm sao được vậ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ác nào viết dùm mình cái lisp làm công việc sau:

Mình có cao độ điểm A, mình muốn tìm cao độ điểm B, C và ghi vào một text có trước.

Trình tự thực hiện như sau:

lisp thư nhất tìm cao độ y

Đánh lênh

Lisp hỏi điểm gốc (điểm này đã biết cao độ y). sau đó nhập cao độ (y) điểm này.

Lisp hỏi điểm cần tìm toạ độ y, (kích điểm)

Sau đó pick text cần chèn cao độ của điểm vừa pick.

Một cái tương tự nhưng mình muốn tìm toạ độ x. 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
Bác nào viết dùm mình cái lisp làm công việc sau:

Mình có cao độ điểm A, mình muốn tìm cao độ điểm B, C và ghi vào một text có trước.

Trình tự thực hiện như sau:

lisp thư nhất tìm cao độ y

Đánh lênh

Lisp hỏi điểm gốc (điểm này đã biết cao độ y). sau đó nhập cao độ (y) điểm này.

Lisp hỏi điểm cần tìm toạ độ y, (kích điểm)

Sau đó pick text cần chèn cao độ của điểm vừa pick.

Một cái tương tự nhưng mình muốn tìm toạ độ x. Thank!

Conghoan này, muốn người khác viết dùm lisp thì phải nêu thật rõ vấn đề, phải có hình ảnh hoặc bản vẽ minh họa đi kèm, Conghoan đã post nhiều mà vẫn để cho người giúp phải hỏi lại nhiều lầ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
Do lỗi codebox , bạn xóa một dấu cách chỗ in đậm

(setq database (ssget "X" '((-4 . "< AND")(0 . "Text")(8 . "tchu,dchi,dthoai")(-4 . "AND >"))))

 

PS: bạn nên Upload file Cad bản đồ địa chính có các layer tên chủ, loại đất, diện tích cần thống kê.

Gủi bác Gia_bach file BDDC, bác nghiên cứu giúp em

http://www.cadviet.com/upfiles/2/bddc.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
Bác nào viết dùm mình cái lisp làm công việc sau:

Mình có cao độ điểm A, mình muốn tìm cao độ điểm B, C và ghi vào một text có trước.

Trình tự thực hiện như sau:

lisp thư nhất tìm cao độ y

Đánh lênh

Lisp hỏi điểm gốc (điểm này đã biết cao độ y). sau đó nhập cao độ (y) điểm này.

Lisp hỏi điểm cần tìm toạ độ y, (kích điểm)

Sau đó pick text cần chèn cao độ của điểm vừa pick.

Một cái tương tự nhưng mình muốn tìm toạ độ x. Thank!

 

Đúng là khó hiểu thật. fải chăng bạn đang cần lisp này

@ master_worse: Bạn bấm nút Reply góc dưới bên fải của mỗi bài viết thử đi. Mình đoán hình như bạn chỉ có sử dụng Fast Reply thì fải.

  • 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
Conghoan này, muốn người khác viết dùm lisp thì phải nêu thật rõ vấn đề, phải có hình ảnh hoặc bản vẽ minh họa đi kèm, Conghoan đã post nhiều mà vẫn để cho người giúp phải hỏi lại nhiều lần!

Thực ra lisp này dùng để tìm toạ độ y của các điểm khi đã có một điểm cho trước có toạ độ y. Sau khi lấy được giá trị toạ độ y của điểm vừa pick thì mình chọn luôn một text có sẵn để chèn toạ độ y vào. Nó chỉ có thế thôi nhưng vì khả năng sư phạm quá kém nên làm khó mọi người rồi!

Thank!

file cad: http://www.cadviet.com/upfiles/2/tam.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
...

@ master_worse: Bạn bấm nút Reply góc dưới bên fải của mỗi bài viết thử đi. Mình đoán hình như bạn chỉ có sử dụng Fast Reply thì fải.

đã click thanks!

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ực ra lisp này dùng để tìm toạ độ y của các điểm khi đã có một điểm cho trước có toạ độ y. Sau khi lấy được giá trị toạ độ y của điểm vừa pick thì mình chọn luôn một text có sẵn để chèn toạ độ y vào. Nó chỉ có thế thôi nhưng vì khả năng sư phạm quá kém nên làm khó mọi người rồi!

Thank!

file cad: http://www.cadviet.com/upfiles/2/tam.dwg

Chào conghoan,

Các lisp chèn tọa độ điểm đã có trên điễn đàn, lisp của bạn Thai ở đây:

http://www.cadviet.com/forum/index.php?s=&...ost&p=71341

Hoặc các bài viết nói về field của bác NguyenHoanh,

Còn nếu các lisp trên không phù hợp, thì sẽ có người giúp Hoan

@conghoan, Thiep có tin nhắn cho Hoan, nhờ việc riê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
Đúng là khó hiểu thật. fải chăng bạn đang cần lisp này

@ master_worse: Bạn bấm nút Reply góc dưới bên fải của mỗi bài viết thử đi. Mình đoán hình như bạn chỉ có sử dụng Fast Reply thì fải.

cái này không đúng ý của mình mong Thaistreetz sửa lại giúp mình tí:

Ban đầu mình cũng nhập vào giống cái TN của Thaistreetz. Nhưng khi xuất cao độ thiết kế của một điểm nào đó trong trắc ngang thì mình chọn 1 text và sửa text đó lại có giá trị bằng cao độ thiết kế của điểm vừa mới pick. Mình chỉ cần cao độ thiết kế (trong trắc ngang thôi)

Công việc của mình là như thế này: Mình có một mặt cắt ngang, có cao độ thiết kế tại tâm mặt cắt, giờ mình muốn tìm cao độ thiết kế trên các điểm ở trên mặt cắt và cho vào text bên dưới.

file cad: http://www.cadviet.com/upfiles/2/tnct_6.dwg

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
Gủi bác Gia_bach file BDDC, bác nghiên cứu giúp em

http://www.cadviet.com/upfiles/2/bddc.dwg

Mình thấy hình như cả người cần và người giúp đều chưa rõ BĐĐC thì phải. Mình xem qua file thì trên đó có các layer đại khái là số thửa, họ tên và địa chỉ chứ làm gì có số điện thoại. Trong BĐĐC mỗi thửa (một hình khép kín tượng trưng cho ranh giới chủ hay ranh giới hoa màu, thủy sản ...) đều đc đánh số theo thứ tự không trùng nhau gọi là số thửa. Mỗi thửa thường sẽ có tên chủ và địa chỉ (nếu kg thì là của nhà nước quản lý). Như vậy để kg nhầm lẫn thì người dùng sẽ chọn lần lượt từng nhóm "số thửa, tên chủ, địa chỉ" từ thửa này đến thửa khác. Người lập trình sẽ căn cứ vào tên layer để tách chúng ra. Nếu muốn tự động thì phải cho vònh lặp qua từng thửa, sau đó căn cứ vào vị trí thửa tìm đg bao thửa rồi chọn các đối tg trên trong đg bao này. Sau đó xử lý trên TH trên. Nói chung hơi khó và có lúc kq kg chắc ă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
Mình thấy hình như cả người cần và người giúp đều chưa rõ BĐĐC thì phải. Mình xem qua file thì trên đó có các layer đại khái là số thửa, họ tên và địa chỉ chứ làm gì có số điện thoại. Trong BĐĐC mỗi thửa (một hình khép kín tượng trưng cho ranh giới chủ hay ranh giới hoa màu, thủy sản ...) đều đc đánh số theo thứ tự không trùng nhau gọi là số thửa. Mỗi thửa thường sẽ có tên chủ và địa chỉ (nếu kg thì là của nhà nước quản lý). Như vậy để kg nhầm lẫn thì người dùng sẽ chọn lần lượt từng nhóm "số thửa, tên chủ, địa chỉ" từ thửa này đến thửa khác. Người lập trình sẽ căn cứ vào tên layer để tách chúng ra. Nếu muốn tự động thì phải cho vònh lặp qua từng thửa, sau đó căn cứ vào vị trí thửa tìm đg bao thửa rồi chọn các đối tg trên trong đg bao này. Sau đó xử lý trên TH trên. Nói chung hơi khó và có lúc kq kg chắc ăn

Em muốn nhờ mọi người viết cho 1 lisp này,nó twơng tự như lệnh CDTN trong nova,bình thường những lisp nội suy cđ thiên nhiên thwờng phải chọn 3 điểm xung quanh rồi kích chọn vào điểm để nội suy,sau đó kích vào 1 text để ghi giá trị,nhưng nếu 1 bản vẽ có nhiều giá trị để nội suy thì quả là phiền phức,trong nova có lệnh CDTN, đầu tiên là mình chọn tất cả các cao độ tn để tạo thành mặt phẳng tự nhiên,sau đó nếu muốn nội suy tại 1 điểm nào thì đánh lệnh và kích vào vih trí đó để nội suy, không phải mỗi lần nội suy lại phải chọn 3 điểm xung qunah,nhưng trong nova thì giá trị trả về dưới dòng command, còn lisp này e muốn giá trị ghi vào 1 text nào đó do mình chọn. Mong mọi ng giúp đỡ !

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
........

Mình có một mặt cắt ngang, có cao độ thiết kế tại tâm mặt cắt, giờ mình muốn tìm cao độ thiết kế trên các điểm ở trên mặt cắt và cho vào text bên dưới.

file cad: http://www.cadviet.com/upfiles/2/tnct_6.dwg

Thank!

Hy vọng là đúng ý bạn.

(defun C:caodo(/ osm dc cd k dg)
 (defun *error* (msg)
   (if ov (mapcar 'setvar vl ov))
   (if (not(wcmatch (strcase msg) "*BREAK,*EXIT*,*CANCEL*"))
     (princ (strcat "\n** Error: " msg " **")))
   (princ))

 (vl-load-com)
 (command "undo" "be")
 (setq vl '("CMDECHO" "OSMODE" "orthomode")
       ov (mapcar 'getvar vl))
 (mapcar 'setvar vl '(0 33 0))
 (setq dc (getvar "userr1") cd (getvar "userr3" ))
 (if (= dc 0) (setq k "y") (setq k (getstring "\nThay doi diem goc & cao do Thiet ke ?(N)")))
 (if (or (= k "y")(= k "Y") )
   (progn
     (setq dg (getpoint "\nDiem goc Thiet ke :")
    dc (cadr dg)
    cd (getreal (strcat "\nCao do Thiet ke tuong ung" " <" (rtos (getvar "userr3")) "> : ")) )
     (if cd (setvar "userr3" cd) (setq cd (getvar "userr3")) )
     (setvar "userr1" dc)))

 (while (setq dg (getpoint "\nDiem can tim cao do :"))
   (setq ST (entsel "\nChon text can gan cao do: "))
   (and
     (setq obj (vlax-ename->vla-object (car st)) )
     (if (= (vlax-get obj 'ObjectName) "AcDbText")
      (vlax-put obj 'TextString (rtos (+ (- (cadr dg) dc) cd) 2 2))
      )
     )
   )
 (mapcar 'setvar vl ov)
 (command "undo" "e")
 (princ)
)

  • 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 các bác,

Vừa rồi có tìm thấy 1 cái ứng dụng, của lệnh ATTI

http://www.cadviet.com/upfiles/2/sannen.rar

http://www.cadviet.com/upfiles/2/control.rar (phải apload cả 2 file mới dùng được)

 

Vì là file VLX, trong đó lại có rất nhiều ứng dụng, e dùng cái phần mềm để biến thành file lisp, chỉ để tách 1 ứng dụng lệnh ATT thôi

http://www.cadviet.com/upfiles/2/1_2.rar

http://www.cadviet.com/upfiles/2/2.rar

Khổ nỗi, chỉnh sửa mãi mà không được vừa ý

đây là file sau khi biên dịch, nhờ các bác sửa dùm để có lệnh ATTI như file gốc

Trâ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
Hy vọng là đúng ý bạn.
(defun C:caodo(/ osm dc cd k dg)
 (defun *error* (msg)
   (if ov (mapcar 'setvar vl ov))
   (if (not(wcmatch (strcase msg) "*BREAK,*EXIT*,*CANCEL*"))
     (princ (strcat "\n** Error: " msg " **")))
   (princ))

 (vl-load-com)
 (command "undo" "be")
 (setq vl '("CMDECHO" "OSMODE" "orthomode")
       ov (mapcar 'getvar vl))
 (mapcar 'setvar vl '(0 33 0))
 (setq dc (getvar "userr1") cd (getvar "userr3" ))
 (if (= dc 0) (setq k "y") (setq k (getstring "\nThay doi diem goc & cao do Thiet ke ?(N)")))
 (if (or (= k "y")(= k "Y") )
   (progn
     (setq dg (getpoint "\nDiem goc Thiet ke :")
    dc (cadr dg)
    cd (getreal (strcat "\nCao do Thiet ke tuong ung" " <" (rtos (getvar "userr3")) "> : ")) )
     (if cd (setvar "userr3" cd) (setq cd (getvar "userr3")) )
     (setvar "userr1" dc)))

 (while (setq dg (getpoint "\nDiem can tim cao do :"))
   (setq ST (entsel "\nChon text can gan cao do: "))
   (and
     (setq obj (vlax-ename->vla-object (car st)) )
     (if (= (vlax-get obj 'ObjectName) "AcDbText")
      (vlax-put obj 'TextString (rtos (+ (- (cadr dg) dc) cd) 2 2))
      )
     )
   )
 (mapcar 'setvar vl ov)
 (command "undo" "e")
 (princ)
)

Chào Gia bach!

cái này cũng gần đúng ý của mình rồi, Gia bach sửa lại giúp mình tí nha.

Sau khi pick điểm thay đồi điểm gốc và cao độ thiết kế mình pick vào một cái text, và text này về "0" và cao độ tại tim đường là "0". Nhưng mình muốn text này không thay đổi và cao độ thiết kế tại tim đường có giá trị bằng giá trị trong text. Rồi sau đó mình đi tìm các cao độ của các điểm khác và gán vào các text tương ứng bên dưới. Có nghĩa là cao độ tim đường đã biết và từ cao độ này mình đi tìm các cao độ của các điểm khác.

Cảm ơn & 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
Em muốn nhờ mọi người viết cho 1 lisp này,nó twơng tự như lệnh CDTN trong nova,bình thường những lisp nội suy cđ thiên nhiên thwờng phải chọn 3 điểm xung quanh rồi kích chọn vào điểm để nội suy,sau đó kích vào 1 text để ghi giá trị,nhưng nếu 1 bản vẽ có nhiều giá trị để nội suy thì quả là phiền phức,trong nova có lệnh CDTN, đầu tiên là mình chọn tất cả các cao độ tn để tạo thành mặt phẳng tự nhiên,sau đó nếu muốn nội suy tại 1 điểm nào thì đánh lệnh và kích vào vih trí đó để nội suy, không phải mỗi lần nội suy lại phải chọn 3 điểm xung qunah,nhưng trong nova thì giá trị trả về dưới dòng command, còn lisp này e muốn giá trị ghi vào 1 text nào đó do mình chọn. Mong mọi ng giúp đỡ !

Không có cách nào khác là bạn buộc fải pick 3 điểm cao độ để từ đó nội suy cao độ môt điểm ở giữa. Trong nova, sở dĩ bạn pick một cái là có cao độ tự nhiên tại điểm pick là vì nova đã xây dựng một mô hình lưới bề mặt cho bạn.

Thuật toán nova sử dụng không fải là thuật toán nội suy. (Nội suy chỉ đc dùng ở bước xậy dựng mô hình lưới bề mặt (lưới tam giác). Mỗi khi bạn pick một điểm bằng lệnh cdtn, hay lệnh CC (chèn cọc) thì nova sẽ lấy tọa độ giao điểm của trục Z tại điểm pick với mô hình lưới bề mặt này. và đó chính là cao độ. Mô hình lưới bề mặt này chỉ là đối tượng tạm thời sử dụng cho một phiên làm việc duy nhất, tắt bản vẽ đi bạn fải chạy lại. và việc này thì chỉ nova làm được, cad thì 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
cái này không đúng ý của mình mong Thaistreetz sửa lại giúp mình tí:

Ban đầu mình cũng nhập vào giống cái TN của Thaistreetz. Nhưng khi xuất cao độ thiết kế của một điểm nào đó trong trắc ngang thì mình chọn 1 text và sửa text đó lại có giá trị bằng cao độ thiết kế của điểm vừa mới pick. Mình chỉ cần cao độ thiết kế (trong trắc ngang thôi)

Công việc của mình là như thế này: Mình có một mặt cắt ngang, có cao độ thiết kế tại tâm mặt cắt, giờ mình muốn tìm cao độ thiết kế trên các điểm ở trên mặt cắt và cho vào text bên dưới.

file cad: http://www.cadviet.com/upfiles/2/tnct_6.dwg

Thank!

 

Chào bác Conghoan

Bản vẽ bác up lên em xài cad2005 ko mở được, nhưng em đoán thế này ko biết có đúng không:

Bác đã thiết kế xong và đang trong quá trình hoàn thiện bản vẽ trên cad (cơ sở dữ liệu của nova lúc này đã không còn) và bác fát hiện ra là bác quên chưa điền thiết kế trắc ngang. bg bác cần 1 lisp để điền lại cao độ thiết kế cho bảng trắc ngang fía dưới fải không?

Nếu vấn đề đúng như trên thì em có thể giúp bác được. em cũng từng dính trường hợp này :cheers:

  • 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 Conghoan

Bản vẽ bác up lên em xài cad2005 ko mở được, nhưng em đoán thế này ko biết có đúng không:

Bác đã thiết kế xong và đang trong quá trình hoàn thiện bản vẽ trên cad (cơ sở dữ liệu của nova lúc này đã không còn) và bác fát hiện ra là bác quên chưa điền thiết kế trắc ngang. bg bác cần 1 lisp để điền lại cao độ thiết kế cho bảng trắc ngang fía dưới fải không?

Nếu vấn đề đúng như trên thì em có thể giúp bác được. em cũng từng dính trường hợp này :cheers:

Đúng rồi Thaistreets!

Mình thiết kết trắc ngang nhưng khi xuất qua cad rồi mà có một số thay đổi nên cao độ thiết kế tại một số điểm trên mặt cắt bị sai. Nhưng cao độ thiết kế tại tim đường (của mỗi mặt cắt) thì vẫn đúng. Nên mình muốn dựa vào cao độ thiết kế tại tim đường của mỗi mặt cắt để tình lại cao độ tại các điểm bị sai.

Cảm ơn Thaistreets đã giúp đỡ!

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,

Vừa rồi có tìm thấy 1 cái ứng dụng, của lệnh ATTI

http://www.cadviet.com/upfiles/2/sannen.rar

http://www.cadviet.com/upfiles/2/control.rar (phải apload cả 2 file mới dùng được)

Vì là file VLX, trong đó lại có rất nhiều ứng dụng, e dùng cái phần mềm để biến thành file lisp, chỉ để tách 1 ứng dụng lệnh ATT thôi

...

Trân thành cảm ơn!

Chào bác MANHHUNGXDA, 1 file VLX khi chuyển trở lại file lisp thì rất khó dịch lại giống như file gốc, vì vậy chỉ mang tính tham khảo. Thôi thì viết lại còn nhanh hơn. Trong sannen có rất nhiều lệnh, thật tình mình chưa sử dụng vì không phải ngành mình, không biết lệnh ATTI dùng để làm gì nữa? biết đâu mình giúp được gì chă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
Gủi bác Gia_bach file BDDC, bác nghiên cứu giúp em

http://www.cadviet.com/upfiles/2/bddc.dwg

Chào moihoclisp

Góp ý với bạn : Về mặt lập trình với cách thể hiện như File CAD của bạn thì rất khó khăn, để tiện cho việc lập trình tự động, bạn cần tổ chức các thửa đất trong 1 đối tuợng kín (vd: PLINE kín), khi đó lần luợt duyệt qua các thửa đất (đối tuợng kín) này lấy ra "số thửa, tên chủ, địa chỉ".

Hoặc các Text "số thửa, tên chủ, địa chỉ" đuợc đặt cách nhau 1 hằng số. Điều này có vẻ khó thưc hiện hơn vì đôi khi diện tích thửa đất quá nhỏ không đủ chỗ đặt các Text.

gửi bạn Lisp ghi tên chủ thửa đất.

(defun c:gan (/ dsach pt ss ten txtsiz)  
 (princ "\nChon Ten chu lo dat hay Enter de chon tat ca :");(8 . "tchu,dchi,sothua")
 (if (null (setq ss (ssget (list (cons 0 "Text")(cons 8 "tchu")))))
   (setq ss (ssget "_X" (list (cons 0 "Text")(cons 8 "tchu") (cons 410 (getvar "Ctab")))))
   )
 (if (> (sslength ss) 0)
   (progn
     (setq dsach (list))
     (foreach e (mapcar 'entget (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))) 
(setq ten (cdr (assoc 1 e))
      dsach (append (list ten) dsach))
)
     (setq pt (getpoint "\nDiem dat Bang thong ke :"  )
    txtsiz (* (getvar "dimtxt")(getvar "dimscale")) )
     (Make_Text_bl pt "Bang thong ke Ten chu lo dat" txtsiz)
     (foreach ten dsach
(setq pt (polar pt (/ pi -2) (* 1.5 txtsiz)))
(Make_Text_bl pt ten txtsiz)	
)
     )
   )
 (princ)
)

(defun Make_Text_bl(pt val TextSize)
 (entmake (list '(0 . "TEXT")
                (cons 10 pt)
                (cons 40 TextSize)
                (cons 1 val)
                (cons 7 (getvar "TEXTSTYLE"))
                '(71 . 0)
                '(72 . 0)
                '(73 . 1)
                (cons 11 pt))))

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 MANHHUNGXDA, 1 file VLX khi chuyển trở lại file lisp thì rất khó dịch lại giống như file gốc, vì vậy chỉ mang tính tham khảo. Thôi thì viết lại còn nhanh hơn. Trong sannen có rất nhiều lệnh, thật tình mình chưa sử dụng vì không phải ngành mình, không biết lệnh ATTI dùng để làm gì nữa? biết đâu mình giúp được gì chăng?

cảm ơn bác nhiều!

cái lệnh ATTI có chức năng đánh số thứ tự các block thuộc tính ATTDEF

SAU KHI LOAD Control.vlx và Sannen.VLX

1- Ban đầu nó bắt chọn 1 block đại diện cho tất cả các block đó:

"Pick mot block de nhan dang:"

atti111.jpg

2- Sau đó ta chọn 1 đối tượng trong thuộc tính: Ví dụ: "SO" hoặc " DIEN TICH" hoac khoi lượng "KHOILUONG". Em sẽ trọn "so"

3- Và chọn 1 miền chứa các block cùng thuộc tính

att222.jpg

=> kết quả: nó sẽ đánh số thứ tự tăng dần từ trái qua phải hoặc ngươc lại Trên đơn vị là "SO" mà ta đã chọn của các block

Đây là file cad của nó! http://www.cadviet.com/upfiles/2/san_nen.dwg

 

Trong file em đã gửi thì file DCL em nghĩ là dùng được, bác sửa hộ em file lisp này với

http://www.cadviet.com/upfiles/2/1_2.rar

http://www.cadviet.com/upfiles/2/2.rar

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 moihoclisp

Góp ý với bạn : Về mặt lập trình với cách thể hiện như File CAD của bạn thì rất khó khăn, để tiện cho việc lập trình tự động, bạn cần tổ chức các thửa đất trong 1 đối tuợng kín (vd: PLINE kín), khi đó lần luợt duyệt qua các thửa đất (đối tuợng kín) này lấy ra "số thửa, tên chủ, địa chỉ".

Hoặc các Text "số thửa, tên chủ, địa chỉ" đuợc đặt cách nhau 1 hằng số. Điều này có vẻ khó thưc hiện hơn vì đôi khi diện tích thửa đất quá nhỏ không đủ chỗ đặt các Text.

Cảm ơn bác gia_bach. như vậy là đủ rồi. Điều em muốn ở đây không phải là thống kê tên chủ trên BĐĐC mà là đoạn code tự động lấy Text theo Layer để gán vào biến từ đó xử lý biến này theo ý mình.

Mình thấy hình như cả người cần và người giúp đều chưa rõ BĐĐC thì phải. Mình xem qua file thì trên đó có các layer đại khái là số thửa, họ tên và địa chỉ chứ làm gì có số điện thoại. Trong BĐĐC mỗi thửa (một hình khép kín tượng trưng cho ranh giới chủ hay ranh giới hoa màu, thủy sản ...) đều đc đánh số theo thứ tự không trùng nhau gọi là số thửa. Mỗi thửa thường sẽ có tên chủ và địa chỉ (nếu kg thì là của nhà nước quản lý). Như vậy để kg nhầm lẫn thì người dùng sẽ chọn lần lượt từng nhóm "số thửa, tên chủ, địa chỉ" từ thửa này đến thửa khác. Người lập trình sẽ căn cứ vào tên layer để tách chúng ra. Nếu muốn tự động thì phải cho vònh lặp qua từng thửa, sau đó căn cứ vào vị trí thửa tìm đg bao thửa rồi chọn các đối tg trên trong đg bao này. Sau đó xử lý trên TH trên. Nói chung hơi khó và có lúc kq kg chắc ăn

Cảm ơn TRUNGNGAMY đã quan tâm. Đúng là trên BDDC không có số điện thoại hay gì gì đó, còn BDDC thì mình hiểu rõ vì mình làm BDDC chính quy bạn ah. Trên thực tế chẳng có ai đi thống kê tên chủ như trên bởi vì BDDC được thành lập bằng Microstation + Famis, khi Export sang AutoCAD không tương thích Font nên các chữ không sử dụng được. Hơn nữa đã có sổ địa chính, sổ mục kê ... thống kê đầy đủ 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
Khách
Chủ đề này bây giờ đã bị đóng lại để trả lời thêm.

×