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

làm thế nào để nối hatch???

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

Các bạn cho tớ hỏi là nếu tớ có 3 cái hatch rời mà muốn + vào nhau( kiểu như merg layer ấy ) thì làm thế nào?

cái này giúp cho bản vẽ sạch sẽ hơn ấy mà.

  • 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
Hoành cho tớ hỏi là nếu tớ có 3 cái hatch rời mà muốn + vào nhau( kiểu như merg layer ấy ) thì làm thế nào?

cái này giúp cho bản vẽ sạch sẽ hơn ấy mà.

Bạn vào đây để tham khảo

http://www.cadviet.com/forum/index.php?sho...18

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 đã tìm rồi, không thấy trong topic đấy. Nhờ Hoành xử lý cho vụ này nhé????. Cái này rất quan trọng , không những giúp bản vẽ sạch sẽ hơn mà còn giúp khi tính diện tích của nhiều hatch 1 lúc mà không mát công ngồi cộng = máy tính ngoà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ôi đã tìm rồi, không thấy trong topic đấy. Nhờ Hoành xử lý cho vụ này nhé????. Cái này rất quan trọng , không những giúp bản vẽ sạch sẽ hơn mà còn giúp khi tính diện tích của nhiều hatch 1 lúc mà không mát công ngồi cộng = máy tính ngoài.

Cái này trong ACAD không có sẵn.

 

Bạn thử làm theo các bước sau:

1. Bạn hãy dùng lisp CHB ở đây: http://www.cadviet.com/forum/index.php?sho...3entry973 để tạo các đường biên từ các hatch rời.

2. Dùng lệnh BHATCH để tạo 1 đối tượng hatch mới từ các đường biên đã chọn.

3. rồi xóa các hach rời cũ và đường biên đ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 trong ACAD không có sẵn.

 

Bạn thử làm theo các bước sau:

1. Bạn hãy dùng lisp CHB ở đây: http://www.cadviet.com/forum/index.php?sho...3entry973 để tạo các đường biên từ các hatch rời.

2. Dùng lệnh BHATCH để tạo 1 đối tượng hatch mới từ các đường biên đã chọn.

3. rồi xóa các hach rời cũ và đường biên đi.

 

 

Tớ vẫn thường làm như vậy nhưng mất thời gian 1 chút, nhưng lý do tớ post câu hỏi ở chuyên mục lisp là hỏi bạn có cái lisp nào làm công việc này không???? Tức là chỉ nhập lệnh, chọn các hatch và ok, các hatch đã được merg.

Hoành có thể giúp người sử dụng acad ở diễn đàn 1 lisp như vậy ko????

Rất cám ơn Hoanh!

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ớ vẫn thường làm như vậy nhưng mất thời gian 1 chút, nhưng lý do tớ post câu hỏi ở chuyên mục lisp là hỏi bạn có cái lisp nào làm công việc này không???? Tức là chỉ nhập lệnh, chọn các hatch và ok, các hatch đã được merg.

Hoành có thể giúp người sử dụng acad ở diễn đàn 1 lisp như vậy ko????

Rất cám ơn Hoanh!

Lệnh MH (Merge Hatch) dưới đây sẽ thực hiện điều bạn muốn.

Chương trình yêu cầu người sử select các hatch, sau đó nối chúng lại với nhau thành 1 hatch đơn nhất.

 

Thuộc tính (layer, màu, kiểu hatch, ...) của hatch kết quả được lấy theo đối tượng hactch đầu tiên. Mẹo: Khi các hatch không giống nhau, muốn đối tượng sau khi merge giống hatch nào thì nên pick hatch đó đầu tiên, sau đó mới select các hatch khác.

 

