Đến nội dung


Hình ảnh
- - - - -

thay thế các đường tròn bằng block


  • Please log in to reply
23 replies to this topic

#1 vantran

vantran

    biết vẽ circle

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

Đã gửi 27 September 2010 - 10:31 AM

các bạn cho mình hỏi trong cad có thể thay thế các đường tròn có sãn bằng block không. đây là file ví dụ của mình. http://www.cadviet.c...files/3/vd1.dwg
Mình muốn hỏi thêm là vấn đề này có giải quyết bằng lisp được không. nếu được mong các bạn giúp mình
  • 0

#2 18011985

18011985

    biết lệnh properties

  • Members
  • PipPipPipPip
  • 255 Bài viết
Điểm đánh giá: 61 (tàm tạm)

Đã gửi 27 September 2010 - 11:28 AM

các bạn cho mình hỏi trong cad có thể thay thế các đường tròn có sãn bằng block không. đây là file ví dụ của mình. http://www.cadviet.c...files/3/vd1.dwg
Mình muốn hỏi thêm là vấn đề này có giải quyết bằng lisp được không. nếu được mong các bạn giúp mình

Điều này hoàn toàn được bạn cho mình chút thời gian mình sẽ giúp bạn.
  • 0
Trăng 16 trăng tròn
Em 16 bụng ... như trăng

Hướng dẫn sử dụng diễn đàn:
Để cảm ơn hay bài viết có ích: Ấn dấu + cuối bài.
Không vừa lòng hay bài spam: Ấn dấu - cuối bài.

#3 phamngoctukts

phamngoctukts

    biết lệnh adcenter

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

Đã gửi 27 September 2010 - 11:45 AM

các bạn cho mình hỏi trong cad có thể thay thế các đường tròn có sãn bằng block không. đây là file ví dụ của mình. http://www.cadviet.c...files/3/vd1.dwg
Mình muốn hỏi thêm là vấn đề này có giải quyết bằng lisp được không. nếu được mong các bạn giúp mình

Của bạn đây. lệnh là ctob

