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

[ yêu cầu ] lisp đo khoảng cách dán bào block att

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

em đang làm mấy công tác liên quan đến đo khoảng cách ,

vì làm thủ công lâu nên e đã nghĩ ra làm cái block động có thể vận dụng mọi thứ .

nhưng cái khoảng cách ko khắc phục dc nên em viết yêu cầu này nhờ các anh .

lisp có thể đo theo 3 phương X Y đường chéo

thực thi lệnh thì líp hỏi đo theo phương nào

nếu theo phương cũ có thể bỏ qua bằng dấu cách .

đo xong hỏi chọn block cần điền , chọn att cần điền ( có thể có nhiều att )

kết thúc .

các anh hãy viết trường hợp chung nhất cho tất cả anh em dc dùng .

cảm ơn các anhhttp://www.cadviet.com/upfiles/3/113313_drawing1_1.dwg113313_1.png

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). Khái niệm đo khoảng cách: là k/c 2 điểm hay là chiều dài line, hay là chiều dài curve. Nếu vậy thì cần gì phải hỏi phương đo.

2). Add từng khoảng cách vào từng att, hay add khoảng cách cho tất cả?

3). Chọn block để làm gì? Chỉ cần chọn att được không?

4). File bản vẽ minh họa?

v.v... và v.v...

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

e đã cho file lên đó rồi . khoảng cách tốt nhất là pick điểm ,

add khoảng cách đo từng đoạn 1 vào 1 att

chỉ cần chọn att cũng dc miễn là cái att nằm trong block dc chọn nhảy số .

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 nghĩ nếu chọn khoảng cách bằng pick điểm thì chắc phải chọn phương, vì đôi khi chọn pick điểm thì chưa chắc 2 điểm đã thẳng hàng ?!

@ traimientay trong bản vẽ của bạn lúc nào cũng có cái đường màu trắng đó ah? nếu có thì giải quyết bài toán của bạn nhanh hơ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

Command Dim -> Lấy Entlast Measurement -> Pick vào Att -> Thay đổi giá trị -> del entlast (nếu cần). Cái này chắc bác Hạ đã viết xong từ lúc chủ topic còn chưa kịp upload, chỉ là chờ cầu trả lời về phương mà 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

thực ra em muốn chọn phương để khống chế sai số phát sinh khối lượng . nếu ko chọn phương thì mình phải bắt điểm chính xác , khối lượng thao tác tương đương nhau . chon phương nó chắc cú hơn về khối lượng , nhưng cái ko chọn phương chỉ chọn điểm trên bản vẽ bằng cách bắt điểm nó rèn luyện kỹ năng và trách nhiệm công việc . chắc e chọn hướng đi chỉ cần bắt điểm ko cần chọn phương . chỉ cần 2 vị trí trên bản vẽ là ok . các anh có thể phát triển cho text và mtext luôn cũng dc . trong 1 lisp mà làm dc trọn gói . mọi người có thể dùng lisp đa năng

còn cái đường màu trắng là để minh họa thôi anh à.

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ách bắt điểm nó rèn luyện kỹ năng và trách nhiệm công việc . chắc e chọn hướng đi chỉ cần bắt điểm ko cần chọn phương . chỉ cần 2 vị trí trên bản vẽ là ok . các anh có thể phát triển cho text và mtext luôn cũng dc . trong 1 lisp mà làm dc trọn gói . mọi người có thể dùng lisp đa năng

còn cái đường màu trắng là để minh họa thôi anh à.

;Doan Van Ha - CADViet.com - Ngay 26/10/2012
;Muc dich: add dimension vao att
(defun C:HA( / p1 p2 ent data obj tag lst len)
(vl-load-com)
(while
 (and
  (setq p1 (getpoint "\nChon diem P1: "))
  (setq p2 (getpoint P1 "\nChon diem P2: "))
  (setq ent (nentsel "\nChon Attribute: ")))
 (setq obj (vlax-ename->vla-object (cdr (assoc 330 (setq data (entget (car ent)))))))
 (setq tag (cdr (assoc 2 data)))
 (setq lst (list (cons tag (setq len (rtos (distance p1 p2) 2 2)))))
 (foreach att (setq atts (vlax-safearray->list (vlax-variant-value (vla-getattributes obj))))
  (if (= (vla-get-tagstring att) tag)
   (vla-put-textstring att len)))
 (vla-update obj)))

  • 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

bạn text thử thế nào

