Đến nội dung


Hình ảnh
- - - - -

[ Yêu cầu] Ghép nhiều lệnh trong 1 lisp


  • Please log in to reply
12 replies to this topic

#1 bachngoctung

bachngoctung

    biết lệnh copy

  • Members
  • PipPipPip
  • 115 Bài viết
Điểm đánh giá: 11 (tàm tạm)

Đã gửi 17 July 2011 - 12:35 PM

-Chào anh e. chào ketxu, đêm qua mình dã viết bài và sai nội quy nên bị ketxu cho vào di vãng. Ðùa vậy thôi mình xin trình bày yêu cầu của mình như sau:
- Mình cần có một lisp có chức năng ghép các lệnh sau chỉ bằng một lệnh duy nhất ví du là cadviet
+ Ðối tượng: là một pline có độ dày là 2 và được đóng lại thành block có tên là dt
+ MÌnh sử dùng block dt này chèn vào bản vẽ khác và trong bản vẽ vừa chèn này mình sé dùng lisp cadviet để xử lý cái block dt kia kết quả nó cho ra nhu sau(theo thứ tự gạch đầu dòng nhé):
- Block bị phá vỡ (explode)
- Layer tự chuyển về layer của đường pline có độ dày là 2 (laymcur)
- Khi dánh lệnh pline thì nó tự có bề dày bằng 2, bằng theo bề dày của pline vừa phá từ block ra
> MOng cả nhà giúp đỡ. Chân thành cám on!
  • 0

#2 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 17 July 2011 - 12:55 PM

Quick code cho bạn đây :
(defun c:1 (/ blk pl plw elast)
(setq blk (car(entsel "\nCh\U+1ECDn Block : ")) elast (entlast))
(command "explode" blk)
(setq pl (entget(entnext elast)))
(if (setq plw (assoc 370 pl))(setvar "PLINEWID" (/(cdr plw) 100.0)))
(setvar "clayer" (cdr (assoc 8 pl)))
)

  • 1

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


#3 bachngoctung

bachngoctung

    biết lệnh copy

  • Members
  • PipPipPip
  • 115 Bài viết
Điểm đánh giá: 11 (tàm tạm)

Đã gửi 17 July 2011 - 02:14 PM

-Cám ơn ketxu nhiều, mình đã test thử và thấy giải quyết được 2 vấn đề đầu tiên là phá vỡ block và chuyển layer hiện hành về layer của đuờng pline vừa phá block. Tuy nhiên vấn đề thứ 3 là mình thực hiện lệnh vẽ plne ngay sau đó thì bề dày của đường pline mới không bằng bề dày của đường pline trong block mà mình vừa phá ra. Tóm lại là khi đánh lệnh pline mới thì nó sẽ được MATCHPROP bề dày theo bề dày của pline trong block vừa được phá ra lúc trước. Nhờ ketxu ngâm cứu thêm dc ko?. Cám ơn!
  • 0

#4 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 17 July 2011 - 03:01 PM

-Cám ơn ketxu nhiều, mình đã test thử và thấy giải quyết được 2 vấn đề đầu tiên là phá vỡ block và chuyển layer hiện hành về layer của đuờng pline vừa phá block. Tuy nhiên vấn đề thứ 3 là mình thực hiện lệnh vẽ plne ngay sau đó thì bề dày của đường pline mới không bằng bề dày của đường pline trong block mà mình vừa phá ra. Tóm lại là khi đánh lệnh pline mới thì nó sẽ được MATCHPROP bề dày theo bề dày của pline trong block vừa được phá ra lúc trước. Nhờ ketxu ngâm cứu thêm dc ko?. Cám ơn!

THực chất biến Plinewid đã làm thay đổi bề rộng của Pline (mặc dù trong Properties báo ByLayer). Bạn có thể nhìn thấy thay đổi khi bật LWT lên, hoặc nhìn vào phần Global width của Pline
  • 1

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


#5 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 July 2011 - 03:01 PM

-Cám ơn ketxu nhiều, mình đã test thử và thấy giải quyết được 2 vấn đề đầu tiên là phá vỡ block và chuyển layer hiện hành về layer của đuờng pline vừa phá block. Tuy nhiên vấn đề thứ 3 là mình thực hiện lệnh vẽ plne ngay sau đó thì bề dày của đường pline mới không bằng bề dày của đường pline trong block mà mình vừa phá ra. Tóm lại là khi đánh lệnh pline mới thì nó sẽ được MATCHPROP bề dày theo bề dày của pline trong block vừa được phá ra lúc trước. Nhờ ketxu ngâm cứu thêm dc ko?. Cám ơn!

Ketxu đi vắng, bạn thay dòng dưới đây xem sao hè, nếu không được thì đợi Ketxu về sửa!
Thay dòng:
(if (setq plw (assoc 370 pl)) (setvar "PLINEWID" (/ (cdr plw) 100.0)))
Bởi dòng:
(setvar "PLINEWID" (cdr (assoc 40 pl)))
P/S: sorry Ketxu, bạn đã về! 3h03'
  • 2

* 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.


#6 bachngoctung

bachngoctung

    biết lệnh copy

  • Members
  • PipPipPip
  • 115 Bài viết
Điểm đánh giá: 11 (tàm tạm)

Đã gửi 17 July 2011 - 11:36 PM

