Chuyển đến nội dung
Diễn đàn CADViet
  • Thông báo

    • Nguyen Hoanh

      CADViet đã hoàn tất nâng cấp   14/09/2017

      Chào các bạn, CADViet đã hoàn tất việc nâng cấp lên phiên bản mới. Tất cả các chức năng đã hoạt động theo kỳ vọng của ban quản trị. Nếu có vấn đề gì cần phản hồi, các bản post ở đây nhé: Trân trọng, Nguyễn Hoành.

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

Chào các bác!

Em là thành viên mới, còn mù mờ lắm. Em có một vấn đề cần giúp đỡ như sau:

Em hay vẽ Cốt thép, tình hình là khi em rải thép xong, dùng lệnh Quick leader để ký hiệu tên thanh thép. Để cho nhanh thì em vẽ một leader ngắn sau đó Array theo bước thép, Nhưng vấn đề là ở chỗ lúc đó thì các chân leader này không ở cùng một vị trí, khi đó nếu mình muốn move đi chẳng hạn thì việc chọn tất cả các leader này sẽ khó, Vậy em xin nhờ các cao thủ viết giúp một lisp làm được vấn để đó, cụ thể như sau:

Khi em vẽ thì vẫn vẽ các leader "ngắn" sau đó dùng lisp để "Trim" rồi quét chọn tất cả các leader đó rồi chọn một điểm làm chân mới của tất cả các Leader đó. Lisp này có tác dụng với cả các leader theo phương xiên thì càng tốt.

 

Em gửi kèm file, các bác xem giúp em nhé!

Thanks các bác!

http://www.cadviet.com/upfiles/3/103883_leader.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
ketxu    2.653

Quick code :

(defun c:ldp (/ LM:mAssoc p lst ss)
;Free lisp from Cadviet @Ketxu
(defun LM:mAssoc ( key lst / pair )
(if (setq pair (assoc key lst))
   	(cons (cdr pair) (LM:mAssoc key (cdr (member pair lst))))
)
)
(and (setq ss (ssget '((0 . "*LEADER"))))
 (setq p (getpoint "\nDiem dat chung :"))
(foreach ld (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))
(entmod (subst (cons 10 p) (cons 10 (last (LM:mAssoc 10 (setq lst (entget ld))))) lst))
)
))

  • 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

Tuyệt quá. Em cảm ơn anh Ketxu nhiều nhé. Đúng như ý của em.

Cảm ơn anh Ketxu lần nữa nhé!

Còn một vấn đề nữa em mới gặp phải, Anh có thể viết giúp em một đoạn Lisp ngắn chuyển layer bất kỳ thành Layer Depoint của Cad được không ạ!

Em cảm ơn anh 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
ketxu    2.653

Tuyệt quá. Em cảm ơn anh Ketxu nhiều nhé. Đúng như ý của em.

Cảm ơn anh Ketxu lần nữa nhé!

Còn một vấn đề nữa em mới gặp phải, Anh có thể viết giúp em một đoạn Lisp ngắn chuyển layer bất kỳ thành Layer Depoint của Cad được không ạ!

Em cảm ơn anh nhiều!

Hôm qua mình bùn ngủ, gà gật code, hnay mới để ý là bài bạn viết k theo quy định. Bạn vui lòng đọc quy định yêu cầu lisp bên dưới chữ ký của mình rồi bàn tiếp nhé :)

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
Doan Van Ha    2.680

Tuyệt quá. Em cảm ơn anh Ketxu nhiều nhé. Đúng như ý của em.

Cảm ơn anh Ketxu lần nữa nhé!

Còn một vấn đề nữa em mới gặp phải, Anh có thể viết giúp em một đoạn Lisp ngắn chuyển layer bất kỳ thành Layer Depoint của Cad được không ạ!

Em cảm ơn anh nhiều!

Về lisp chuyển layer thì trên cadviet có rất nhiều. Đơn giản như bạn thì dùng cái này xem:

(defun C:TL ( / ss)
(princ "\nChon cac doi tuong can thay doi Layer ve Defpoints: ")
(setq ss (ssget))
(if (not (tblsearch "layer" "Defpoints"))
 (command ".layer" "m" "Defpoints" ""))
(command ".chprop" ss "" "la" "Defpoints" "")
(princ))

  • 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
