Đến nội dung


Hình ảnh
* * * - - 8 Bình chọn

Viết lisp theo yêu cầu [phần 2]


  • Chủ đề bị khóa Chủ đề bị khóa
3783 replies to this topic

#3181 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 17 March 2011 - 09:12 AM

Mình mới bắt đầu thôi,mình chỉ hiểu những gì đã viết ở trên,còn bắt đầu vô viết thì chưa.Đây là bài toán mình đưa ra nên có lời giải thì mình cảm thấy học được nhanh hơn,đây là ý nghĩ của mình.Cảm ơn bạn nhiều.

Của bạn đây :
Tue_NV viết theo cách dễ hiểu nhất cho bạn.
Việc còn lại của bạn là gán Layer cho LINE, PLINE, Hatch att và gom chúng trong 1 Block

(defun TAOLAYER(name color)
(if (not (Tblsearch "Layer" name))
(command "layer" "m" name "c" color "" "")
)
)
(defun c:Smake(/ oldos p1 p2 p3 line pline Hatch)
(command "undo" "be")
(setq oldos (getvar "osmode"))
(setvar "osmode" 0)
(setvar "cmdecho" 0)
;;;Taolayer
(TaoLayer "1" 2)
(TaoLayer "2" 8)
(TaoLayer "S13. HATCH" 1)
;;;Ve
(setq p1 (getpoint "\n Diem dau tien :")
p2 (polar p1 0 800)
p3 (polar p1 0 300)
)
(command "line" p1 p2 "")
(setq line (entlast))
(command "pline" p3 "@-200,225" "@400,0" "C")
(setq pline (entlast))
(command "hatch" "S" pline "" "p" "S")
(setq Hatch (entlast))
(command "style" "VNI" "vhelvcn.ttf" "0" "1" "0" "n" "n")
(command "ATTDEF" "" "cos" "cos :" "%%p0.000" "S" "VNI"
(list (- (car p3) 200) (+ (cadr p3) 385) 0.0)
"250" "0")
(setq att (entlast))
(setvar "osmode" oldos)
(command "undo" "e")
(princ)
)
Hy vọng bạn làm được
  • 1

#3182 hugo75

hugo75

    biết vẽ polygon

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

Đã gửi 17 March 2011 - 01:58 PM

Cảm ơn bác,gán layer thì e làm được nhưng tạo cho nó thành block ATT thì không biêt,mong bác giúp.Thanks.
  • 0

#3183 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 17 March 2011 - 04:04 PM

Cảm ơn bác,gán layer thì e làm được nhưng tạo cho nó thành block ATT thì không biêt,mong bác giúp.Thanks.

Của bạn đây. Bạn tự tìm hiểu nhé.
Chúc thành công

(defun TAOLAYER(name color)
(if (not (Tblsearch "Layer" name))
(command "layer" "m" name "c" color "" "")
)
)
(defun c:Smake(/ oldos p1 p2 p3 line pline Hatch)
(command "undo" "be")
(setq oldos (getvar "osmode"))
(setvar "osmode" 0)
(setvar "cmdecho" 0)
;;;Taolayer
(TaoLayer "1" 2)
(TaoLayer "2" 8)
(TaoLayer "S13. HATCH" 1)
;;;Ve
(setq p1 (getpoint "\n Diem dau tien :")
p2 (polar p1 0 800)
p3 (polar p1 0 300)
p4 (list (- (car p3) 200) (+ (cadr p3) 385) 0.0)
)
(command "line" p1 p2 "")
(setq line (entlast))
(command "pline" p3 "@-200,225" "@400,0" "C")
(setq pline (entlast))
(command "bhatch" "p" "S" "S" pline "" "")
(setq Hatch (entlast))
(command "style" "VNI" "vhelvcn.ttf" "0" "1" "0" "n" "n")
(command "ATTDEF" "" "cos" "cos :" "%%p0.000" "S" "VNI" p4 "250" "0")
(setq att (entlast))

(command "copybase" p4 line pline att hatch "")
(command "pasteblock" p4)
(if line (entdel line))
(if pline (entdel pline))
(if att (entdel att))
(if hatch (entdel hatch))
(setvar "osmode" oldos)
(command "undo" "e")
(princ)
)

  • 0

#3184 hugo75

hugo75

    biết vẽ polygon

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

Đã gửi 17 March 2011 - 04:20 PM

Cảm ơn bác rất nhiều,tiện thể cho e hỏi muốn đặt tên cho block ATT này luôn thì viết thêm dòng nào?
  • 0

#3185 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 17 March 2011 - 05:35 PM

Cảm ơn bác rất nhiều,tiện thể cho e hỏi muốn đặt tên cho block ATT này luôn thì viết thêm dòng nào?

Ngâm cứu nhé bạn :