(defun c:mh (/ ss entht sl i dt dtht)
 (princ "\nMerge Hatch - free lisp from CADViet.com")
 (setq
   ss (ssget '((0 . "HATCH")))
   sl (if ss
 (sslength ss)
 0
      )
   i  0
   l  0
 )
 (repeat sl
   (setq
     entht (ssname ss i)
     dtht  (getbdata entht)
     dt    (append dt dtht)
     l	    (+ l (cdr (assoc 91 (entget entht))))
     i	    (1+ i)
   )
 )
 (setq	ent  (ssname ss 0)
ss   (ssdel ent ss)
tt   (entget ent)
duoi (member (assoc 75 tt) tt)
dau  (reverse (member (assoc 91 tt) (reverse tt)))
tt   (append dau dt duoi)
tt   (subst (cons 91 l) (assoc 91 tt) tt)
 )
 (entmod tt)
 (command ".erase" ss "")
 (princ)
)
(defun getbdata	(ent)
 (setq	tt (entget ent)
tt (cdr (member (assoc 75 tt) (reverse tt)))
tt (cdr (member (assoc 91 tt) (reverse tt)))
 )
)
(princ "\nMerge Hatch is loaded, please type MH to start!")
(princ)

  • Like 1
  • Vote tăng 11

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 Hoành có thể sửa được lỗi này không: khi các hatch giao nhau, ta dùng lệnh merge hatch thì tại các khoảng giao nhau đó sẽ thành khoảng trắng. (ý em là phải union hach kia chứ không phải merge hatch :) )

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 Hoành có thể sửa được lỗi này không: khi các hatch giao nhau, ta dùng lệnh merge hatch thì tại các khoảng giao nhau đó sẽ thành khoảng trắng. (ý em là phải union hach kia chứ không phải merge hatch :mellow: )

Cái này sao không thấy bác nào quan tâm nhỉ??1 bài toán bị bỏ ngỏ.Em cũng đã thử và thực sự khi 2 hatch chồng lên nhau thì khi merg hatch sẽ bị lỗi khoảng trống ở chỗ hatch! :mellow:

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 sao không thấy bác nào quan tâm nhỉ??1 bài toán bị bỏ ngỏ.Em cũng đã thử và thực sự khi 2 hatch chồng lên nhau thì khi merg hatch sẽ bị lỗi khoảng trống ở chỗ hatch! :mellow:

Theo mình thì tạm thời giả quyết bằng cách:

-Tạo biên từ hatch.

-Trim phần chồng lên nhau.

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
Lệnh MH (Merge Hatch) dưới đây sẽ thực hiện điều bạn muốn.

Chương trình yêu cầu người sử select các hatch, sau đó nối chúng lại với nhau thành 1 hatch đơn nhất.

 

Thuộc tính (layer, màu, kiểu hatch, ...) của hatch kết quả được lấy theo đối tượng hactch đầu tiên. Mẹo: Khi các hatch không giống nhau, muốn đối tượng sau khi merge giống hatch nào thì nên pick hatch đó đầu tiên, sau đó mới select các hatch khác.

 