;; free lisp from cadviet.com
(defun c:ctob ()
(setq oldcmd (getvar "cmdecho"))
(setvar "cmdecho" 0)
(setq ss (ssget "x" '((0 . "circle"))))
(setq i 0)
(while (< 0 (sslength ss))
(setq ent (entget (ssname ss i))
tam (cdr (assoc 10 ent)))
(command "insert" "hk" tam "")
(setq i (1+ I))
)
(setvar "cmdecho" oldcmd)
)

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

#4 vantran

vantran

    biết vẽ circle

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

Đã gửi 27 September 2010 - 12:00 PM

[quote name='phamngoctukts' date='Sep 27 2010, 11:45' post='109725']
Của bạn đây. lệnh là ctob

;; free lisp from cadviet.com
(defun c:ctob ()
(setq oldcmd (getvar "cmdecho"))
(setvar "cmdecho" 0)
(setq ss (ssget "x" '((0 . "circle"))))
(setq i 0)
(while (< 0 (sslength ss))
(setq ent (entget (ssname ss i))
tam (cdr (assoc 10 ent)))
(command "insert" "hk" tam "")
(setq i (1+ I))
)
(setvar "cmdecho" oldcmd)
)

[/quỏt

MÌnh đã thử cái lisp của bạn rổi nhưng nó chỉ thay được cho một đường tròn thôi. mình muốn là thây tất cả các đường tròn đó bởi block. giống như chức năng REPLACE ALL của lệnh FIND ấy. mong các bạn giúp đỡ
  • 0

#5 phamngoctukts

phamngoctukts

    biết lệnh adcenter

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

Đã gửi 27 September 2010 - 12:18 PM

MÌnh đã thử cái lisp của bạn rổi nhưng nó chỉ thay được cho một đường tròn thôi. mình muốn là thây tất cả các đường tròn đó bởi block. giống như chức năng REPLACE ALL của lệnh FIND ấy. mong các bạn giúp đỡ

Mình lúc test mình thiếu mất dấu "" bạn test lại xem

;; free lisp from cadviet.com

;; free lisp from cadviet.com
(defun c:ctob ()
(setq oldcmd (getvar "cmdecho"))
(setvar "cmdecho" 0)
(setq ss (ssget "x" '((0 . "circle"))))
(setq i 0)
(while (< 0 (sslength ss))
(setq ent (entget (ssname ss i))
tam (cdr (assoc 10 ent)))
(command "-insert" "hk" tam "" "" "")
(setq i (1+ I))
)
(setvar "cmdecho" oldcmd)
)

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

#6 18011985

18011985

    biết lệnh properties

  • Members
  • PipPipPipPip
  • 255 Bài viết
Điểm đánh giá: 61 (tàm tạm)

Đã gửi 27 September 2010 - 12:26 PM

MÌnh đã thử cái lisp của bạn rổi nhưng nó chỉ thay được cho một đường tròn thôi. mình muốn là thây tất cả các đường tròn đó bởi block. giống như chức năng REPLACE ALL của lệnh FIND ấy. mong các bạn giúp đỡ

Mình sửa lại giúp bạn rồi đây.

(defun c:ctob(/ ENT I SS TAM)
(setq ss (ssget '((0 . "circle"))))
(setq i 0)
(while (< i (sslength ss))
(setq ent (entget (ssname ss i))
tam (cdr (assoc 10 ent)))
(entmake (list (cons 0 "INSERT")(cons 2 "hk") (cons 10 tam)))
(entmake (list (cons 0 "SEQEND")))
(setq i (1+ i))
)
(princ)
)

  • 1
Trăng 16 trăng tròn
Em 16 bụng ... như trăng

Hướng dẫn sử dụng diễn đàn:
Để cảm ơn hay bài viết có ích: Ấn dấu + cuối bài.
Không vừa lòng hay bài spam: Ấn dấu - cuối bài.

#7 nguyentuyen6

nguyentuyen6

    biết lệnh chamfer

  • Advance Member
  • PipPipPipPip
  • 213 Bài viết
Điểm đánh giá: 124 (tàm tạm)

Đã gửi 27 September 2010 - 12:49 PM

Mình cũng làm thử 1 cái,
cái này chọn circle nào thì no' insert lên circle đó

(defun BatDauVe() (setq OldOs (getvar "osmode")) (setvar "osmode" 0))
(defun KetThucVe() (setvar "osmode" OldOs) (princ))
(defun c:isb (/ cir i OldOs tam)
(BatDauVe)
(setq i 0)
(setq ss (ssget '((0 . "*CIRCLE"))))
(while (< i (sslength ss))
  (setq cir (ssname ss i))
  (setq tam (cdr (assoc 10 (entget cir))))
(command "-INSERT" "hk" tam "" "" "")
(setq i (1+ i))
);_ end while
(KetThucVe)
);_ end defun

  • 0

Lisp In bản vẽ hàng loạt:
http://www.cadviet.c...ndpost&p=139860


#8 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 27 September 2010 - 01:05 PM

Hay quá,nhưng hình như các code không chú ý đến khoản hiện dialog block name để người dùng chọn block thay thế,hoặc đơn giản hơn là thêm 1 biến lấy tên clock do người dùng kick chọn nhỉ ^^.E nghĩ như thế thì trọn vẹn hơ là cố định tên nó trong code
  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#9 vantran

vantran

    biết vẽ circle

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

Đã gửi 27 September 2010 - 01:59 PM

Mình cũng làm thử 1 cái,
cái này chọn circle nào thì no' insert lên circle đó

(defun BatDauVe() (setq OldOs (getvar "osmode")) (setvar "osmode" 0))
(defun KetThucVe() (setvar "osmode" OldOs) (princ))
(defun c:isb (/ cir i OldOs tam)
(BatDauVe)
(setq i 0)
(setq ss (ssget '((0 . "*CIRCLE"))))
(while (< i (sslength ss))
  (setq cir (ssname ss i))
  (setq tam (cdr (assoc 10 (entget cir))))
(command "-INSERT" "hk" tam "" "" "")
(setq i (1+ i))
);_ end while
(KetThucVe)
);_ end defun

mình đã thử ctob.lsp và isb.lsp và cho kết quả đúng như mình mong muổn. mình có ý kiến là nếu như lisp không cố định block mà có thể chọn bất cứ block nào thì hay quá. Ngoài ra mình thấy trong ctob.lsp khi thay đường tròn bằng block thì nó sẽ thay thế tất cả các đường tròn, nhưng điều này đã được khắc phục trong isb.lsp. nếu có thể kết hợp thêm tính năng chọn block thì tuyệt quá. một lần nữa xin cảm ơn hai bạn đã giúp đỡ
  • 0

#10 phamngoctukts

phamngoctukts

    biết lệnh adcenter

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

Đã gửi 27 September 2010 - 02:18 PM

mình đã thử ctob.lsp và isb.lsp và cho kết quả đúng như mình mong muổn. mình có ý kiến là nếu như lisp không cố định block mà có thể chọn bất cứ block nào thì hay quá. Ngoài ra mình thấy trong ctob.lsp khi thay đường tròn bằng block thì nó sẽ thay thế tất cả các đường tròn, nhưng điều này đã được khắc phục trong isb.lsp. nếu có thể kết hợp thêm tính năng chọn block thì tuyệt quá. một lần nữa xin cảm ơn hai bạn đã giúp đỡ

Của bạn đây. Đúng ý bạn rồi nhé. Chọn đường chòn trước rồi chọn block muốn chèn.

;; free lisp from cadviet.com
(defun BatDauVe() (setq OldOs (getvar "osmode")) (setvar "osmode" 0))
(defun KetThucVe() (setvar "osmode" OldOs) (princ))
(defun c:isb (/ cir i OldOs tam)
(BatDauVe)
(setq i 0)
(princ "\nchon cuong chon muon insert")
(setq ss (ssget '((0 . "*CIRCLE"))))
(setq ten (cdr (assoc 2 (entget (car (entsel "chon block muon chen")))))
)
(while (< i (sslength ss))
  (setq cir (ssname ss i))
  (setq tam (cdr (assoc 10 (entget cir))))
(command "-INSERT" ten tam "" "" "")
(setq i (1+ i))
);_ end while
(KetThucVe)
);_ end defun

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

#11 nguyentuyen6

nguyentuyen6

    biết lệnh chamfer

  • Advance Member
  • PipPipPipPip
  • 213 Bài viết
Điểm đánh giá: 124 (tàm tạm)

Đã gửi 27 September 2010 - 02:27 PM

Định sửa mà bac tu post rồi, hehe
  • 0

Lisp In bản vẽ hàng loạt:
http://www.cadviet.c...ndpost&p=139860


#12 18011985

18011985

    biết lệnh properties

  • Members
  • PipPipPipPip
  • 255 Bài viết
Điểm đánh giá: 61 (tàm tạm)

Đã gửi 27 September 2010 - 02:40 PM

Chà một bài toán mà nhiều lời giải ghê. Nhất bạn đấy chỉ trong thời gian ngắn mà nhiều người giúp bạn vậy :(
  • 0
Trăng 16 trăng tròn
Em 16 bụng ... như trăng

Hướng dẫn sử dụng diễn đàn:
Để cảm ơn hay bài viết có ích: Ấn dấu + cuối bài.
Không vừa lòng hay bài spam: Ấn dấu - cuối bài.

#13 phamngoctukts

phamngoctukts

    biết lệnh adcenter

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

Đã gửi 27 September 2010 - 02:50 PM

Chà một bài toán mà nhiều lời giải ghê. Nhất bạn đấy chỉ trong thời gian ngắn mà nhiều người giúp bạn vậy :(

Tại dạo này ít người yêu cầu viết lisp quá nên anh em rảnh rỗi.
  • 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!

#14 nguyentuyen6

nguyentuyen6

    biết lệnh chamfer

  • Advance Member
  • PipPipPipPip
  • 213 Bài viết
Điểm đánh giá: 124 (tàm tạm)

Đã gửi 27 September 2010 - 05:03 PM

Chà một bài toán mà nhiều lời giải ghê. Nhất bạn đấy chỉ trong thời gian ngắn mà nhiều người giúp bạn vậy :(

Tại mình đang tập toẹ nên cũng thử viết. hehe
  • 0

Lisp In bản vẽ hàng loạt:
http://www.cadviet.c...ndpost&p=139860


#15 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 27 September 2010 - 05:36 PM

Tại dạo này ít người yêu cầu viết lisp quá nên anh em rảnh rỗi.

Còn cái tường kia kìa >:( :(
Viết nhiều lisp nhỏ nhỏ thích hơn là 1 thằng thật lớn,bác nhỉ.Mệt đầu kinh
  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#16 phamngoctukts

phamngoctukts

    biết lệnh adcenter

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

Đã gửi 27 September 2010 - 06:09 PM

Còn cái tường kia kìa >:( :(
Viết nhiều lisp nhỏ nhỏ thích hơn là 1 thằng thật lớn,bác nhỉ.Mệt đầu kinh

ketxu cho mình hỏi cái> vẽ theo tỉ lệ là thế nào. Có phải thê này không
ví dụ tỉ lệ 1/100 khi nhập dày tường là 220 thì trên bản vẽ là 2.2 đúng không. vì mình là dân kiến trúc nên ít dùng cái này. Bạn nói cụ thể tác dụng của nó.
  • 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!

#17 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 28 September 2010 - 08:24 AM

Dạ đúng là thế rồi đấy ạ.Ví dụ vẽ tỉ lệ 1/100 thì tất cả các kick thước lúc mình nhập vào đều chia cho 100.Vẽ cạnh dài 1000mm thì nhập vào 10 thôi-->khi in ra giấy nó cũng bằng 10mm.Sau đó lúc dim thì tạo 1 dimstyle với scale factor là 100,thì lúc mình dim cái đoạn thực 10mm ấy,nó sẽ hiện ra là 1000mm ạ.Dân vẽ model phải vẽ thế ạ(khá mỏi tay vì mỗi lần nhập lại phải thêm dòng /tle).Vẽ layout thì không cần đặt cái này, nhưng lại phải chú ý đến khoản đặt hightext và scale over để viewport chuẩn.Nói chung mỗi cái có 1 cái lợi.Vì e dùng cad2007 nên cũng chỉ biết thế,cad đời sau chắc không nhất thiết phải thế ^^.Hiện tại lúc vẽ kêt cấu BT thì e vẽ model,sang vẽ thép thì vẽ layout,vẫn kết hợp cả 2 cái đó
  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#18 vantran

vantran

    biết vẽ circle

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

Đã gửi 28 September 2010 - 09:02 AM

Của bạn đây. Đúng ý bạn rồi nhé. Chọn đường chòn trước rồi chọn block muốn chèn.


;; free lisp from cadviet.com
(defun BatDauVe() (setq OldOs (getvar "osmode")) (setvar "osmode" 0))
(defun KetThucVe() (setvar "osmode" OldOs) (princ))
(defun c:isb (/ cir i OldOs tam)
(BatDauVe)
(setq i 0)
(princ "\nchon cuong chon muon insert")
(setq ss (ssget '((0 . "*CIRCLE"))))
(setq ten (cdr (assoc 2 (entget (car (entsel "chon block muon chen")))))
)
(while (< i (sslength ss))
  (setq cir (ssname ss i))
  (setq tam (cdr (assoc 10 (entget cir))))
(command "-INSERT" ten tam "" "" "")
(setq i (1+ i))
);_ end while
(KetThucVe)
);_ end defun

một lần nữa xin cảm ơn các bạn. vì mình là dân khảo sát nên việc sử dụng cad cũng là những lệnh cơ bản thôi nên còn hạn chế lắm. hy vọng sẽ học hỏi thêm được nhiều
  • 0

#19 ketxu

ketxu

    Copier - Paster - Editor

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

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

Ý,bác không xóa cái đường tròn cũ đi ạ ^^
  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#20 gia_bach

gia_bach

    biết lệnh adcenter

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

Đã gửi 28 September 2010 - 12:14 PM

các bạn cho mình hỏi trong cad có thể thay thế các đường tròn có sãn bằng block không. đây là file ví dụ của mình. http://www.cadviet.c...files/3/vd1.dwg
Mình muốn hỏi thêm là vấn đề này có giải quyết bằng lisp được không. nếu được mong các bạn giúp mình

Lisp thay thế các đường tròn có sẵn bằng Block.
Tương tự các lisp trên, có bổ sung hộp thoại chọn Block : với tùy chọn xóa Circle.

Hình đã gửi

(defun c:InsBlk (/ blk_list BlkNam dcflag ss)
;| By : Gia Bach, gia_bach @ www.CadViet.com |;
(defun GetBlkLst(/ name tbl tbl_lst)
(setq tbl (tblnext "block" T))
(while tbl
(if (/= (substr (setq name (cdr (assoc 2 tbl))) 1 1) "*")
(setq tbl_lst (cons name tbl_lst)))
(setq tbl (tblnext "block")) )
(vl-sort tbl_lst '<))
(defun delCir_set ()
(if (= "1" (get_tile "delCir")) (setq delCir 1)(setq delCir 0)) )
(defun Dialog_Show (lst / dxfdcl fn dxf_id)
(setq dxfdcl (vl-filename-mktemp "InsBlk.tmp")
fn (open dxfdcl "w"))
(foreach item (list
"InsBlk : dialog {label=\"Insert Block\";"
" : popup_list {key =\"BlkLst\"; label=\"Select Block\"; width = 15; height = 15;}"
" : toggle {key =\"delCir\"; label=\"Delete Circle\"; value=\"0\";}"
" ok_cancel; }")
(princ item fn) )
(close fn)
(setq dxf_id (load_dialog dxfdcl))
(if (not (if dxfXY (new_dialog "InsBlk" dxf_id "" dxfXY)(new_dialog "InsBlk" dxf_id)))
(progn (prompt "\nKhong thay hop thoai.")(exit)))
(start_list "BlkLst" 3) (mapcar 'add_list lst) (end_list)
(action_tile "BlkLst" "(setq BlkNam (nth (atoi $value) lst))")
(action_tile "delCir" "(delCir_set)")
(action_tile "accept" "(setq dxfXY (done_dialog 1))")
(setq dcflag (start_dialog))
(unload_dialog dxf_id)
(vl-file-delete dxfdcl)
(princ))
;------- Main program ------------
(setq delCir 0
blk_list (GetBlkLst)
BlkNam (nth 0 blk_list))
(Dialog_Show blk_list)
(if (= 1 dcflag)
(if (setq ss (ssget '((0 . "CIRCLE"))));(8 . "HK")
((lambda (i / ent pt)
(while (setq ent (ssname ss (setq i (1+ i))))
(setq pt (cdr (assoc 10 (entget ent))))
(entmake (list (cons 0 "INSERT")(cons 2 BlkNam) (cons 10 pt)))
(entmake (list (cons 0 "SEQEND")))
(if (= delCir 1) (entdel ent)))) -1)
(alert "Nothing's Selected")))
(princ) )

Bài viết đã được chỉnh sửa nội dung bởi gia_bach: 28 September 2010 - 02:16 PM

  • 2