Đế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

#2741 vietha209

vietha209

    biết zoom

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

Đã gửi 28 November 2010 - 09:57 AM

Bạn sửa dòng này (setvar "OSMODE" 3) thành (setvar "OSMODE" 1). Vì (setvar "OSMODE" 3) bắt cả điểm midpoint nên đường tròn nó dính vào điểm giữa của đường thẳng. Nếu không muốn sửa dòng (setvar "OSMODE" 3) thì bạn thêm dòng (setvar "OSMODE" 0) sau dòng (setq P2 (getpoint P1 "\n Pick diem cuoi: "))

Cám ơn bạn mình làm theo bạn và đã sửa được lỗi đó rồi, cho mình hỏi thêm là tại sao biến OSMODE chỉ là để mình phục vụ bắt điểm còn trong TH này thì mình đã khai báo rất rõ điểm P4 là tâm đường tròn mà sao nó lại bắt nhầm vào điểm MID kia được nhỉ?
  • 0

#2742 lacvanhoa

lacvanhoa

    biết vẽ line

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

Đã gửi 28 November 2010 - 10:08 AM

Cho em đóng góp ý kiến thêm nge anh phamngoctu http://www.cadviet.c...les/3/to44m.dwg
  • 0

#2743 phamngoctukts

phamngoctukts

    biết lệnh adcenter

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

Đã gửi 28 November 2010 - 10:56 AM

Cám ơn bạn mình làm theo bạn và đã sửa được lỗi đó rồi, cho mình hỏi thêm là tại sao biến OSMODE chỉ là để mình phục vụ bắt điểm còn trong TH này thì mình đã khai báo rất rõ điểm P4 là tâm đường tròn mà sao nó lại bắt nhầm vào điểm MID kia được nhỉ?

Do vùng truy bắt điểm của bạn nó lớn hơn cái bán kính đường tròn bạn a. Nếu bạn zoom to lên thì không bị như thế.
  • 1
Tất cả vì sự phát triển của diễn đàn ...
Cám ơn đừng nói lời suông mà hãy nhấn Hình đã gửi!

#2744 phamngoctukts

phamngoctukts

    biết lệnh adcenter

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

Đã gửi 28 November 2010 - 11:02 AM

Cho em đóng góp ý kiến thêm nge anh phamngoctu http://www.cadviet.c...les/3/to44m.dwg

Cái yêu cầu này của bạn thật sự rất khó vì các text đó sắp xếp không theo quy luật nào cả mình cũng đang nghĩ thuật toán đó tù trước rồi nhưng hiện giờ chưa nghĩ ra cách. Bạn chịu khó đợi nhé.
  • 0
Tất cả vì sự phát triển của diễn đàn ...
Cám ơn đừng nói lời suông mà hãy nhấn Hình đã gửi!

#2745 nguoi_tho_mo

nguoi_tho_mo

    biết vẽ arc

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

Đã gửi 28 November 2010 - 11:14 AM

Bạn thử lại cái này xem sao:


;; free lisp from cadviet.com

(defun c:bao ()
(vl-load-com)
(setq ss (ssget))
(if (= (tblsearch "block" "b_temp") nil)
(command "block" "b_temp" "0,0" ss "")
(command "block" "b_temp" "y" "0,0" ss "")
)
(command "-insert" "b_temp" "0,0" "" "" "")
(setq rec (acet-ent-geomextents (setq el (entlast))))
(setq p1 (car rec))
(setq p2 (cadr rec))
(setq p1 (polar p1 (+ (/ pi 4) pi) 50))
(setq p2 (polar p2 (/ pi 4) 50))
(setq p (polar p1 (/ pi 4) 25))
(command "rectang" p1 p2)
(setq el1 (entlast))
(command "boundary" p ""
(if (/= (getvar "cmdactive") 0)
(alert "khong tao duoc duong bao ban hay kiem tra lai hinh ve")
)
)
(command "erase" el1 "")
(setq ss (ssget "w" p1 p2 (list (cons 0 "LWPOLYLINE"))))
(command "change" ss "" "p" "c" "2" "")
(setq ss (acet-ss-to-list ss))
(setq lar (list))
(foreach n ss
(setq dt (dientich n))
(setq lar (append (list (list dt n)) lar))
)
(setq lar (vl-sort lar '(lambda (x y)
(> (car x) (car y))
)
)
)
(setq rm (cadr (cadr lar)))
(Setq ss (vl-remove rm ss))
(setq ss (acet-list-to-ss ss))
(command "erase" ss "")
(acet-explode el)
)
(defun dientich (name / are ob ll)
(command "region" name "")
(setq ob (vlax-ename->vla-object (setq ll (entlast))))
(setq are (vla-get-area ob))
(command "undo" 1)
are
)