-Tuyệt vời cám ơn Doan Van Ha đã hoàn thiện nốt giúp mình, cám ơn ketxu.
- Tuy nhiên mình muốn nhờ thêm một đoạn code nữa làm sao nó MATCHROP Linetype scale của đường pline vừa bị phá ra từ block đó. Ví dụ nó là dạng đường nét đứt có Linetype scale là 30 thì đường pline tiếp theo được vẽ sau khí phá block thì cũng là 30.
- Chân thành cám ơn!
  • 0

#7 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 18 July 2011 - 10:13 AM

-Tuyệt vời cám ơn Doan Van Ha đã hoàn thiện nốt giúp mình, cám ơn ketxu.
- Tuy nhiên mình muốn nhờ thêm một đoạn code nữa làm sao nó MATCHROP Linetype scale của đường pline vừa bị phá ra từ block đó. Ví dụ nó là dạng đường nét đứt có Linetype scale là 30 thì đường pline tiếp theo được vẽ sau khí phá block thì cũng là 30.
- Chân thành cám ơn!

Bạn thêm dòng dưới đây:
(setvar "CELTSCALE" (cdr (assoc 48 pl)))
Vào bên dưới dòng dưới đây là được:
(setvar "PLINEWID" (cdr (assoc 40 pl)))
  • 1

* 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.


#8 bachngoctung

bachngoctung

    biết lệnh copy

  • Members
  • PipPipPip
  • 115 Bài viết
Điểm đánh giá: 11 (tàm tạm)

Đã gửi 18 July 2011 - 11:47 AM

-Cám ơn Doan Van Ha, cho mình hỏi chút là mấy thông số (setvar "CELTSCALE" (cdr (assoc 48 pl))) bạn đọc từ tài liệu nào vậy, nếu có thể thì gửi cho mình đuợc không?. Nhiều tài liệu autolisp thì tốt, lần sau mình sẽ chủ động đưa code lên rồi nhờ a em chỉnh sửa, cùng nhau thảo luận.
-Mail của mình: bachngoctung@gmail.com
  • 0

#9 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 18 July 2011 - 01:38 PM

-Cám ơn Doan Van Ha, cho mình hỏi chút là mấy thông số (setvar "CELTSCALE" (cdr (assoc 48 pl))) bạn đọc từ tài liệu nào vậy, nếu có thể thì gửi cho mình đuợc không?. Nhiều tài liệu autolisp thì tốt, lần sau mình sẽ chủ động đưa code lên rồi nhờ a em chỉnh sửa, cùng nhau thảo luận.
-Mail của mình: bachngoctung@gmail.com

1). 40, 48... là mã DXF của đối tượng, dùng hàm entget thì biết được, nhưng bạn phải có những hiểu biết về cơ sở dữ liệu của đối tượng. Nó có hàng trăm mã DXF lận.
2). Plinewid, Celtscale... là biến hệ thống cần đặt tương ứng. Bạn vào Express -> Tools -> System Variable Editor để xem giá trị hiện hành hoặc đặt lại.
3). Sách thì bạn down trên mạng, vào google tìm là có, nhưng ít sách hay, tôi cũng thế thôi, và chủ yếu đọc help, chứ không ai nhớ nỗi.
Vài lời vậy bạn nhé, chúc bạn thành công!
  • 1

* 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.


#10 bachngoctung

bachngoctung

    biết lệnh copy

  • Members
  • PipPipPip
  • 115 Bài viết
Điểm đánh giá: 11 (tàm tạm)

Đã gửi 18 July 2011 - 01:49 PM

-Cám ơn Doan Van Ha, chúc ban vui vẻ & thành công. Mình sẽ ngâm cứu.
  • 0

#11 bachngoctung

bachngoctung

    biết lệnh copy

  • Members
  • PipPipPip
  • 115 Bài viết
Điểm đánh giá: 11 (tàm tạm)

Đã gửi 26 November 2012 - 01:55 PM

Chào cả nhà. Theo như hướng dẫn chỉnh sửa của Doan Van Ha mình đã thêm các dòng mã và được lisp như mình up kèm.
Lúc trước mình sửa thì dùng được luôn, nhưng đến hôm nay cần dùng và app lại lisp thì lại ko được ở vấn đề " Layer tự chuyển về layer của đường pline có độ dày là 2 (laymcur)"
- Quá trình thực hiện nó bão lỗi như sau:
Command: AC
Chọn Block : explode
Select object:
Command: ; error: AutoCAD variable setting rejected: "CELTSCALE" nil
Mình cũng đã thử tải lại lisp gốc của ketxu và làm lại theo huong dan của Doan Van Ha nhưng kết quả vẫn vậy.
Rất mong được giúp đỡ.
Thanks!!!
  • 0

#12 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 26 November 2012 - 03:11 PM

Bạn thay dòng dưới đây:
(setvar "CELTSCALE" (cdr (assoc 48 pl)))
Thành dòng này chắc được:
(setvar "CELTSCALE" (cond ((cdr (assoc 48 pl))) (1.0)))
  • 1

* 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.


#13 bachngoctung

bachngoctung

    biết lệnh copy

  • Members
  • PipPipPip
  • 115 Bài viết
Điểm đánh giá: 11 (tàm tạm)

Đã gửi 26 November 2012 - 03:52 PM

Cám ơn Doan Va Ha nhé. Chờ đến ngày offline Hà Nội, anh em gặp mặt nhau cái. Hôm nọ lỡ mất tiếc quá.
  • 0