ketxu    2.653

Ồ, quả có vậy thật. Tại ketxu dùng bản vẽ nào cũng có dim nên tưởng nó có từ sơ khai ^^ Tks bác ĐVH ^^

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 các bác nhé. Tại em cũng có lisp chuyển sang các Layer khác nhau rồi nhưng không chuyển sang Layer mặc định của Cad là Depoint được nên nhờ các bác giúp đỡ. Cũng vì em để Layer của khung Mview bên layout là layer depoint nên nảy sinh ra vấn đề đó.

Cảm ơn các bác đã nhiệt tình giúp đỡ nhé!

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

Chào các bác!

Em định nhờ các bác viết hộ 2 đoạn lisp như sau:

1. Đoạn lisp click chọn một đường Dim và chọn kiểu Dimension style của đường dim đó làm kiểu Dim hiện hành.

2.Đoạn lisp cut chân những đường dim theo phương xiên?

Em định lập một Topic riêng nhưng thấy vấn đề này hơi nhỏ với lại lúc em post lên nó cứ trục trặc nên em post luôn ở đây mong các đại ca giúp đỡ!

Em cảm ơn trước nhé!

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
Doan Van Ha    2.680

Chào các bác!

Em định nhờ các bác viết hộ 2 đoạn lisp như sau:

1. Đoạn lisp click chọn một đường Dim và chọn kiểu Dimension style của đường dim đó làm kiểu Dim hiện hành.

2.Đoạn lisp cut chân những đường dim theo phương xiên?

Em định lập một Topic riêng nhưng thấy vấn đề này hơi nhỏ với lại lúc em post lên nó cứ trục trặc nên em post luôn ở đây mong các đại ca giúp đỡ!

Em cảm ơn trước nhé!

Câu 1

P/S (20h40-27/02/2012): đã sửa các lỗi bị nhầm lẫn.