Em chưa tạo được anh Tú ạ
http://www.cadviet.c...3/filemau_1.dwg
Hình đã gửi
  • 0

#2746 vietha209

vietha209

    biết zoom

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

Đã gửi 28 November 2010 - 11:35 AM

Mình còn vấn đề này nữa muốn hỏi mọi người là tại sao nếu mình khai báo biến đầy đủ, ví dụ (defun C:ccc (/ P0 P1 P2) ...) thì khi theo dõi giá trị biến bằng aspect trong Visual Lisp lại không được, còn khi mình không khai báo rõ ràng (thành biến toàn cục) ví dụ (defun C:ccc () ...) thì lại sử dụng aspect được.
  • 0

#2747 phamngoctukts

phamngoctukts

    biết lệnh adcenter

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

Đã gửi 28 November 2010 - 11:43 AM

Em chưa tạo được anh Tú ạ
http://www.cadviet.c...3/filemau_1.dwg
Hình đã gửi

Tạo bình thường mà bạn. Trước khi tạo bạn phải xoá bỏ cái rectang bao ngoài và cái hình sản phẩm đi không thì lisp chay sai.
  • 0
Tất cả vì sự phát triển của diễn đàn ...
Cám ơn đừng nói lời suông mà hãy nhấn Hình đã gửi!

#2748 nguoi_tho_mo

nguoi_tho_mo

    biết vẽ arc

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

Đã gửi 28 November 2010 - 12:09 PM

Tạo bình thường mà bạn. Trước khi tạo bạn phải xoá bỏ cái rectang bao ngoài và cái hình sản phẩm đi không thì lisp chay sai.

Được rồi anh Tú ạ
Bạn nào dùng thì down file của anh Tú về thử nhé
Cảm ơn anh
  • 0

#2749 phamngoctukts

phamngoctukts

    biết lệnh adcenter

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

Đã gửi 28 November 2010 - 01:41 PM

Cho em đóng góp ý kiến thêm nge anh phamngoctu http://www.cadviet.c...les/3/to44m.dwg

Bạn dùng thử cái này. Do không tìm ra thuật toán để lọc các text không liên quan nên bạn chịu khó xoá bớt bằng tay. Anh em trên diễn đàn có ý nào hay thì sửa giúp bạn lacvanhoa nhé.

