Đến nội dung


Hình ảnh
- - - - -

[Yêu cầu] Lisp vẽ đai móc


  • Please log in to reply
30 replies to this topic

#21 hugo007

hugo007

    biết lệnh erase

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

Đã gửi 02 August 2011 - 09:51 PM

Nếu từ đầu đã có cái file như bên dưới thì mọi người chẳng mất quá nhiều thời gian để xử lý bài toán của bạn rồi.

(defun c:moc ()
(if (not (tblsearch "layer" "daimoc"))
(command "-LAYER" "m" "daimoc" "c" 1 "daimoc" "" )
(setvar "clayer" "daimoc" )
)
(setq ss
(ssadd
(entmakex '(
(0 . "LWPOLYLINE") (100 . "AcDbEntity") (67 . 0) (8 . "daimoc")
(100 . "AcDbPolyline") (90 . 6) (70 . 0) (43 . 0) (38 . 0) (39 . 0)
(10 84.67697199678696 -429.3909937113676) (40 . 0) (41 . 0) (42 . 0)
(10 -12.94293644983736 -65.06853555834368) (40 . 0) (41 . 0) (42 . -0.493145426031304)
(10 59.5015005218429 29.3428928243452) (40 . 0) (41 . 0) (42 . 0)
(10 968.2754701986995 29.3428928243452) (40 . 0) (41 . 0) (42 . -0.9553521308632)
(10 961.4360737523748 -120.3446071756548) (40 . 0) (41 . 0) (42 . 0)
(10 811.4360737523748 -120.3446071756548) (40 . 0) (41 . 0) (42 . 0)))
(ssadd))
blkName "#caiblocknaytenphaidai"
)
(if (not (tblsearch "block" blkName))
(progn (command "-block" blkName '(0 0 0) (eval ss) ""))
)
(while (setq pt (getpoint "\n\U+0110i\U+1EC3m ch\U+00E8n :"))
(command "-insert" blkName "s" 1 pt "")
(command "._explode" (entlast))
)
(command ".erase" ss "")
(princ)
)

Cảm phiền bác xem lại giúp e lisp nó vẫn còn 1 lỗi nhỏ.Đánh lệnh MOC lần đầu thì ok,đánh tiếp lần hai nó tự tạo ra cái đai móc hình như nằm ở toạ độ 0.0 và vẫn cho mình chọn điểm chèn để vẽ tiếp.Thanks.
  • 0

#22 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 02 August 2011 - 10:44 PM

Bạn đã xem kỹ là nó sẽ xóa cái đối tượng ở (0 0) đó đi không :) Mình dùng thấy bình thường nên hơi khó nói :unsure:
  • 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


#23 hugo007

hugo007

    biết lệnh erase

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

Đã gửi 02 August 2011 - 10:48 PM

Bạn đã xem kỹ là nó sẽ xóa cái đối tượng ở (0 0) đó đi không :) Mình dùng thấy bình thường nên hơi khó nói :unsure:

Nó không xoá bạn ah,chắc do cad 2007 nó bị vậy,để mai vào cty thử với cad cao hơn xem có bị không?Thanks.
  • 0

#24 duy782006

duy782006

    PHẠM QUỐC DUY

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

Đã gửi 03 August 2011 - 07:45 AM

Vấn đề này hình như không phức tạp lắm mà thấy qua lại khá nhiều bài rồi cứ thấy bài mới mình lại nhảy vào dòm ngó và thấy rằng đang không hiệu quả nên.
-Đề nghị hugo007 ra lại đề bài 1 cách tổng quát:
+Bạn muốn thao tác nhập như nào.
+Kết quả nhận được như nào.
-Gợi ý cách ra đề:
+Hỏi điểm chèn. (điểm chèn là điểm nào trong cái hình bạn vẽ)
+Hỏi hệ số scale. (nghĩa là cái hình bạn vẽ mẫu sẽ nhân với hệ số này).
+Hỏi có đánh kích thước không. (kích thước sẽ lấy dim hiện hành để đánh).
+Nếu đánh khích thước thì đánh ở những vị trí nào.
*Up lại file hình chuẩn chưa scale thể thiện đúng layer, color, và các thuộc tính khác.
  • 0