(defun c:mh (/ ss entht sl i dt dtht)
 (princ "\nMerge Hatch - free lisp from CADViet.com")
 (setq
   ss (ssget '((0 . "HATCH")))
   sl (if ss
 (sslength ss)
 0
      )
   i  0
   l  0
 )
 (repeat sl
   (setq
     entht (ssname ss i)
     dtht  (getbdata entht)
     dt    (append dt dtht)
     l	    (+ l (cdr (assoc 91 (entget entht))))
     i	    (1+ i)
   )
 )
 (setq	ent  (ssname ss 0)
ss   (ssdel ent ss)
tt   (entget ent)
duoi (member (assoc 75 tt) tt)
dau  (reverse (member (assoc 91 tt) (reverse tt)))
tt   (append dau dt duoi)
tt   (subst (cons 91 l) (assoc 91 tt) tt)
 )
 (entmod tt)
 (command ".erase" ss "")
 (princ)
)
(defun getbdata	(ent)
 (setq	tt (entget ent)
tt (cdr (member (assoc 75 tt) (reverse tt)))
tt (cdr (member (assoc 91 tt) (reverse tt)))
 )
)
(princ "\nMerge Hatch is loaded, please type MH to start!")
(princ)

Cám ơn bác hoành rất nhiều

Em đã đọc rất nhiều bài post của bác trên mạng và rất phục bác

Em cũng đang giai đoạn tìm hiểu về lisp và ứng dụng cho chuyên ngành của mình

Em là dân Trắc Địa bác ạ nên cần phải năng động cho lĩnh vực xử lý tính toán số liệu của mình

Em rất mong bác giúp đỡ em một số bài toán mà em đang vướng mắc

Bác có thể nêu cấu trúc đọc từng dòng của 1 file dữ liệu với một vài kiểu khuôn dạng trong từng dòng

VD đọc dữ liệu với 3 dòng được lặp đi lặp lại:

dòng 1: kiểu a

dòng 2 Kiể b

dòng 3 Kiểu c

dòng 4: kiểu a

dòng 5 Kiể b

dòng 6 Kiểu c

.....

 

Tiện thể bác có thế giúp em lập trình một hàm tách xâu ký tự trên một dòng mà các số liệu được phân biệt bởi dấu cách,hoặc dấu tab, hoặc dấu phẩy

VD dấu tab

1 1035846.246 597526.601 -1.23

2 1035853.471 597526.324 -2.09

3 1035862.06 597523.732 -2.93

VD dấu cách

1 1035846.246 597526.601 -1.23

2 1035853.471 597526.324 -2.09

3 1035862.06 597523.732 -2.93

VD dấu phẩy

1,1035846.246,597526.601,-1.23

2,1035853.471,597526.324,-2.09

3,1035862.06,597523.732,-2.93

 

Em cảm ơn bác rất nhiều

Có gì bác có thể gửi cho em tài liệu hoặc câu trả lời qua Email : thanhduan_mda@yahoo.com

Em chân thành cảm ơn bá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

Em cũng là dân kỹ thuật đây, theo em thì bác chỉnh sửa file từ máy toàn đạc ra có phải không?

Cái này cũng dễ thôi bác ơi, không cần dùng lisp đâu

Định dạng này bác cứ chuyển qua Notepad lưu xuống file *.txt

Sau đó dùng EXCEL mở file *.TXT

Chọn đánh dấu các mục Tab, Space,... và tại vị trí Other bác thêm chữ , là được

Excel sẽ tạo cho bác 4 cột 3 dòng như ý và bác cứ xóa các dòng không như mong muốn, chỉnh sửa số tùy thích

Sau đó, chọn vùng dữ liệu

Bấm Ctrl+C

Qua Notepad bấm Ctrl+V sẽ được định dạng như ý

Có j không hiểu bác cứ pm

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

Lisp này không hoạt động trong trường hợp sau:

mh.gif

Cụ thể: Khi lựa chọn tập đối tượng thì đối tượng hatch đầu tiên tạo ra từ (command "-bhatch" "S" (ssget) "" ""), các đối tượng hatch chọn sau thì tạo bằng cách Pick điểm

Lưu ý thứ tự khi chọn phải như vậy, nếu chon thứ tự ngược lại thì lại không bị lỗi

Mình gởi file đính kèm

Mong tác giả và các anh em giải thích và giải quyết 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

Bác Hoành có thể sửa được lỗi này không: khi các hatch giao nhau, ta dùng lệnh merge hatch thì tại các khoảng giao nhau đó sẽ thành khoảng trắng. (ý em là phải union hach kia chứ không phải merge hatch undecided.gif )

Bạn dùng thử MergeHatch sau của hmsilva

http://forums.autodesk.com/t5/Visual-LISP-AutoLISP-and-General/Hatch-merge-split/td-p/3823971

(defun c:test (/ ss zer ss1 hpb olde itm ent bou ss2)
  (alert
    "\n            Select hatch to Merge.\n\nFirst one will be the Properties Source."
  )
  (if (setq ss (ssget ":L" '((0 . "HATCH"))))
    (progn
      (command "_.undo" "_BE")
      (setq olde (getvar 'cmdecho)
	    hpb	 (getvar 'hpbound)
	    itm	 -1
	    ss1	 (ssadd)
	    zer	 (entlast)
      )
      (ssadd zer ss1)
      (setvar 'hpbound 0)
      (setvar 'cmdecho 0)
      (while
	(setq ent (ssname ss (setq itm (1+ itm))))
	 (command ".-hatchedit" ent "b" "r" "y")
      );; while
      (while
	(setq zer (entnext zer))
	 (ssadd zer ss1)
      );; while
      (ssdel (ssname ss1 0) ss1)
      (command "_.union" ss1 "")
      (setq bou (entlast))
      (command "_.hatch" "solid" "l" "")
      (setq ss2 (ssget "_L"))
      (command "_.copy"
	       (ssname ss 0)
	       ""
	       "0,0,0"
	       "0,0,0"
	       "_.erase"
	       "p"
	       ""
	       "_.matchprop"
	       "L"
	       ss2
	       ""
	       "_.draworder"
	       ss2
	       ""
	       "b"
	       "_.erase"
	       "L"
	       bou
	       ss
	       ""
      )
    );; progn
  );; if
  (command "_.undo" "_E")
  (setvar 'hpbound hpb)
  (setvar 'cmdecho olde)
  (princ)
);; test
  • 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

 

Lisp này không hoạt động trong trường hợp sau:

mh.gif

Cụ thể: Khi lựa chọn tập đối tượng thì đối tượng hatch đầu tiên tạo ra từ (command "-bhatch" "S" (ssget) "" ""), các đối tượng hatch chọn sau thì tạo bằng cách Pick điểm

Lưu ý thứ tự khi chọn phải như vậy, nếu chon thứ tự ngược lại thì lại không bị lỗi

Mình gởi file đính kèm http://www.cadviet.c..._goicadviet.dwg

Mong tác giả và các anh em giải thích và giải quyết giúp.

 

Theo em Hoằn thì có thể làm thủ công kiểu Hai Lúa như sau:

1)-  Gõ lệnh E để xóa hatch 2 và 3

2)- Gõ HE

3)- Pick đối tượng hatch1 >>>Hiện bảng Hatch Edit >>> Pick chọn ô Add Pick points (Pick an Intrernal point

4) Pick chọn vùng hatch 2 và 3 >>> Xong!

 

Command: e ERASE 2 found

Hatch boundary associativity removed.

Hatch boundary associativity removed.

Command: He HATCHEDIT

Select hatch object:

Pick internal point or [select objects/remove Boundaries]: Selecting everything...

Selecting everything visible...

Analyzing the selected data...

Analyzing internal islands...

Pick internal point or [select objects/remove Boundaries]: Selecting everything...

Selecting everything visible...

Analyzing the selected data...

Analyzing internal islands...

Pick internal point or [select objects/remove Boundaries]:

Command: *Cancel*

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

xin chào mọi người, tôi đang gặp phải một bài toán khó khi cố gắng gộp các vùng hatch riêng lẻ thành 1 đối tượng hatch để phục vụ cho lệnh "aa" để tính tổng diện tích các cùng hatch đó. Tôi đã thử dùng lisp của anh Nguyen Hoanh đã đề cập phía trên nhưng sau khi dùng lệnh thì toàn bộ hatch bị xoá hết, tôi mong mọi người lý giải giúp tôi tại sao lại như vậy:

Paving.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
1 giờ} trướ}c, 7o7 đã nói:

Nó không bị xóa, nó vẫn còn đó. Bạn Ctrl-A sẽ thấy. Bạn đổi pattern name khác và đổi linetype scale nhỏ nó mới hiện ra.

không hề đúng như bạn nói, tôi đã thử như vậy

  • Vote giả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

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

×