;Doan Van Ha - CADViet.com - Ngay 27-02-2012
;Muc dich: Chon Dim lam Dim hien hanh.
;Duoc bien soan dua theo lisp cua Terry Miller. Thanks very much!
(defun C:DHH (/ blk Blklst blk1 lstblk z sty val var len lst1 ent lst type z osm hgt hei)
(setq osm (getvar "osmode")) (setvar "cmdecho" 0) (setvar "osmode" 0)
(setq ent (car (entsel "Chon Dim lam Dim hien hanh: ")))
(if ent (setq lst (entget ent (list "*")) type (cdr (assoc 0 lst)) lst1 (last lst)))
(if (= type "DIMENSION")
 (progn
  (setq blk1 (cdr (assoc -2 (tblsearch "BLOCK" (cdr (assoc 2 lst))))))
  (while (setq blk1 (entnext blk1))
(setq Blklst (entget blk1))
(if (= (cdr (assoc 0 Blklst)) "MTEXT")
(setq hei (cdr (assoc 40 Blklst)))))
  (command ".DIMSTYLE" "R" (cdr (assoc 3 lst)))
  (setq sty (tblsearch "STYLE" (getvar "DIMTXSTY")))
  (command ".TEXTSIZE" hei)
  (if (/= (cdr (assoc 40 (tblsearch "STYLE" (cdr (assoc 3 lst))))) 0)
(command ".STYLE" (cdr (assoc 3 lst)) "" hei "" "" "" "" ""))
  (command ".LAYER" "S" (cdr (assoc 8 lst)) "")
  (if (= (car lst1) -3)
(progn
(setq lst1 (nth 1 lst1) len (/ (length lst1) 2) z 1)
(repeat len
 	(if (= (type (nth z lst1)) 'LIST)
  	(if (= (car (nth z lst1)) 1070)
   	(if (or (= (car (nth (1+ z) lst1)) 1040) (= (car (nth (1+ z) lst1)) 1070))
	(progn
     	(setq var (cdr (nth z lst1)) val (cdr (nth (1+ z) lst1)))
     	(cond  ((= var 3)  (setvar "DIMPOST" val))
                 	((= var 4)  (setvar "DIMAPOST"val))
                 	((= var 5)  (setvar "DIMBLK"  val))
                 	((= var 6)  (setvar "DIMBLK1" val))
                 	((= var 7)  (setvar "DIMBLK2" val))
                 	((= var 40) (setvar "DIMSCALE"val))
                 	((= var 41) (setvar "DIMASZ"  val))
                 	((= var 42) (setvar "DIMEXO"  val))
                 	((= var 43) (setvar "DIMDLI"  val))
                 	((= var 44) (setvar "DIMEXE"  val))
                 	((= var 45) (setvar "DIMRND"  val))
                 	((= var 46) (setvar "DIMDLE"  val))
                 	((= var 47) (setvar "DIMTP"   val))
                 	((= var 48) (setvar "DIMTM"   val))
                 	((= var 71) (setvar "DIMTOL"  val))
                 	((= var 72) (setvar "DIMLIM"  val))
                 	((= var 73) (setvar "DIMTIH"  val))
                 	((= var 74) (setvar "DIMTOH"  val))
                 	((= var 77) (setvar "DIMTAD"  val))
                 	((= var 78) (setvar "DIMZIN"  val))
                 	((= var 140) (setvar "DIMTXT"  val))
                 	((= var 141) (setvar "DIMCEN"  val))
                 	((= var 142) (setvar "DIMTSZ"  val))
                 	((= var 143) (setvar "DIMALTF" val))
                 	((= var 144) (setvar "DIMLFAC" val))
                 	((= var 145) (setvar "DIMTVP"  val))
                 	((= var 146) (setvar "DIMTFAC" val))
                 	((= var 147) (setvar "DIMGAP"  val))
                 	((= var 170) (setvar "DIMALT"  val))
                 	((= var 171) (setvar "DIMALTD" val))
                 	((= var 172) (setvar "DIMTOFL" val))
                 	((= var 173) (setvar "DIMSAH"  val))
                 	((= var 174) (setvar "DIMTIX"  val))
                 	((= var 175) (setvar "DIMSOXD" val))
                 	((= var 176) (setvar "DIMDLRD" val))
                 	((= var 177) (setvar "DIMCLRE" val))
                 	((= var 178) (setvar "DIMCLRT" val))
                 	((= var 270) (setvar "DIMUNIT" val))
                 	((= var 271) (setvar "DIMDEC"  val))
                 	((= var 272) (setvar "DIMTDEC" val))
                 	((= var 273) (setvar "DIMALTU" val))
                 	((= var 274) (setvar "DIMALTTD"val))
                 	((= var 275) (setvar "DIMAUNIT"val))
                 	((= var 280) (setvar "DIMJUST" val))
                 	((= var 281) (setvar "DIMSD1"  val))
                 	((= var 282) (setvar "DIMSD2"  val))
                 	((= var 283) (setvar "DIMTOLJ" val))
                 	((= var 284) (setvar "DIMTZIN" val))
                 	((= var 285) (setvar "DIMALTZ" val))
                 	((= var 286) (setvar "DIMALTTZ"val))
                 	((= var 287) (setvar "DIMFIT"  val))
                 	((= var 288) (setvar "DIMUPT"  val)))))))
 	(setq z (+ z 2)))))
  (setq lstblk (tblsearch "BLOCK" (cdr (assoc 2 lst))))
  (setq blk (cdr (assoc -2 lstblk)))
  (while (setq blk (entnext blk))
(if blk
(progn
 	(setq lstblk (entget blk))
 	(if (= (cdr (assoc 0 lstblk)) "MTEXT")
  	(setq hgt (cdr (assoc 40 lstblk)))))))
  (if (= hgt 0)
(progn
(setq hgt (/ (getvar "dimscale") hgt))
(setvar "dimtxt" hgt)))))
(setvar "osmode" osm)
(princ))

Câu 2: chưa rõ câu hỏ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
lp_hai    207

Câu 2: chưa rõ câu hỏi

Lúc trước lâu lắm rồi, lúc em mới làm quen với CAD thì có lisp cutdim sau khi chọn các Dim xong thì phải chọn 2 điểm để tạo ra một đường giới hạn cắt các chân dim. Sau này hình như ít dùng nên người ta chế lại thành chỉ chọn có một điểm chon nó nhanh.

vì vậy cái "đường giới hạn" cũng mặc định theo 2 phương: song song với X hoặc Y (cái này tùy vào Dim). Do vậy các lisp này không cut được các chân Dim theo một đường xéo xéo.

Ý bác kia chắc là vậy!

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ác Ha nhưng sao em down lisp HA về lại không dùng được nhỉ. Ý em là em sẽ click chọn một đường dim đã có, rồi gõ lệnh (như lisp bác viết là HA chẳng hạn) thì kiểu dim của đường dim đó (Ví dụ dim hiện hành của em đang là 1/30, em click chọn một đường dim của tỷ lệ 1/50 đã có ở trong bản vẽ nhưng không phải kiểu hiện hành rồi gõ lệnh hoặc ngược lại, gõ lệnh trước rồi chọn đường dim sau) thì kiểu 1/50 sẽ là kiểu dim hiện hành. Bác kiểm tra giúp em với nhé.nếu tiện bác sửa giúp em luôn dòng lệnh là "DHH" thay vì "HA" với!

Còn vấn đề thứ hai thì ý của em hỏi là:

Ví dụ mình có một đường line xiên, đo dim DA thì mình có lisp cắt chân cái dim đo theo kiểu DA được không ấy mà.

Bác xem trong file đính kèm này nhé

Một lần nữa cảm ơn các bác nhé!

 

mạng của em chập chờn quá nên không upload được, không biết em nói thế đã rõ chưa nhỉ!

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

Chào các bác, em cũng đã thử dùng lisp "dhh" của bác Hà viết nhưng mà không được, cad nó báo là "Unknown command".

Cái lisp này chạy được thì rất hay, em cũng đang cần, mong bác Hà xem lại chút nhé.

Em xin cảm ơn các bác trướ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
ketxu    2.653

K rõ bác ĐVH viết lisp với mục đích chi mà nó dài quá vậy ạ ?

 

@OP : các lisp cắt dim trên diễn đàn hoàn toàn cắt được đường dim DA

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
Doan Van Ha    2.680

K rõ bác ĐVH viết lisp với mục đích chi mà nó dài quá vậy ạ ?

 

@OP : các lisp cắt dim trên diễn đàn hoàn toàn cắt được đường dim DA

Có cách gì lấy 1 dim trên bản vẽ làm dim hiện hành không? Còn cái này 99% và 1% 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
ketxu    2.653

Theo ý bạn OP mô tả thì nó tầm tầm như thế này :

(defun c:test ()(command "dimstyle" "r" (cdr (assoc 3 (entget (ssname (ssget ":S" (list (cons 0 "DIMENSION"))) 0))))))

  • 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
Doan Van Ha    2.680

Theo ý bạn OP mô tả thì nó tầm tầm như thế này :

(defun c:test ()(command "dimstyle" "r" (cdr (assoc 3 (entget (ssname (ssget ":S" (list (cons 0 "DIMENSION"))) 0))))))

Tôi bị lạc lối rồi! Lúc đầu setvar dimstyle nhưng không được nên cứ mải theo con đường set, thành ra quẩn. Thank Ket 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

Bác KetXu ơi bác có thể sửa thêm cái lisp chọn chân leader giúp em thêm một chút được không ạ. Nếu mà chỉ cần click chọn một leader đầu tiên, rồi các leader "chạm" vào leader ấy, cứ nối đuôi nhau (tức là cứ cái sau chạm vào cái trước) thì chúng sẽ tự động chuyển về điểm chân mình click. Như là lisp nối liền các line thành Pline này thì tốt quá.

Thanks bác nhiều nhé!

 

http://www.cadviet.com/upfiles/3/103883_03pline_nn.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
ketxu    2.653

@vanhoatnguyen : sau 10 bài thì mình nghĩ bạn đã k còn là Thành viên mới nữa . Topic của bạn vi phạm nội quy, các bài yêu cầu tiếp theo lại tiếp tục vi phạm, có nhắc nhở nhưng không thấy có ý đồ sửa chữa :)

=> Kinh nghiệm : dù có hơi cứng ngắc nhưng đã đề ra thì nên theo, bỏ qua 1 lần thì sẽ có lần 2, lần 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

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


×