(defun TAOLAYER(name color)
(if (not (Tblsearch "Layer" name))
(command "layer" "m" name "c" color "" "")
)
)
(defun c:Smake(/ oldos p1 p2 p3 line pline Hatch ten)
(command "undo" "be")
(setq oldos (getvar "osmode"))
(setvar "osmode" 0)
(setvar "cmdecho" 0)
;;;Taolayer
(TaoLayer "1" 2)
(TaoLayer "2" 8)
(TaoLayer "S13. HATCH" 1)
;;;Ve
(setq p1 (getpoint "\n Diem dau tien :")
p2 (polar p1 0 800)
p3 (polar p1 0 300)
p4 (list (- (car p3) 200) (+ (cadr p3) 385) 0.0)
)
(command "line" p1 p2 "")
(setq line (entlast))
(command "pline" p3 "@-200,225" "@400,0" "C")
(setq pline (entlast))
(command "bhatch" "p" "S" "S" pline "" "")
(setq Hatch (entlast))
(command "style" "VNI" "vhelvcn.ttf" "0" "1" "0" "n" "n")
(command "ATTDEF" "" "cos" "cos :" "%%p0.000" "S" "VNI" p4 "250" "0")
(setq att (entlast))

(command "copybase" p4 line pline att hatch "")
(command "pasteblock" p4)
(while (and (tblsearch "Block" (setq ten (getstring "\n Nhap ten Block/ Enter: Khong dat ten")))
(/= ten "")
)
(alert "\n Ten Block da co => dat ten khac")
)

(if line (entdel line))
(if pline (entdel pline))
(if att (entdel att))
(if hatch (entdel hatch))
(if (/= ten "") (command "rename" "B" (cdr(assoc 2 (entget(entlast)))) ten))

(setvar "osmode" oldos)
(command "undo" "e")
(princ)
)

  • 1

#3186 hugo75

hugo75

    biết vẽ polygon

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

Đã gửi 17 March 2011 - 07:19 PM

Cảm ơn sự nhiệt tình giúp đỡ của bạn,mình đã dần biết,cho mình hỏi lần cuối,ngay ô nhập vào tên block nếu mình muốn để sẵn 1 tên nào đó chỉ việc enter là nó là tên block luôn và vẫn có thể nhập tên khác vào ô này,không cần chức năng không đặt tên.
  • 0

#3187 hungcuongtx

hungcuongtx

    biết zoom

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

Đã gửi 17 March 2011 - 11:14 PM

em cần viết lisp theo yêu cầu sau:
- dùng lệnh pline
- chọn điểm 1 (chọn điểm A trong hình)
- Chọn kiểu vẽ là cung: A
(*)- Chọn cung qua 2 điểm: S
- Chọn điểm 2 (chọn điểm B trong hình)
- Chọn điểm 3 (Điểm C trong hình)
- Tiếp tục lặp lại từ (*). Số lần lặp là tùy ý theo điểm mình chọn.
Hình đã gửi
Mong các anh giúp dùm!
  • 0

#3188 phamngoctukts

phamngoctukts

    biết lệnh adcenter

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

Đã gửi 17 March 2011 - 11:33 PM

em cần viết lisp theo yêu cầu sau:
- dùng lệnh pline
- chọn điểm 1 (chọn điểm A trong hình)
- Chọn kiểu vẽ là cung: A
(*)- Chọn cung qua 2 điểm: S
- Chọn điểm 2 (chọn điểm B trong hình)
- Chọn điểm 3 (Điểm C trong hình)
- Tiếp tục lặp lại từ (*). Số lần lặp là tùy ý theo điểm mình chọn.
Hình đã gửi
Mong các anh giúp dùm!

Các điểm A,B,C,D.... này của bạn nằm theo quy luật nào. bạn không cho quy luật thì rất khó thực hiệ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!

#3189 hungcuongtx

hungcuongtx

    biết zoom

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

Đã gửi 17 March 2011 - 11:44 PM

Các điểm A,B,C,D.... này của bạn nằm theo quy luật nào. bạn không cho quy luật thì rất khó thực hiện.

dạ, các điểm này nằm trên các đối tượng khác (end, near, mid,...)do mình chọn trên bảng vẽ.
ví dụ như mình có sơ đồ bố trí các thiết bị như hình vẽ, muốn nối các thiết bị lại bằng sơ đồ đơn tuyến.
Hình đã gửi
  • 0

#3190 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 17 March 2011 - 11:57 PM

em cần viết lisp theo yêu cầu sau:
- dùng lệnh pline
- chọn điểm 1 (chọn điểm A trong hình)
- Chọn kiểu vẽ là cung: A
(*)- Chọn cung qua 2 điểm: S
- Chọn điểm 2 (chọn điểm B trong hình)
- Chọn điểm 3 (Điểm C trong hình)
- Tiếp tục lặp lại từ (*). Số lần lặp là tùy ý theo điểm mình chọn.
Hình đã gửi
Mong các anh giúp dùm!

Đêm hơi khuya, mình viết vội cái này. Nếu bạn sử dụng có trở ngại gì thì sáng mai mình sẽ sửa lại
http://www.cadviet.c...e_cung_tron.lsp
  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#3191 hungcuongtx

hungcuongtx

    biết zoom

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

Đã gửi 18 March 2011 - 12:04 AM