Cứ ngỡ trần gian là cõi thật.Cho nên tất bật đến bây giờ.
Tạo hộp thoại bằng lisp My blog QUY ĐỊNH ĐẶT TÊN TOPIC TRONG CHUYÊN MỤC LISPD http://ktsduy.wordpress.com/
Để cám ơn chỉ cần nhấn rep_up.png
(Là nhấn vào nút đó phía bài viết của người ta í chứ đừng có nhè cái hình này mà nhấn miết đi nha :-D


#25 hugo007

hugo007

    biết lệnh erase

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

Đã gửi 03 August 2011 - 08:44 AM

Vấn đề này hình như không phức tạp lắm mà thấy qua lại khá nhiều bài rồi cứ thấy bài mới mình lại nhảy vào dòm ngó và thấy rằng đang không hiệu quả nên.
-Đề nghị hugo007 ra lại đề bài 1 cách tổng quát:
+Bạn muốn thao tác nhập như nào.
+Kết quả nhận được như nào.
-Gợi ý cách ra đề:
+Hỏi điểm chèn. (điểm chèn là điểm nào trong cái hình bạn vẽ)
+Hỏi hệ số scale. (nghĩa là cái hình bạn vẽ mẫu sẽ nhân với hệ số này).
+Hỏi có đánh kích thước không. (kích thước sẽ lấy dim hiện hành để đánh).
+Nếu đánh khích thước thì đánh ở những vị trí nào.
*Up lại file hình chuẩn chưa scale thể thiện đúng layer, color, và các thuộc tính khác.

Cảm ơn bác duy,e sẽ rút kinh nghiệm,yêu cầu của e đã được bác ketxu giúp đỡ xong nhưng vẫn còn lỗi khi đánh lệnh lần đầu thì ok,nhưng đánh lần 2 thì nó tự vẽ một cái móc ở toạ độ 0.0 và vẫn kêu chọn điểm chèn để vẽ đâm ra khi dùng lệnh lần 2 nó vẽ dư một cái tại toạ độ 0.0 mặc dù đã thử các đời cad.Mong các bác giúp đỡ.
  • -1

#26 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 03 August 2011 - 10:13 AM

Cảm ơn bác duy,e sẽ rút kinh nghiệm,yêu cầu của e đã được bác ketxu giúp đỡ xong nhưng vẫn còn lỗi khi đánh lệnh lần đầu thì ok,nhưng đánh lần 2 thì nó tự vẽ một cái móc ở toạ độ 0.0 và vẫn kêu chọn điểm chèn để vẽ đâm ra khi dùng lệnh lần 2 nó vẽ dư một cái tại toạ độ 0.0 mặc dù đã thử các đời cad.Mong các bác giúp đỡ.

Bạn thêm dòng : (entdel (entlast))
Vị trí thêm
......
(if (not (tblsearch "block" blkName))
(progn (command "-block" blkName '(0 0 0) (eval ss) ""))
(entdel (entlast))
)
......
  • 1

#27 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 03 August 2011 - 11:08 AM

Cái này bác Tuệ cũng nên test thử, vì với Cad08 của e thì -block ở chế độ Delete, tránh trường hợp del nhầm entlast khá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


#28 t031285

t031285

    biết vẽ rectang

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

Đã gửi 03 August 2011 - 07:42 PM

Cái này bác Tuệ cũng nên test thử, vì với Cad08 của e thì -block ở chế độ Delete, tránh trường hợp del nhầm entlast khác ^^

-BLOCK ở chế độ Delete,chỉnh làm sao để nó ở chế độ Delete vậy bạn?Thanks.
  • 0

#29 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 03 August 2011 - 10:26 PM

Mình không rõ lắm, vì ở máy mình là nó cứ del thôi ^^

The program defines a block using the objects selected, the insertion base point, and the name provided, and then erases the selected objects from the drawing


  • 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


#30 790312

790312

    biết lệnh fillet

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

Đã gửi 28 August 2011 - 04:19 PM

Nếu từ đầu đã có cái file như bên dưới thì mọi người chẳng mất quá nhiều thời gian để xử lý bài toán của bạn rồi.

(defun c:moc ()
(if (not (tblsearch "layer" "daimoc"))
(command "-LAYER" "m" "daimoc" "c" 1 "daimoc" "" )
(setvar "clayer" "daimoc" )
)
(setq ss
(ssadd
(entmakex '(
(0 . "LWPOLYLINE") (100 . "AcDbEntity") (67 . 0) (8 . "daimoc")
(100 . "AcDbPolyline") (90 . 6) (70 . 0) (43 . 0) (38 . 0) (39 . 0)
(10 84.67697199678696 -429.3909937113676) (40 . 0) (41 . 0) (42 . 0)
(10 -12.94293644983736 -65.06853555834368) (40 . 0) (41 . 0) (42 . -0.493145426031304)
(10 59.5015005218429 29.3428928243452) (40 . 0) (41 . 0) (42 . 0)
(10 968.2754701986995 29.3428928243452) (40 . 0) (41 . 0) (42 . -0.9553521308632)
(10 961.4360737523748 -120.3446071756548) (40 . 0) (41 . 0) (42 . 0)
(10 811.4360737523748 -120.3446071756548) (40 . 0) (41 . 0) (42 . 0)))
(ssadd))
blkName "#caiblocknaytenphaidai"
)
(if (not (tblsearch "block" blkName))
(progn (command "-block" blkName '(0 0 0) (eval ss) ""))
)
(while (setq pt (getpoint "\n\U+0110i\U+1EC3m ch\U+00E8n :"))
(command "-insert" blkName "s" 1 pt "")
(command "._explode" (entlast))
)
(command ".erase" ss "")
(princ)
)

Cho mình hỏi nếu muốn móc này quay lên trên không quay xuống dưới thì sửa làm sao?Thanks.
  • 0

#31 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 28 August 2011 - 04:50 PM

Bạn thay dòng này :
(command "-insert" blkName "s" 1 pt "")
bằng dòng này :
(command "-insert" blkName pt "" "" 180)
Thay số 180 bằng góc bạn muốn
  • 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