(defun c:cthua ()
(vl-load-com)
(setq oldos (getvar "osmode"))
(setvar "osmode" 0)
(setq p T)
(while p
(setq p (getpoint "\nPick vao vi tri thua muon trich do: "))
(command "boundary" p "")
(command "area" "o" (setq el1 (entlast)))
(setq of (/ (sqrt (getvar "area")) 6))
(setq ranp (car (acet-geom-vertex-list el1)))
(setq pout (polar p (angle p ranp) (+ (distance p ranp) of)))
(command "offset" of el1 pout "")
(setq el2 (entlast))
(command "zoom" "e")
(setq lsp (acet-geom-vertex-list el2))
(setq ss (ssget "cp" lsp '((0 . "LINE,LWPOLYLINE"))))
(setq ss (ssdel el1 ss))
(setq ss (ssdel el2 ss))
(command "copy" ss "" p (setq pm (getpoint "\nPick vao vi tri can chen")) "")
(setq sstext (laytext el1 (* of 6) pm))
(command "copy" sstext "" p pm "")
(command "move" el1 el2 "" p pm)
(command "offset" 1 el2 p "")
(setq el3 (entlast))
(setq lsf (acet-geom-vertex-list el3))
(setq i 0)
(repeat 2
(command "trim" el2 "" "f")
(repeat (length lsf)
(command (nth i lsf))
(setq i (1+ i))
)
(command "" "")
)
(entdel el1)
(entdel el2)
(entdel el3)
(command "zoom" "p")
(setq dk (getstring "\nTrich thua da hoan thanh. ban co muon tiep tuc khong: : [Co]: "))
(if (or (= (strcase dk) "C") (= dk "")) (setq p T))
(if (= (strcase dk) "K") (setq p nil))
)
(setvar "osmode" oldos)
)
(defun laytext ( plk kc po / elt lstt)
(command "offset" kc plk po "")
(setq elt (entlast))
(setq lstt (acet-geom-vertex-list elt))
(setq sst (ssget "wp" lstt '((0 . "TEXT"))))
(command "undo" 1)
sst
)

  • 0
Tất cả vì sự phát triển của diễn đàn ...
Cám ơn đừng nói lời suông mà hãy nhấn Hình đã gửi!

#2750 gia_bach

gia_bach

    biết lệnh adcenter

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

Đã gửi 28 November 2010 - 02:15 PM

Bạn dùng thử cái này. Do không tìm ra thuật toán để lọc các text không liên quan nên bạn chịu khó xoá bớt bằng tay. Anh em trên diễn đàn có ý nào hay thì sửa giúp bạn lacvanhoa nhé.
;.....................

phamngoctukts thử lấy tọa độ của đường bao rồi gọi hàm ssget với tùy chọn "cp"
(setq lstt (acet-geom-vertex-list plk))
(setq sst (ssget "cp" lstt '((0 . "TEXT"))))
  • 0

#2751 phamngoctukts

phamngoctukts

    biết lệnh adcenter

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

Đã gửi 28 November 2010 - 02:36 PM

phamngoctukts thử lấy tọa độ của đường bao rồi gọi hàm ssget với tùy chọn "cp"
(setq lstt (acet-geom-vertex-list plk))
(setq sst (ssget "cp" lstt '((0 . "TEXT"))))

Em thử làm thế rồi mà Bác ạ. vấn đề là thế này.
tạo một tập hợp các buondary quang thửa được chọn
lấy list các điểm của boundary này rồi dùng ssget để chọn text
nhưng làm cách nào để lấy các boundary nàu cho đúng vì có những miền quanh thửa được lựa chọn bị hở. đường bo tạo nên thửa không không được break tại điểm giao.
Em đã thử như thế này:
offset dường bounday ra một khoảng -> lấy list điểm giữa của các cạnh của boundart vừa tạo -> tạo boundary với pickpoint là các điểm giữa này -> láy list point của buondary vừa tạo -> dùng ssget để lấy text.
Nhưng lisp chạy không đúng.
  • 0
Tất cả vì sự phát triển của diễn đàn ...
Cám ơn đừng nói lời suông mà hãy nhấn Hình đã gửi!

#2752 gia_bach

gia_bach

    biết lệnh adcenter

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

Đã gửi 28 November 2010 - 08:51 PM

Em thử làm thế rồi mà Bác ạ. vấn đề là thế này.
tạo một tập hợp các buondary quang thửa được chọn
lấy list các điểm của boundary này rồi dùng ssget để chọn text
nhưng làm cách nào để lấy các boundary nàu cho đúng vì có những miền quanh thửa được lựa chọn bị hở. đường bo tạo nên thửa không không được break tại điểm giao.
Em đã thử như thế này:
offset dường bounday ra một khoảng -> lấy list điểm giữa của các cạnh của boundart vừa tạo -> tạo boundary với pickpoint là các điểm giữa này -> láy list point của buondary vừa tạo -> dùng ssget để lấy text.
Nhưng lisp chạy không đúng.

Ý tưởng vẫn là dựa trên LISP của bạn, tôi chỉ góp ý về hàm lọc Text
(defun laytext ( plk / stt)
(setq lstt (acet-geom-vertex-list plk))
(setq sst (ssget "cp" lstt '((0 . "TEXT"))))
[b](lọc_Text_ngoài_đường_bao)[/b]
sst )


+ hàm (lọc_Text_ngoài_đường_bao):
lần lượt duyệt qua các Text trong tập chọn sst
- nếu điểm chèn của Text nằm ngoài đường bao : xóa Text đó ra khỏi tập chọn.
  • 1

#2753 phamngoctukts

phamngoctukts

    biết lệnh adcenter

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

Đã gửi 28 November 2010 - 09:08 PM

- nếu điểm chèn của Text nằm ngoài đường bao : xóa Text đó ra khỏi tập chọn.

Cám ơn bác nhưng vấn đề của em là xác định cái đường bao đó.
  • 0
Tất cả vì sự phát triển của diễn đàn ...
Cám ơn đừng nói lời suông mà hãy nhấn Hình đã gửi!

#2754 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6009 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 28 November 2010 - 11:32 PM

Tạo bình thường mà bạn. Trước khi tạo bạn phải xoá bỏ cái rectang bao ngoài và cái hình sản phẩm đi không thì lisp chay sai.

Chào bác Phamngoctukts,
Mình có chạy thử cái lisp này cho một vài trường hợp thì thấy có một vài thắc mắc như sau:
1/- Khi tạo region để lấy diện tích của một polylỉne kín, nếu polyline này tạo thành đa giác lõm thì cái diện tích lấy được không hoàn toàn đúng.
2/- Có trường hợp sau khi chạy lisp vẫn tồn tại một khung bao ngoài của đường bao cần tạo. Điều này theo mình nghĩ có thể là do khi tạo region mới phát sinh đường bao này, vì trong lisp dẵ xóa đường bao el1 rồi.
3/- Vì sao khi các polyline kín đã được block lại vẫn bị lấy vào trong tập chọn ss bởi hàm (ssget "w" p1 p2 (list (cons 0 "lwpolyline"))) ????
Rất mong bác xem xét lại và giải đáp giùm. Cám ơn bác trước.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#2755 phamngoctukts

phamngoctukts

    biết lệnh adcenter

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

Đã gửi 29 November 2010 - 07:55 AM

Chào bác Phamngoctukts,
Mình có chạy thử cái lisp này cho một vài trường hợp thì thấy có một vài thắc mắc như sau:
1/- Khi tạo region để lấy diện tích của một polylỉne kín, nếu polyline này tạo thành đa giác lõm thì cái diện tích lấy được không hoàn toàn đúng.
2/- Có trường hợp sau khi chạy lisp vẫn tồn tại một khung bao ngoài của đường bao cần tạo. Điều này theo mình nghĩ có thể là do khi tạo region mới phát sinh đường bao này, vì trong lisp dẵ xóa đường bao el1 rồi.
3/- Vì sao khi các polyline kín đã được block lại vẫn bị lấy vào trong tập chọn ss bởi hàm (ssget "w" p1 p2 (list (cons 0 "lwpolyline"))) ????
Rất mong bác xem xét lại và giải đáp giùm. Cám ơn bác trước.

Chào Bác Bình!
1. Diện tích không hoàn toàn đúng là thế nào hả Bác (tức là nó bị sai số hay là sai hoàn toàn).
2. Theo em nghĩ tồn tại đường bao là do hàm (ssget "w" p1 p2 (list (cons 0 "lwpolyline"))) điểm p1 p2 không thấy trên màn hình. Bác thử bổ xung thêm (command "zoom" "w" p1 p2) xem sao.
3. Bác xem lại xem các polylỉne có được cho vào block đâu. Block chỉ tạo ra lúc ban đầu với mục đích là lấy cái rectang bao ngoài của những đối tượng được chọn. đến khi kết thúc lisp mới explode này ra mà.
  • 0
Tất cả vì sự phát triển của diễn đàn ...
Cám ơn đừng nói lời suông mà hãy nhấn Hình đã gửi!

#2756 gia_bach

gia_bach

    biết lệnh adcenter

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

Đã gửi 29 November 2010 - 08:20 AM

Cám ơn bác nhưng vấn đề của em là xác định cái đường bao đó.

Sorry phamngoctukts.
Đọc lại yêu cầu của lacvanhoa là trích thông tin của các thửa giáp ranh thì rất khó.
Vì diện tich thửa thay đổi không theo qui luật nào cả, có lẻ chỉ còn cách chọn từng Text thôi.

Hoặc tìm (tạo ra) tất cả các đuờng bao của các thửa giáp ranh-> lọc ra tên chủ thửa đất ?
  • 0

#2757 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 29 November 2010 - 09:23 AM

Theo tôi thì giải bài toán này cũng tương đối dễ thôi là như thế này :
1. Người dùng chọn điểm để tạo Boundary lô đất cần làm sổ thửa đất ==> tạo polyline A kín của thửa đất
2. Lấy list điểm dt A vừa tạo (ví dụ như n điểm)
3. Dùng hàm xác định vùng bắt điểm theo từng cạnh của lô đất. Ví dụ như lô đất có 6 điểm thì sẽ có (6-1)=5 vùng kín để chọn TEXT khoang vùng để chọn tên của người hàng xóm cùng lô đất
4. Lọc TEXT trong vùng chọn trên cơ sở chỉ chọn 1 TEXT có vị trí gần nhất cạnh chọn của lô đất ==> sẽ được TEXT tên hàng xóm
....
Bài toán ra như ý
Không biết là ý kiến các bác thế nào
  • 0

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

ttps://www.facebook...etThietKeTuDong


#2758 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6009 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 29 November 2010 - 11:11 AM

Chào Bác Bình!
1. Diện tích không hoàn toàn đúng là thế nào hả Bác (tức là nó bị sai số hay là sai hoàn toàn).
2. Theo em nghĩ tồn tại đường bao là do hàm (ssget "w" p1 p2 (list (cons 0 "lwpolyline"))) điểm p1 p2 không thấy trên màn hình. Bác thử bổ xung thêm (command "zoom" "w" p1 p2) xem sao.
3. Bác xem lại xem các polylỉne có được cho vào block đâu. Block chỉ tạo ra lúc ban đầu với mục đích là lấy cái rectang bao ngoài của những đối tượng được chọn. đến khi kết thúc lisp mới explode này ra mà.

1/- Diện tich không hoàn toàn đúng tức là nó có lấy được diện tích nhưng hình như không phải của đa giác lõm mà là cái diện tích của một hình bao nào đó chứa cái đa giác lõm đó bác ạ. Bởi vì khi mình kiểm tra lại cái list tập chọn lar thì mình thấy cái ename thì đúng là của đa giác lõm nhưng diện tích thì lại lớn hơn khá nhiều lần bác à.
2/- Không phải là do 2 diểm p1 p2 không thấy trên màn hình mà kể cả khi thấy. Mình thậm chí còn tạo thêm các điểm này để kiểm tra mà, Lý do thì mình chưa rõ lắm nên mới hỏi lại bác bác à.
3/- Sau khi tạo block thì tất cả các đối tượng trong vùng chọn ban đầu (tức là tập chọn ss) sẽ ẩn đi hết. Lúc này mới insert cái block b_temp vô và trên bản vẽ, vùng chọn lúc này chỉ có duy nhất cái block b_temp mà thôi. Phải không ạ???
Tiếp đó bác tạo thêm cái rectangle el1 để lấy boundary rồi xóa cái el1 này đi.
Như vậy trên bản vẽ về lý thuyết thì chỉ còn hai cái polyline được tạo ra bởi lệnh boundary mà thôi chứ bác. Một cái là của hình chữ nhật bao ngoài tạo ra, và một cái bao lấy biên dạng của block nằm bên trong hình chữ nhật bao đó.
Chính vì vậy mà bác mới giữ lại cái polyline có diện tích lớn thứ hai mà bác.
Vậy mà khi lấy (setq ss (ssget "w" p1 p2 (list (cons 0 "lwpolyline")))) thì lại xuất hiện các polyline nằm bên trong cái đường bao block nữa bác ạ. Mình đã thử bổ sung thêm thằng dxf 70 để chỉ chọn các polyline kín nó cũng vẫn chui vào. Mình đang nghĩ rằng hay là tại sau khi tạo block thì các đối tượng chỉ bị ẩn đi chứ không bị xóa hẳn. Do đó khi lấy tập chọn ss lần hai này nó lại lổm ngổm chui vào nằm ăn vạ hả bác. Nếu vậy có thể chơi một thằng (command "erase" ss "") sau khi tạo được block b_temp có được không bác hỉ???
Nếu được vậy có nhẽ sẽ tránh được các lỗi do mấy thằng polyline kím lõm có trong block gây ra như mình đã nói ở trên.
Mong bác quan tâm giải đáp giùm nhé.....
Thanks.

Để bác dễ hình dung, mình gửi bác cái kết quả kiểm tra quá trình chạy lisp của mình:
Đây là hình ảnh kết quả sau bước sắp xếp lại list lar bởi hàm (vl-sort.....)
Hình đã gửi
Các hình có màu vàng là mình đã di chuyển ra khỏi vùng chọn cho dễ nhìn.
Dưới đây là các ename của đối tượng màu vàng lấy từ ngoài vào trong (từ diện tích lớn nhất đến nhỏ nhất.)
Command: (car(entsel))

Select object:

Command: (car(entsel))

Select object:

Command: (car(entsel))

Select object:

Command: (car(entsel))

Select object:

Command: (car(entsel))

Select object:

Và đây là cái list lar được lấy ra sau khi đã sắp xếp để kiểm tra.

Command: !lar
((446497.0 ) (446497.0 )
(238269.0 ) (167058.0 ) (61075.0
))

Bác chú ý đối tượng có Entity name là là đối tượng đa giác lõm có diện tích nhỏ nhất trong các polyline kín. Vậy nhưng trong list lar thì nó lại đứng thứ 2 và có diện tích bằng với cái khung chữ nhật bao có diện tích lớn nhất là 446997.0 ???
Cũng vì vậy trong trường hợp này kết quả sẽ không có cái đường bao có entyti name là do nó đã bị xóa ở các bước tiếp theo bác ạ.

Tuy nhiên nếu bác insert một block b_temp khác rồi explode nó ra và chạy lisp thì nó lại cho kết quả khá ngon lành với cái list lar chỉ còn đúng hai đối tượng như mình đã nói phía trên.
Và đó là điều mình chưa hiểu nên mới mày mò tìm hiểu như trên.

Một phát hiện nữa của mình trong quá trình mày mò là khi bác dùng hàm (vla-get-area ob) thì diện tích lấy ra được làm tròn đến hàng đơn vị, còn nếu dùng (command "area" "o" .....) thì diện tích cho ra số lẻ tới 4 chữ số thập phân. Việc này tuy không quá quan trọng nhưng nếu bác giải thích được để mình nắm rõ hơn về các hàm này thì rất cám ơn bác.
Khi dùng hàm (command "area" "o" ...) thì mình có diện tích của đối tượng đa giác lõm là Area = 11477.3954 bác ạ. Theo mình nghĩ có nhẽ cái diện tích này mới là đúng của đa giác lõm.

Một điểm nữa có nhẽ bác nhầm trong lisp là việc lấy cái điểm p. Bác đặt (setq p (polar p1 (/ pi 4) 25)) theo mình phải là (setq p (polar p2 (/ pi 4) 25)) mới chuẩn bác ạ vì nếu lấy mốc p1 thì có thể p sẽ chui vào bên trong cái block của bác mất.

Hề hề hề, vì mình đang đi mót nên nếu có chỗ nào ngô nghê mong bác đừng cười và cố gắng giải thích giùm mình nhé.
Cám ơn bác nhiều....
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#2759 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6009 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 29 November 2010 - 11:29 AM

Theo tôi thì giải bài toán này cũng tương đối dễ thôi là như thế này :
1. Người dùng chọn điểm để tạo Boundary lô đất cần làm sổ thửa đất ==> tạo polyline A kín của thửa đất
2. Lấy list điểm dt A vừa tạo (ví dụ như n điểm)
3. Dùng hàm xác định vùng bắt điểm theo từng cạnh của lô đất. Ví dụ như lô đất có 6 điểm thì sẽ có (6-1)=5 vùng kín để chọn TEXT khoang vùng để chọn tên của người hàng xóm cùng lô đất
4. Lọc TEXT trong vùng chọn trên cơ sở chỉ chọn 1 TEXT có vị trí gần nhất cạnh chọn của lô đất ==> sẽ được TEXT tên hàng xóm
....
Bài toán ra như ý
Không biết là ý kiến các bác thế nào

Hề hề hề,
Ý tưởng của bác có nhẽ phải được thông báo với các nhà quy hoạch để họ biết mà làm cho đúng thì mới được bác ạ vì:
1/- Trong vùng chọn sẽ có nhiều text với các nội dung khác nhau, Vớ được anh gần cạnh nhất thì anh ấy lại chẳng phải tên chủ đất mà là cái diện tích thửa thì bác phải trình quốc hội để đổi tên ông hàng xóm hử bác???
2/-Có thể sẽ sót mấy ông hàng xóm nếu như thửa đất của ông ta chỉ giáp đỉnh với thửa bác đang xét bác ạ. Khi ấy có nhẽ lại kiện nhau to mất.
Thế nên mấy qnh quy hoạch phải:
1/- Quy hoạch sao để tại mỗi điểm góc ranh chỉ có không quá 3 thửa đất chung nhau???? hề hề hề, khó
2/- Quy hoạch xong thì phải đặt tên các ông chủ đất nằm sát với các cạnh thửa của ổng, nghĩa là mỗi thửa có bao nhiêu cạnh thì ổng phải phân thân ra làm bấy nhiêu mảnh để mà nằm cho bác dễ xoa đầu hỉ????

Hề hề hề, có chi thất thố mong bác chớ giận nha.....
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#2760 linhoreka

linhoreka

    biết lệnh erase

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

Đã gửi 29 November 2010 - 11:33 AM

Hic, topic chi mà dài 140 trang lận, vào chả biết đầu bài ở đâu ?
Đề nghị chia nhỏ ra theo đầu bài anh em mới đến mới hiểu các bác cãi nhau cái chi chứ !
  • 1