(defun c:muong(/ dz p1 p2 bl dis)
(setq dz (getvar "dimzin"))
(while (setq p1 (getpoint "\nchon diem 1:"))
(setq p2 (getpoint p1 "\nchon diem 2:")
bl (entget(entnext(entnext(car(entsel)))))
)
(setvar "dimzin" 4)
(setq dis (rtos (distance p1 p2) 2 2))
(setq bl (subst (cons 1 dis) (assoc 1 bl) bl))
(entmod bl)
)
(setvar "dimzin" dz)
(princ)
)

 

ở đây mình bỏ qua chọn phương vì mình nghĩ không cần thiết, và bạn có thể bật tắt F8 (chế độ othor) để chọn điểm như khi vẽ line vậy thôi.

  • 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

e vẫn bị khóa like . thực ra là e có cái lisp khoảng cách cho text nhưng nó hơi gà chỉ cho text ko cho att . nên e nghĩ đến việc gộp chung cho anh em dùng . chứ như em có att rồi lại thêm text . người khác ko có phải mò cả 2 cũng khổ . vì e cũng đi mò và tìm kiếm nhiều rồi nên e biết .

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­ười ta yêu cầu như thế nào chỉ mần vậy thui các bác :)

(defun c:linhtinh(/ a)(vl-load-com)
(vla-put-textstring
 (vlax-ename->vla-object (car(nentsel "\nThay gia tri vao dau day ?")))
 (rtos (distance (setq a (getpoint "\nP1 :"))(getpoint a "\nP2 :")) 2 2)
)
(command "regen")
)

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

e vẫn bị khóa like . thực ra là e có cái lisp khoảng cách cho text nhưng nó hơi gà chỉ cho text ko cho att . nên e nghĩ đến việc gộp chung cho anh em dùng . chứ như em có att rồi lại thêm text . người khác ko có phải mò cả 2 cũng khổ . vì e cũng đi mò và tìm kiếm nhiều rồi nên e biết .

Đừng đem các lisper ra làm thí nghiệm nhé 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

e ko bao giờ có ý định như bác hà nói . e rất tôn trọng mọi người và cũng chẳng bao giờ đưa ai ra làm chuột bạch . mình ko tôn trọng người khác thì mình chinh là chuột bạch đầu tiên chứ ko phải người khác .

e chân thành cảm ơn anh em đã giúp đỡ em .

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 xin chào cả nhà e là thành viên mới của diễn đàn, e có việc này muốn nhờ các cao nhân giúp đỡ, nói thật lisp e chỉ biết sử dụng thôi chứ còn viết chép gì thì chịu thua, e có tải  lisp của bác DOAN VAN HA về lisp lấy khoảng cách giữa 2 điểm rồi chèn vào block att .Tuy nhiên em muốn mấy a đặt biệt là bác Ha giúp e viết lại đoạn code giúp e: "Lấy khoảng cách tổng của nhiều điểm P1,P2, P3, Pn bằng cách pick chuột, lấy kết quả theo hệ mét chèn vào block att. Rất mong mọi người giúp đỡ e, e cảm ơn.http://www.cadviet.com/upfiles/7/160653_lay_khcach_chen_vao_attkc_1.lsp

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 xin chào cả nhà e là thành viên mới của diễn đàn, e có việc này muốn nhờ các cao nhân giúp đỡ, nói thật lisp e chỉ biết sử dụng thôi chứ còn viết chép gì thì chịu thua, e có tải  lisp của bác DOAN VAN HA về lisp lấy khoảng cách giữa 2 điểm rồi chèn vào block att .Tuy nhiên em muốn mấy a đặt biệt là bác Ha giúp e viết lại đoạn code giúp e: "Lấy khoảng cách tổng của nhiều điểm P1,P2, P3, Pn bằng cách pick chuột, lấy kết quả theo hệ mét chèn vào block att. Rất mong mọi người giúp đỡ e, e cảm ơn.http://www.cadviet.com/upfiles/7/160653_lay_khcach_chen_vao_attkc_1.lsp

Sửa nhanh chút thôi ^_^

(defun C:KC1 (/ p lst_p sum ent data obj tag lst len)

  (vl-load-com)

  (setq lst_p nil sum 0)

  (while (setq p (getpoint "\nChon diem : "))
    (setq lst_p (cons p lst_p))
  )
  (setq sum (apply '+ (mapcar 'distance lst_p (cdr lst_p))))

  (setq ent (nentsel "\nChon Attribute: "))

  (setq	obj (vlax-ename->vla-object
	      (cdr (assoc 330 (setq data (entget (car ent)))))
	    )
  )
  (setq tag (cdr (assoc 2 data)))

  (setq lst (list (cons tag (setq len (strcat (rtos (/ sum 1000.) 2 0) " m.")))))

  (foreach att (setq atts (vlax-safearray->list
			    (vlax-variant-value (vla-getattributes obj))
			  )
	       )

    (if	(= (vla-get-tagstring att) tag)

      (vla-put-textstring att len)
    )
  )

  (vla-update obj)
)

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

