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.
Jin Yong

Hỏi về Lisp (thuật toán, ý tưởng, coding,...)

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

Tot77    501

Cái 90,91 không có cũng vẫn tạo dc pline.

42 là arc nếu /= 0

Còn xdata là thông tin ghi thêm và lưu vào pline.

thí dụ : (setq xdata '((-3 ("NHOC" (1000 . "Nhoc is handsome") (1000 . "And intelligent")))))

muốn coi xdata thì (assoc -3 (entget (car (entsel)) '("NHOC")))))

  • Vote tăng 1
  • 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
phamthanhbinh    3.123

- thank a 7 nhoc quên phén thằng 90 ^^

- thank a Bình ,hi cái mũi tên a Bình vẽ to quá ^^, mà hình như dư 1 điểm đầu thì phải a nhỉ  :P , hàm của anh Bình chuyền tham số đỡ nhọc hơn hàm của nhoc mót nhỉ

- thằng 42, 91 nó là gì mấy a nhỉ, nhoc xem trong help mà chưa hiểu, còn cái xdata trong hàm mót của nhoc nhoc cũng ko hiểu nó là gi

Hề hề hề,

To hay bé là do mình lựa chọn thôi mà, Nhóc cứ thay thế thoải mái theo ý nhóc.

Dư điểm đầu là do ..... dư, nếu nhóc bỏ điểm này thì phải sửa (90 . 4) thành (90 . 3)

Thằng 42 gọi là hệ số bulge của đoạn polyline , nếu thẳng thì nó bằng 0 và nếu >< 0 thì đoạn đó cong.

Thằng 91 là cái chi chi thì không rõ bởi trong các mã cơ bản của Lwpolyline không thấy nói đến nó.

Xdata bác Tot77 đã giải thích.

Thực ra thì trong đoạn code của mình gửi có thể bỏ béng thằng (210 .......), như vậy sẽ gọn hơn. Mã 90 không bỏ được, thậm chí đổi vị trí của nó trong elist cũng phải coi chừng đó.

  • 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
nhoclangbat    382

- tiện nhoc đang nghỉ giải lao giữa hiệp đo ^^, nhoc muốn hỏi tham khảo trước mấy anh, mình có thể tạo điểm point = entmake đc ko nhỉ, lúc trước nhoc thử tạo = command nhưng nhoc ko set đc type với kích thước của nó, mà thang point này ko thoát đc = enter mới ghê, nhoc cũng quên entget nó thử bao giờ nên chưa pit nó ra sao,mấy anh gợi ý giúp nhoc ^^

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
hiepttr    523

entmake và command đều được Nhóc ah! (đều tạo đc point)

Song set type thì chắc là thao tác khác :D :D :D

p/s:

Tham khảo biến PDMODE, PDSIZE

  • 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
nhoclangbat    382

^^ thì vậy mới khổ, tạo đc đưa điêm chèn vô đc nhung ko set đc type với size, nếu siêng thì định dạng nó trước rùi chạy ^^, nhoc mới nghĩ ko pit entmake có can thiệp đc ko, để khi nào về nhoc entget thử mò xem nó thế nào

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
phamthanhbinh    3.123

^^ thì vậy mới khổ, tạo đc đưa điêm chèn vô đc nhung ko set đc type với size, nếu siêng thì định dạng nó trước rùi chạy ^^, nhoc mới nghĩ ko pit entmake có can thiệp đc ko, để khi nào về nhoc entget thử mò xem nó thế nào

Hề hề hề,

Trong các mã dxf của một point, chả có mã nào liên quan tới pdmode hay pdsize cả. Vậy nên chớ có mong dùng enmake để tạo được nó. 

Cần nhớ rằng pdmode và pdsize là các biến hệ thống, ảnh hưởng tới toàn bộ bản vẽ chứ không phải chỉ ảnh hưởng tới điểm vừa tạo ra.

Vậy nên Nhóc cần xem xét kỹ yêu cầu của mình. Nếu chỉ là đánh dấu đểm được tạo ra, sao không nghĩ tới việc tạo một block ưa nhìn và gắn nó vào điểm vừa tạo được.????

  • 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
nhoclangbat    382

 - thật ra nhoc cũng tính dùng block, mà block phải vẽ trước hơi làm biếng ^^, tính vẽ lun trong lsp nhưng chưa pit làm cách nào, tại block nhoc mún tạo dạng chữ thập, nếu liền 1 khối thì đc, đằng này chữ thập nó rời nhoc khọng biết chọn hết kỉu nào, nên nhoc mới nghĩ chuyễn qua thử dùng point xem có khả thi ko ^^

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
phamthanhbinh    3.123

 - thật ra nhoc cũng tính dùng block, mà block phải vẽ trước hơi làm biếng ^^, tính vẽ lun trong lsp nhưng chưa pit làm cách nào, tại block nhoc mún tạo dạng chữ thập, nếu liền 1 khối thì đc, đằng này chữ thập nó rời nhoc khọng biết chọn hết kỉu nào, nên nhoc mới nghĩ chuyễn qua thử dùng point xem có khả thi ko ^^

Hề hề hề,

Vậy thì có thể nhóc cứ tạo block chữ thập rồi sau khi insert thì explode nó sẽ được hai line rời thôi 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
nhoclangbat    382

- ý nhoc là tạo block dạng chữ thập trực tiếp trong lsp lun ấy, rùi gọi nó trog lsp insert vào bản vẽ lun, ko cần phải tạo ngoài bản vẽ 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
phamthanhbinh    3.123

- ý nhoc là tạo block dạng chữ thập trực tiếp trong lsp lun ấy, rùi gọi nó trog lsp insert vào bản vẽ lun, ko cần phải tạo ngoài bản vẽ trước ^^

Hề hề hề,

Nhóc học viết lisp rùi mà. Hoàn toàn Nhóc có thể viết một hàm con để tạo cái block như mong muốn rùi xài nó trong cái lisp chính của Nhóc mà. Cứ mạnh dạn mà mần đi, sai đâu sửa đó là Ok mà. Miễn rằng đừng sai đây sửa đó thôi.

Hề hề hề,...

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
hiepttr    523

ý Nhóc là: nếu 1 đối tượng thì có thể dùng entlast để "hứng" còn nhiều hơn 1 thì chưa biết cách chứ gì ???

Có 2 lựa chọn (đối với mình):

1. Sữ dụng nhiều lần entlast thủ công ^^

2. Sữ dụng entlast để đánh dấu "thằng" vừa vẽ xong >>> vẽ các đối tượng con của block & dùng while+entlast để hứng từng thằng một.

 

p/s Thật ra bản chất phương án 2 cũng là phương án 1. Chỉ có điều là cad tự nhận biết số đối tượng đc tạo ra (n) và áp đúng n lần entlast

  • 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
Namvanvo    42


(defun c:acb(/ oldlayer ra ty p1 p2)
(setq oldlayer (getvar "CLAYER")
ra 5)
(if (not (tblsearch "layer" "MSL-CLOUD"))
(command ".layer" "M" "MLS-CLOUD" "C" "5" "" "L" "Continuous" "" "")
( setvar "clayer" "MLS-CLOUD"))
(setq ty (strcase(getstring "\nThe type of cloudmark [Rectang/Poline]:")))
(cond ((= ty "R");types
(setq p1 (getpoint "\nDiem dau HCN")
p2 (getcorner p1 "\nDiem Cuoi HCN:"))
(command ".rectangle" p1 p2)
(command ".revcloud" "A" ra "" "O" (entlast) ""))
((/= ty "R") (command ".pline")(while (= 1 (logand 1 (getvar 'cmdactive)))
(command "\\")
);end while
(command ".revcloud" "A" ra "" "O" (entlast) ""))
);end cond
(setvar "CLAYER" oldlayer)
(princ)
)

Các bạn cho mình hỏi: sau khi active cái layer "MLS-CLOUD", nếu chưa thực hiện xong lisp mà mình nhấn ESC để thoát ra, không thực hiện tiếp thì làm thế nào để kích hoạt lại cái oldlayer?

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
Tot77    501

Khi nhấn esc giữa chừng thì coi như bạn kích hoạt hàm *error* của lsp, do đó bạn phải định nghĩa lại hàm *error* như sau:


 



(defun *error* ( msg )
  (if oldlayer (setvar "CLAYER" oldlayer))
  (*error* msg)
)

  (if oldlayer (setvar "CLAYER" oldlayer))

  (*error* msg)

)

  • 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
Namvanvo    42

 

Khi nhấn esc giữa chừng thì coi như bạn kích hoạt hàm *error* của lsp, do đó bạn phải định nghĩa lại hàm *error* như sau:

 

(defun *error* ( msg )
  (if oldlayer (setvar "CLAYER" oldlayer))
  (*error* msg)
)
  (if oldlayer (setvar "CLAYER" oldlayer))
  (*error* msg)
)

Thank Tot77, chạy ok, tuy nhiên khi nhấn ESC xong thì phải đợi một khoảng thời gian tầm 1 phút rồi nó xuất hiện "type Y to reset", có cách nào khắc phục tình trạng phải đợi này không Tot77, và không xuất hiện dòng nhắc type Y luôn thì càng chuẩn, mặc định cho nó tự type Y luô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
Namvanvo    42

Thank Tot77, chạy ok, tuy nhiên khi nhấn ESC xong thì phải đợi một khoảng thời gian tầm 1 phút rồi nó xuất hiện "type Y to reset", có cách nào khắc phục tình trạng phải đợi này không Tot77, và không xuất hiện dòng nhắc type Y luôn thì càng chuẩn, mặc định cho nó tự type Y luôn?

Mình mò được rồi,  bỏ dòng 

(*error* msg), không biết khi bỏ đi thì có ảnh hưởng gì tới hàm không? 

Bác có thể diễn giải thêm về cái hàm này được không?

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

Mình vừa nhỡ tay ấn nhầm nút Edit chứ k phải nút Reply, làm mất bài của bạn ToT trả lời. Phiền bạn Tot7 post lại cái lisp giúp Namvanvo nhé

 

P/s : bỏ (*error* msg), sửa thành (princ msg).

Tot77 đang vô tình chạy 1 vòng tuần hoàn không có lối thoát

  • 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
Tot77    501

Ket nói đúng đó, chẳng qua muốn viết gọn lại nên thế. Bạn Nam làm theo Ket nói.

P/S : giờ mới biết mod có quyền edit, delete mọi cái post nhỉ  :P  :P

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


×