Đến nội dung


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

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


  • Chủ đề bị khóa Chủ đề bị khóa
3783 replies to this topic

#181 conghoan1003

conghoan1003

    biết vẽ point

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

Đã gửi 29 September 2009 - 08:40 AM

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!
  • 0
Học học nữa học mãi.
Đúp học lại!

#182 thiep

thiep

    biết dimbaseline

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

Đã gửi 29 September 2009 - 11:37 AM

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!
  • 1

#183 moihoclisp

moihoclisp

    biết zoom

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

Đã gửi 29 September 2009 - 12:31 PM

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.c...iles/2/bddc.dwg
  • 0

#184 Thaistreetz

Thaistreetz

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 903 Bài viết
Điểm đánh giá: 505 (tốt)

Đã gửi 29 September 2009 - 03:15 PM

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

Hình đã gửi
IN HIM, I TRUST. THE TRUST IN MY GOD


#185 conghoan1003

conghoan1003

    biết vẽ point

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

Đã gửi 29 September 2009 - 03:29 PM

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.c...files/2/tam.dwg
  • 0
Học học nữa học mãi.
Đúp học lại!

#186 master_worse

master_worse

    biết lệnh offset

  • Advance Member
  • PipPipPip
  • 170 Bài viết
Điểm đánh giá: 87 (tàm tạm)

Đã gửi 29 September 2009 - 03:48 PM

...
@ 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!
  • 0

Ngu dốt không đáng thẹn bằng thiếu ý chí học hỏi


Tri thức làm người ta khiêm tốn, ngu si làm người ta kiêu ngạo (Ngạn ngữ Anh)


#187 thiep

thiep

    biết dimbaseline

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

Đã gửi 29 September 2009 - 04:08 PM

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.c...files/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.c...&...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.
  • 0

#188 conghoan1003

conghoan1003

    biết vẽ point

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

Đã gửi 29 September 2009 - 07:39 PM

Đú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.c...es/2/tnct_6.dwg
Thank!
  • 0
Học học nữa học mãi.
Đúp học lại!

#189 TRUNGNGAMY

TRUNGNGAMY

    biết lệnh block

  • Members
  • PipPipPipPipPipPip
  • 401 Bài viết
Điểm đánh giá: 91 (tàm tạm)

Đã gửi 29 September 2009 - 09:36 PM

Gủi bác Gia_bach file BDDC, bác nghiên cứu giúp em
http://www.cadviet.c...iles/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
  • 0

#190 Gatesi

Gatesi

    biết vẽ arc

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

Đã gửi 29 September 2009 - 10:45 PM

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 đỡ !
  • 0

#191 gia_bach

gia_bach

    biết lệnh adcenter

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

Đã gửi 30 September 2009 - 09:13 AM

........
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.c...es/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)
)

  • 1

#192 MANHHUNGXDA

MANHHUNGXDA

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 926 Bài viết
Điểm đánh giá: 458 (tốt)

Đã gửi 30 September 2009 - 09:17 AM

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.c...es/2/sannen.rar
http://www.cadviet.c...s/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.c...files/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!
  • 0
Hãy ước cho trọn 1 ước mơ!

#193 conghoan1003

conghoan1003

    biết vẽ point

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

Đã gửi 30 September 2009 - 12:09 PM

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ẻ!
  • 0
Học học nữa học mãi.
Đúp học lại!

#194 Thaistreetz

Thaistreetz

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 903 Bài viết
Điểm đánh giá: 505 (tốt)

Đã gửi 30 September 2009 - 01:47 PM

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

Hình đã gửi
IN HIM, I TRUST. THE TRUST IN MY GOD


#195 Thaistreetz

Thaistreetz

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 903 Bài viết
Điểm đánh giá: 505 (tốt)

Đã gửi 30 September 2009 - 01:56 PM

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.c...es/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:
  • 1

Hình đã gửi
IN HIM, I TRUST. THE TRUST IN MY GOD


#196 conghoan1003

conghoan1003

    biết vẽ point

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

Đã gửi 30 September 2009 - 02:27 PM

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 đỡ!
  • 0
Học học nữa học mãi.
Đúp học lại!

#197 thiep

thiep

    biết dimbaseline

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

Đã gửi 30 September 2009 - 03:07 PM

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.c...es/2/sannen.rar
http://www.cadviet.c...s/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?
  • 1

#198 gia_bach

gia_bach

    biết lệnh adcenter

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

Đã gửi 30 September 2009 - 04:24 PM

Gủi bác Gia_bach file BDDC, bác nghiên cứu giúp em
http://www.cadviet.c...iles/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))))

  • 0

#199 MANHHUNGXDA

MANHHUNGXDA

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 926 Bài viết
Điểm đánh giá: 458 (tốt)

Đã gửi 30 September 2009 - 04:29 PM

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:"
Hình đã gửi
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
Hình đã gửi
=> 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.c...s/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.c...files/2/1_2.rar
http://www.cadviet.com/upfiles/2/2.rar
  • 0
Hãy ước cho trọn 1 ước mơ!

#200 moihoclisp

moihoclisp

    biết zoom

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

Đã gửi 30 September 2009 - 05:28 PM

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