p/S Do công việc tính chiều dài dây điện, với lisp của bác BEE trên thì tính tổng được chiều dài dây trên mặt bằng rất ok, hic còn trên mặt đứng nữa. Vậy đã nhờ bác BEE rồi thì e nhờ bác 1 lần nữa bác giúp e sửa lisp 1 chút. Bác thêm một dòng lệnh là "Nhập thêm hằng số cộng vào tổng:" sau khi chọn pick điểm xong, để cộng thêm hằng số đó vào cái tổng chiều dài trên. Như vậy chiều dài dây từ bảng điện lên tới đèn mới giải quyết được. mong bác ra tay giúp e xin chân thành cảm ơn.

  • 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

p/S Do công việc tính chiều dài dây điện, với lisp của bác BEE trên thì tính tổng được chiều dài dây trên mặt bằng rất ok, hic còn trên mặt đứng nữa. Vậy đã nhờ bác BEE rồi thì e nhờ bác 1 lần nữa bác giúp e sửa lisp 1 chút. Bác thêm một dòng lệnh là "Nhập thêm hằng số cộng vào tổng:" sau khi chọn pick điểm xong, để cộng thêm hằng số đó vào cái tổng chiều dài trên. Như vậy chiều dài dây từ bảng điện lên tới đèn mới giải quyết được. mong bác ra tay giúp e xin chân thành cảm ơn.

Ok mình sửa nhanh nên ko lằng nhằng các trường hợp khác. Nhập thêm hằng số theo hệ mm nhé. ^_^

(defun C:KC1 (/ p lst_p sum d ent data obj tag lst len)

  (vl-load-com)

  (setq lst_p nil sum 0)

  (while (setq p (getpoint "\nChon diem : "))
    (setq lst_p (cons p lst_p))
  )
  
  (setq sum (apply '+ (mapcar 'distance lst_p (cdr lst_p))))
  
  (setq d (getreal "\nNhap them hang so cong vao tong:"))
  
  (setq sum (+ sum d))
	 
  (setq ent (nentsel "\nChon Attribute: "))

  (setq	obj (vlax-ename->vla-object
	      (cdr (assoc 330 (setq data (entget (car ent)))))
	    )
  )
  (setq tag (cdr (assoc 2 data)))

  (setq lst (list (cons tag (setq len (strcat (rtos (/ sum 1000.) 2 0) " m.")))))

  (foreach att (setq atts (vlax-safearray->list
			    (vlax-variant-value (vla-getattributes obj))
			  )
	       )

    (if	(= (vla-get-tagstring att) tag)

      (vla-put-textstring att len)
    )
  )

  (vla-update obj)
)

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

Nhờ các anh e giúp đỡ . Lisp dưới đây lấy chiều dài giữa các điểm rồi cộng thêm hằng số  theo hệ mm rồi gán vào block att . Nay nhờ ae sửa dùm nhập hằn g số theo hệ mét được không ạ.

Lay khoang cach dan vao ATT(CF).lsp

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 tìm dòng lệnh

(setq lst (list (cons tag (setq len (strcat (rtos (/ sum 1000.) 2 1))))))

rồi thay bằng

(setq lst (list (cons tag (setq len (strcat (rtos sum 2 1))))))

Nếu muốn 2, 3 số thập phân thì đổi số 1 thành số 2 hoặc 3

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ào lúc 26/10/2012 tại 19:35, ketxu đã nói:

Ng­ười ta yêu cầu như thế nào chỉ mần vậy thui các bác :)

 


(defun c:linhtinh(/ a)(vl-load-com)
(vla-put-textstring
 (vlax-ename->vla-object (car(nentsel "\nThay gia tri vao dau day ?")))
 (rtos (distance (setq a (getpoint "\nP1 :"))(getpoint a "\nP2 :")) 2 2)
)
(command "regen")
)
 

 

Cái này hay. Thanks bác. Nhưng thừa thao tác vì dù sao cũng có số dim sẵn và nếu áp dụng sang layout thì không đúng vì bị đổi tỉ lệ. Vì vậy nếu ta lấy luôn số dim cho vào ATT sẽ giải quyết triệt để cả bên layout lẫn model, mà hạn chế thao tác bắt điểm và nhập tay gây ra sai số. Trăm sự nhờ bác!

  • 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

×