Chuyển đến nội dung
Diễn đàn CADViet
Đăng nhập để thực hiện theo  
Hoangvulandscape

[Đã xong] Lisp thống kê diện tích Hatch theo Layer

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

Ý 1 : Bạn đọc bài #42

Ý 2 : mình không hiểu lắm. bạn muốn mỗi lần tạo text lại phải pick xác định chiều cao ? Sao không làm hết 1 lượt rồi dùng các chức năng Match Properties, Ctrl + 1 .....

 

P/s1 : hatch, không phải hack, cẩn thận k đi tù đấy bạn ơi :)

P/s2 : lisp bạn post là lisp nguyên thủy, trên thực tế đã thay đổi qua nhiều version r, bạn đọc kỹ lại topic nhé :)

 

Ý 1: Mình không thấy Bạn đọc bài #42 là sao?

Y 2: Tại vì mình sưu tập được 1 lisp tính diện tích và chu vi kiểu như vậy nên mới nhờ bạn giúp :D

Thực ra ý mình là bỏ chữ của layers đầu tiên đi và khi chọn điểm để xuất kết quả là di chuột như scan text (chứ nó xuất mặc định nhiều khi phải scan hoặc zoom lê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

Thục sự là ..

 

1. Bạn đọc bài #42 tức là bạn kéo đến bài số 42 trong topic này để đọc, vì mình đã trả lời câu đó rồi. Số # nhìn ở phía tay phải mỗi bài viết

2. Đây là lisp tính diện tích hatch theo layer, tức là có thể có nhiều hatch thuộc nhiều layer -> thao tác pick điểm đặt text để xuất ra màn hình có thể phải làm nhiều lần. Bạn muốn mình khi xuất ra thì cho phép bạn pick điểm để định chiều cao cho nó, nên mình hỏi lại : Mỗi lần đặt text lại làm như vậy hay làm 1 lần ngay từ đầu. Câu hỏi vậy rõ chưa bạ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ác bác ơi! sao em dùng tkh để tính mà ko được ! nó cho kết quả bằng 0 hết! e có làm thử trên một cái file khác cũng vậy! các bác xem ntn rồi chỉ giáo giúp e với! tks các bác nhiều!http://www.cadviet.com/upfiles/3/60593_drawing1_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

Mình gặp phải 1 vấn đề khi dùng list là diện tích ghi là 0.04 m2, trong khi đó diện tích thực là 37123.42 @@ sao lại vậy nhỉ. Đơn vị bản vẽ của mình để hệ milimeters

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 gặp phải 1 vấn đề khi dùng list là diện tích ghi là 0.04 m2, trong khi đó diện tích thực là 37123.42 @@ sao lại vậy nhỉ. Đơn vị bản vẽ của mình để hệ milimeters

Bạn tìm trong lisp con số 0.000001

và sửa lại là 1

  • 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

tại sao mình dùng lisp này thì nó cứ cho ra area =0 nhỉ ? mọi ng giải đáp hộ e với

mình cũng bị giống bác này. diện tích ra = 0 hết mà trong khi hatch đó có area mà. bác nào giải quyết giúp em với em đang cần gấp :(

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

Mình thấy lisp này rất hay. Mình là dân khai thác mỏ, mình muốn các bác hỗ trợ cho mình thêm phần này 1 tý nữa. Mình chỉ muốn tính diện tích trong khu vực khai thác và nhất là thống kê theo tầng (mỗi 1 mặt cắt có tầng tính khác nhau). Xin cảm ơn rất nhiều. 

file đính kèm http://www.cadviet.com/upfiles/3/8800_hung.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ạn muốn thì bạn cần phải thuê, hoặc bạn cần giúp thì bạn phải có file miêu tả :) Chứ nhõn cái lời bạn nói, k ai làm được đâ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ảm ơn bạn Ketxu, mình mới tham gia diễn đàn nên chưa rõ nhiều điều, bạn có thể viết giúp mình lisp xuất dữ liệu (geometry) trong cad ra excel với nội dung xuất tọa độ của các : Line, PLine, Polyline, Point, hatch (X, Y, Z, diện tích với vùng từng vùng hatch) http://www.cadviet.com/upfiles/3/54457_ban_ve_trien_khai.dwg

Cảm ơn bạn nhiề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

 

Mình không nhận các chữ pro của bạn được, vì mình không phải thế ^^.Và lisp viết theo yêu cầu của Hoangvu, vì vậy bạn không nên nói như nào là pro hơn, mà đó chỉ là cách bạn cảm thấy tiện hơn cho công việc của bạn thôi.Mà việc đó bạn dùng Qselect cũng được smile.gif

Lisp sửa lại theo yêu cầu của bạn ( cũng vì thế mà đã chọn là tính hết, khỏi chọn vùng luôn )

 

(defun c:tkh (/ lst msp pt ss lay ar txtsiz pt ent)
  (if (> (atof (substr (getvar "ACADVER") 1 4)) 16.1)
  (progn
  (vl-load-com)
  (acet-sysvar-set (list "cmdecho" 0))
  (grtext -1 "S\U+01A1n T\U+00F9ng' Lisp")  
  (if (setq ent (car (entsel "\nCh\U+1ECDn Hatch \U+0111i\U+1EC3n h\U+00ECnh : ")))
  (progn
   (setq ss (ssget "X" (list (cons 0 "HATCH")(cons 8 (vla-get-layer (vlax-ename->vla-object ent))))))    
      (foreach e (mapcar 'vlax-ename->vla-object (st-ss->ent ss))
		(setq lay (vlax-get-property e 'Layer)) 
        (if (not (vl-catch-all-error-p (vl-catch-all-apply 'vla-get-area (list e))))
(setq ar (*  0.000001 (vlax-get-property e 'Area)))
(progn
(setq ar 0)(princ (strcat "\nC\U+00F3 Hatch thu\U+1ED9c layer " lay " kh\U+00F4ng t\U+00EDnh \U+0111\U+01B0\U+1EE3c di\U+1EC7n t\U+00EDch.\n\U+0110\U+00E3 highlight v\U+00E0 t\U+00EDnh di\U+1EC7n t\U+00EDch b\U+1EB1ng 0"))
(redraw (vlax-vla-object->ename e) 3)
)
)
        (if (not (assoc lay lst))
          (setq lst (cons (cons lay ar) lst))
          (setq lst (subst (cons lay (+ ar (cdr (assoc lay lst))))
                           (assoc lay lst) lst))))
      (setq lst (vl-sort lst '(lambda (x y) (< (car x) (car y))))
		
            txtsiz (* (getvar "dimtxt")(getvar "dimscale"))
            msp (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object))) i -1)
			
      (while (setq e (nth (setq i (1+ i)) lst)) 
        (wtxt_l (strcat (car e) " : " (rtos (cdr e) 2 2) "m2") '(0 0 0))
(setq pt (ACET-SS-DRAG-MOVE (ssadd (entlast)) '(0 0 0) (strcat "\n\U+0110i\U+1EC3m \U+0111\U+1EB7t ghi ch\U+00FA t\U+1ED5ng di\U+1EC7n t\U+00EDch Hatch thu\U+1ED9c layer " (car e))))
(command ".move" (entlast) "" '(0 0 0) pt)
)
(princ "\n\U+0110\U+00E3 th\U+1EF1c hi\U+1EC7n xong !")
)
    (alert "Kh\U+00F4ng c\U+00F3 Hatch n\U+00E0o \U+0111\U+01B0\U+1EE3c ch\U+1ECDn !"))
)
(alert "Phi\U+00EAn b\U+1EA3n CAD c\U+1EE7a b\U+1EA1n kh\U+00F4ng h\U+1ED7 tr\U+1EE3 t\U+00EDnh di\U+1EC7n t\U+00EDch Hatch !")
)
  (acet-sysvar-restore)(princ))
  (defun st-ss->ent (ss / n e l)
  (setq n -1)
  (while (setq e (ssname ss (setq n (1+ n))))
    (setq l (cons e l))
  )
)
(defun wtxt_l(txt p / sty d h1 h2 wf h);;;Write txt on graphic screen at p
(setq    sty (getvar "textstyle")
d (tblsearch "style" sty)
h1 (cdr (assoc 40 d))
h2 (cdr (assoc 42 d))
wf (cdr (assoc 41 d)))
(if (> h1 0) (setq h h1) (setq h h2))
(entmake (list (cons 0 "TEXT") (cons 7 sty) (cons 40 h) (cons 41 wf)(cons 72 1)(cons 11 p) (cons 1 txt) (cons 10 p))))
P/S : lisp có 2 biến txtsiz với msp thừa quên chưa xóa, mà để cũng không sao ^^

Bạn có thể sửa lại không ketxu lisp này có  2 cái bất tiện:

1.Điểm đặt text giá trị bị nhảy xa tí mù tắp (nếu mà bản vẽ nặng chắc mình  kg biết nó ở đâu nữa)

2.Các vị trí đều nhảy về 1 điểm mà kg ra bảng thống kê,có theo tên layer nhưng kg phân tách rời mà gộp tất làm 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

Mình bắt đầu có việc phải quan tâm tới hatch. Mình thấy các lisp ở tính diện tích Hatch rất hay nhưng khá chậm, đôi lúc đến vài chục phút khi gặp hatch nhiều điểm và lỗ hổng. Có cách nàu cải thiện được vấn đề?

Trước nay mình chưa nghiên cứu về Hatch nên hơi lạc hậu, các bạn đã rành cho mình hỏi tý:

- Làm các nào tính tọa độ đường bao của đồi tượng phức tạp thành danh sách tọa độ đủ chính xác (ý mình nói nếu gặp đường cong thì phân nhỏ ra) để tính diện tích có sai số không đáng kể khi tính bằng lệnh area của cad

- Làm các nào tính danh sách tọa độ các đường bao (ngoài và trong) nguyên thủy tạo nên Hatch với yêu cầu như trên.

Cám ơn các bạ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

1). Hơi khó hiểu ở chỗ "đường bao của đối tượng phức tạp"?

2). Có thể dùng lisp theo link dưới đây để vẽ các đường bao của hatch. Sau đó vi phân các đường bao để tính tọa độ.

http://www.cadviet.com/forum/index.php?showtopic=51566

  • 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

Vài chục phút thì quả là khủng rồi đây. Có điều hình như lisp ket viết là đọc diện tích chứ có tính đâu ta ^^

  • 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

Mình trả lời chung cho hai bạn.

1/ Đường bao phức tạp có ý là hatch tạo bởi từ một số đối tượng bao khác line như đg tròn, elip hay spline ...

2/ Mình down hai lisp tkh và tkh1 về, một cái chạy được còn một cái thiếu hàm gì đó.

Mình nghĩ cad không có thuộc tính diện tích, môi lần kích vào đối tượng cho hiện diện tích lên khung properties thì nó mới tính, thời gian hiện trên khung này tương đương thời gian tính bằng lệnh area. Có lẽ các bạn chưa thử trên bảv vẻ có nhiều hatch như hệ thống giao thông thuỷ hệ của một huyện. Lúc đầu mình dùng cad2006 vào vài lần với hatch nhỏ thì được, sau đó vào hatch lớn hơn nó treo luôn, bây giờ đụng vào hatch lơn nhỏ gì nó cũng thoát chương trình ngang xương, có lẽ cad nó sợ hatch. Sau đó mình dùng cad 2013, 2015 cũng rất chậm

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

File lisp này vẽ đường bao của Hatch ngon ơ. Từ các đường bao thì vi phân chúng sẽ được các list điểm.


(defun c:bh1( / sl n)
  (setq sl (acet-ss-to-list (ssget '((0 . "HATCH")))))
  (foreach n sl
    (command "hatchedit" n "b" "p" "y")))
(defun c:bh2 ()
  (princ "\nCh\U+1ECDn c\U+00E1c Hatch c\U+1EA7n t\U+1EA1o l\U+1EA1i Boundary : ")
  ((lambda (ss / n e) 
(setq n (sslength ss))
(while (setq e (ssname ss (setq n (1- n))))
(command "-hatchedit" e "B" "P" "")))
(ssget (list (cons 0 "HATCH")))))
 

  • 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

File lisp này vẽ đường bao của Hatch ngon ơ. Từ các đường bao thì vi phân chúng sẽ được các list điểm.


(defun c:bh1( / sl n)
  (setq sl (acet-ss-to-list (ssget '((0 . "HATCH")))))
  (foreach n sl
    (command "hatchedit" n "b" "p" "y")))
(defun c:bh2 ()
  (princ "\nCh\U+1ECDn c\U+00E1c Hatch c\U+1EA7n t\U+1EA1o l\U+1EA1i Boundary : ")
  ((lambda (ss / n e) 
(setq n (sslength ss))
(while (setq e (ssname ss (setq n (1- n))))
(command "-hatchedit" e "B" "P" "")))
(ssget (list (cons 0 "HATCH")))))
 

Hình như nó chạy kg đúng đâu bác với file mình up đây

http://www.cadviet.com/upfiles/3/37170_h1_2.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

Cái file của bác thì pick chọn không đã chết rồi. Hatch không Associative, chưa kể save 1 2 lần thì cũng toi luôn cả thuộc tính Area chứ k còn j mà đọc ^^

Chuyện Hatch lỗi rất hay gặp thô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

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
Đăng nhập để thực hiện theo  

×