[quote name='Doan Van Ha'[/quote]
Được rồi anh ơi. Cảm ơn anh nhiều. :P
  • 0

#3192 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 18 March 2011 - 08:28 AM

Cảm ơn sự nhiệt tình giúp đỡ của bạn,mình đã dần biết,cho mình hỏi lần cuối,ngay ô nhập vào tên block nếu mình muốn để sẵn 1 tên nào đó chỉ việc enter là nó là tên block luôn và vẫn có thể nhập tên khác vào ô này,không cần chức năng không đặt tên.

Block chỉ có 1 tên thôi. Bạn đặt tên trùng => nó không chịu đâu.
Nếu bạn muốn để sẵn 1 tên nào đó chỉ việc enter là nó là tên block luôn. Nếu nó đã có rồi thì nó không chịu đâu. Buộc lòng bạn phải đặt tên khác
Tue_NV viết Lisp cho bạn là tạo Block không cần đặt tên sau đó Rename Block vừa tạo thành 1 tên khác. Nếu tên của Block là "", nó sẽ chấp nhận tạo Block mà không cần đặt tên
  • 0

#3193 hugo75

hugo75

    biết vẽ polygon

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

Đã gửi 18 March 2011 - 08:43 AM

ý mình là như bạn nói để sẵn 1 tên rồi enter nếu chưa có thì nó đặt tên đó,nếu có rồi thì phải đặt tên khác.Thanks.
  • 0

#3194 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 18 March 2011 - 08:54 AM

Cái tên "sẵn" đấy nó là cái gì, lấy theo cách nào ? Bạn cần phải diễn đạt được chính xác ý đồ của mình để mọi người hiểu nhé :)
  • 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


#3195 hugo75

hugo75

    biết vẽ polygon

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

Đã gửi 18 March 2011 - 09:40 AM

Lisp bác Tue_NV viết khi có yêu cầu nhập tên của block:ô để nhập tên là trống,nếu nhập vào thì sẽ là tên của block,nếu tên block đó có rồi thì nó không chịu phải nhập tên khác,nếu không nhập mà Enter luôn thì nó tự đặt tên.Ý của mình là trong ô để nhập tên nó có sẵn 1 tên chẳng hạn như 11 enter thì nếu chưa có tên này nó sẽ tạo tên này,nếu có rồi thì phải đổi tên khác.Chỉ vậy thôi bác ah.
  • 0

#3196 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 18 March 2011 - 09:54 AM

Lisp bác Tue_NV viết khi có yêu cầu nhập tên của block:ô để nhập tên là trống,nếu nhập vào thì sẽ là tên của block,nếu tên block đó có rồi thì nó không chịu phải nhập tên khác,nếu không nhập mà Enter luôn thì nó tự đặt tên.Ý của mình là trong ô để nhập tên nó có sẵn 1 tên chẳng hạn như 11 enter thì nếu chưa có tên này nó sẽ tạo tên này,nếu có rồi thì phải đổi tên khác.Chỉ vậy thôi bác ah.

Ý bác Tuệ hỏi chính là cái số "chẳng hạn" của bạn ấy, nó tạo theo quy luật nào. 1 lisp khó có thể có phần "chẳng hạn " được, làm sao vừa ý bạn được ^^
  • 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


#3197 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 18 March 2011 - 10:21 AM

Hay là dùng cái tên kiểu này để đặt tên đc ko nhỉ

(setq tenblock (rtos (fix (* (getvar "CDATE") 100000)) 2 0))

  • 0

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


#3198 phamngoctukts

phamngoctukts

    biết lệnh adcenter

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

Đã gửi 18 March 2011 - 10:26 AM

ý mình là như bạn nói để sẵn 1 tên rồi enter nếu chưa có thì nó đặt tên đó,nếu có rồi thì phải đặt tên khác.Thanks.

Bạn có thể tạo block không cần đặt tên như sau:
1. Chọn đối tượng cần tạo block rồi nhấn CTRL+C
2. Nhấn CTRL+SHIFT+V rồi pick 1 điểm trên màn hình.
BS: Xin lỗi các Bác em không đọc phía trên. Vẫn có thể tạo ra bolck không cần đặt tên bằng cách copy vào clipboast.
  • 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!

#3199 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 18 March 2011 - 10:29 AM

Thực chất việc random này hok khác gì với việc bác TUệ đặt anon block cả ^^, vấn đề ở đây là bạn hugo muốn biết cách đặt code để mặc định tên thôi.Thì khi nhận string "" -> đặt tên block là 11 đó, chắc bạn ấy tự mần được
  • 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


#3200 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 18 March 2011 - 10:31 AM

Bạn có thể tạo block không cần đặt tên như sau:
1. Chọn đối tượng cần tạo block rồi nhấn CTRL+C
2. Nhấn CTRL+SHIFT+V rồi pick 1 điểm trên màn hình.

Ấn Ctrol+Shift+C hay hơn. Nó nằm trong code của Tue_NV
Lệnh copybase tạo Block theo điểm chèn do User định trước
  • 0