Đến nội dung


Hình ảnh
- - - - -

Nhờ các cao thủ viết dùm Lisp vẽ Wipeout


  • Please log in to reply
8 replies to this topic

#1 auduongphuc

auduongphuc

    biết zoom

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

Đã gửi 05 November 2010 - 02:15 PM

Tình hình là trong các bản vẽ Cad của mình rất hay dùng Wipeout để che các đối tượng khác, nhưng mỗi lần vẽ nó phải click thủ công => rất là lâu.nhiều khi đang vẽ, phải làm việc gì khác, quên nhấn ESC là y như rằng phải vẽ lại từ đầu.trong lệnhWipeout cũng có phần tùy chọn để chọn Pline.Nhưng chỉ sử dụng được cho đoạn thẳng,
Giờ mình muốn nhờ các cao thủ viết dùm 1 Lisp, có thể chọn được tất cả các đối tượng : đường cong, Spline, Pline có cả đường cong ở trong đó...,nói chung là những đối tượng khép kín.
rất mong sớm nhận được sự giúp đỡ. Mình cảm ơn rất nhiều
Chúc CadViet ngày càng thành công.
  • 0

#2 maihanh191

maihanh191

    biết lệnh scale

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

Đã gửi 05 November 2010 - 02:45 PM

Tình hình là trong các bản vẽ Cad của mình rất hay dùng Wipeout để che các đối tượng khác, nhưng mỗi lần vẽ nó phải click thủ công => rất là lâu.nhiều khi đang vẽ, phải làm việc gì khác, quên nhấn ESC là y như rằng phải vẽ lại từ đầu.trong lệnhWipeout cũng có phần tùy chọn để chọn Pline.Nhưng chỉ sử dụng được cho đoạn thẳng,
Giờ mình muốn nhờ các cao thủ viết dùm 1 Lisp, có thể chọn được tất cả các đối tượng : đường cong, Spline, Pline có cả đường cong ở trong đó...,nói chung là những đối tượng khép kín.
rất mong sớm nhận được sự giúp đỡ. Mình cảm ơn rất nhiều
Chúc CadViet ngày càng thành công.

deufun c:wi:­wipeout
chon doi tuong
tat ca loai duong
nhan space de thuc hien lenh

finish!
:)
  • 0

#3 auduongphuc

auduongphuc

    biết zoom

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

Đã gửi 08 November 2010 - 03:09 PM

deufun c:wi:­wipeout
chon doi tuong
tat ca loai duong
nhan space de thuc hien lenh

finish!
:)

Ý của bạn "maihanh191" như vậy là sao? mình ko biết nên mới nhờ giúp đỡ, nếu ko được, hay có lý do gì thì cứ nói, đâu cần phải châm chọc nhau như vậy. ko được hay lắm đâu.
có ai biết thì chỉ dùm mình, thank's
  • 0

#4 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 08 November 2010 - 03:19 PM

Ý của bạn "maihanh191" như vậy là sao? mình ko biết nên mới nhờ giúp đỡ, nếu ko được, hay có lý do gì thì cứ nói, đâu cần phải châm chọc nhau như vậy. ko được hay lắm đâu.
có ai biết thì chỉ dùm mình, thank's

Chào bạn Auduongphuc,
Vấn đề của bạn có chút rắc rồi đối với đường spline, nếu chỉ là các polyline thì vấn đề sẽ đơn giản hơn. Hiện mình đang theo hướng chuyển spline thành polyline song như vậy không biết bạn có đồng ý không vì có thể cái Wipeout này sẽ không che hết spline của bạn.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#5 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 08 November 2010 - 03:31 PM

Đã có bài bàn về vấn đề này rồi bạn ạ.Wipeout cho đường cong là rất khó,lúc đó phải chia ra thành rất nhiều đoạn thẳng nhỏ.Bạn thử tham khảo giải pháp hatch solid trong bài này xem sao

http://www.cadviet.c...o...c=24041&hl=
  • 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


#6 Thaistreetz

Thaistreetz

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 903 Bài viết
Điểm đánh giá: 505 (tốt)

Đã gửi 08 November 2010 - 05:12 PM

Vì wipeout chỉ làm việc với pline đóng và được cấu tạo bởi hoàn toàn là các đoạn thẳng nên có thể dùng xử lý trường hợp này bằng cách vẽ lại đường pline (gồm cả các đoạn cong) hoặc spline bằng 1 đường Pline được chia nhỏ bởi các đoạn thẳng (độ dài các đoạn thẳng đó là tùy ý người dùng). Lisp này trên diễn đàn có rất lâu rồi thì phải, bạn chịu khó search sẽ ra thôi. Mình cũng hay dùng cách này
  • 0

Hình đã gửi
IN HIM, I TRUST. THE TRUST IN MY GOD


#7 Thaistreetz

Thaistreetz

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 903 Bài viết
Điểm đánh giá: 505 (tốt)

Đã gửi 08 November 2010 - 05:21 PM

Chức năng tìm kiếm của diễn đàn hình như đang bị lỗi.
Mình post lại lisp của bác ssg cho bạn
;;***********************************************************
;;;CONVERT TO PLINES PROGRAM WITH FULL COMMENTS!
;;;Convert all objects: Line, Pline, Spline, Arc, Circle, Ellipse_
;;;to Plines. Length of 1 segment is specified by user
;;;Copy & Paste to Notepad, Saveas *.lsp, Appload then Type C2P to run
;;;Happy New Year 2008!
;;;Written by ssg - January 2008 - www.cadviet.com
;;;***********************************************************

;;;-------------------------------------------------------------
(defun makepl ( e d1 / ps pe d d2 p2);;;Make pline along curve e. Length of 1 segment = d1
(vl-load-com);;;Load Visual LISP extensions before use vlax-xxxx functions
(setq
ps (vlax-curve-getStartPoint e);;;Start point
pe (vlax-curve-getEndPoint e);;;End point
d (vlax-curve-getDistAtParam e (vlax-curve-getEndParam e));;;Length of curve e
d2 d1;;;Init variable distance
)
(command "pline");;;Call pline command
(command ps);;;Start point
(while (<= d2 d);;;While not over end point pe
(setq p2 (vlax-curve-getPointAtDist e d2));;;Variable point at d2 = length along curve
(command p2);;;Continue pline command from current point to p2
(setq d2 (+ d2 d1));;;Increase distance d2 by d1
);;;End while
(command pe "");;;Pline to pe and finish command
)
;;;-------------------------------------------------------------
(defun C:C2P( / d1 ss oldos i e ans);;;Convert to Plines
(if (not d0) (setq d0 0.5));;;Init dividual distance, global variable
(setq d1 (getreal (strcat "\nLength of 1 segment <" (rtos d0) ">:")));;;Input distance
(if d1 (setq d0 d1) (setq d1 d0));;;Reset or get distance
(setq
ss (ssget '((0 . "LINE,LWPOLYLINE,SPLINE,ARC,CIRCLE,ELLIPSE")));;;Selection set
oldos (getvar "osmode");;;Save osmode
i 0;;;Init counter
)
(setvar "osmode" 0);;;Disable osmode
(repeat (sslength ss);;;Repeat for all entities in ss
(setq e (ssname ss i));;;Set e for entity with ordinal i in selection set ss
(makepl e d1);;;Use makepl function. Make pline along e
(setq i (1+ i));;;Increase counter
)
(initget "Y N");;;Init keywords
(setq ans (getkword "\nDelete source objects? [Yes/No] :"));;;Get answer from user
(if (= ans "Y") (command "erase" ss ""));;;Erase source objects if ans = "y" or "Y"
(setvar "osmode" oldos);;;Reset osmode
(princ);;;Silent quit
)
;;;-------------------------------------------------------------

  • 2

Hình đã gửi
IN HIM, I TRUST. THE TRUST IN MY GOD


#8 KS.PhanThanhTu

KS.PhanThanhTu

    biết vẽ point

  • Members
  • PipPip
  • 97 Bài viết
Điểm đánh giá: 76 (tàm tạm)

Đã gửi 09 November 2010 - 07:41 PM

Nếu về quan niệm lập trình

Tạo đối tượng wipeout không thông qua command có sẵn của Cad đối với VBA là khó , Lisp thì mình ko dám chắc lắm

Bởi lẽ không có đối tượng được hỗ trợ nào trong Vba cad có nghĩa là wipeout và lisp cũng vậy

đối tượng này đc tạo qua việc load object arx Wipeout , mà việc sử dụng cái này thì mình chưa rõ lắm :)

Chắc chỉ còn cách chuyển tất cả về pline rồi phải dùng lệnh Wipeout có sẵn thôi, mặc dù chưa cảm thấy thỏa mãn lắm :D
  • 0
KS Phan Thanh Tú.Email: Vansulich@yahoo.com

#9 Thaistreetz

Thaistreetz

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 903 Bài viết
Điểm đánh giá: 505 (tốt)

Đã gửi 10 November 2010 - 01:30 AM

Nếu về quan niệm lập trình

Tạo đối tượng wipeout không thông qua command có sẵn của Cad đối với VBA là khó , Lisp thì mình ko dám chắc lắm

Bởi lẽ không có đối tượng được hỗ trợ nào trong Vba cad có nghĩa là wipeout và lisp cũng vậy

đối tượng này đc tạo qua việc load object arx Wipeout , mà việc sử dụng cái này thì mình chưa rõ lắm :iluvyousmiley:

Chắc chỉ còn cách chuyển tất cả về pline rồi phải dùng lệnh Wipeout có sẵn thôi, mặc dù chưa cảm thấy thỏa mãn lắm :D

Đối tuợng wipeout có record dữ liệu mô tả rất rõ ràng (mình thử với cad2010). như vậy về nguyên tắc hoàn toàn có thể sử dụng hàm entmake để tạo ra 1 đối tuợng WIPEOUT. Tuy nhiên theo như mình hiểu thì đây lại là 1 đối tuợng phức và mỗi 1 đối tuợng wipeout có 1 UCS riêng. việc chuyển đổi toạ độ các đỉnh của wipeout cần tao từ UCS hiện hành sang UCS của chính wipeout đó thực sự là khá phức tạp và nhức đầu. Thôi thì cứ chơi hàm command cho lành, lisp chạy chậm 1 chút nhưng code đơn giản dễ đọc, dễ hiểu, dễ sử dụng. đỡ mệt mỏi với mấy cái ma trận biến đổi tọa độ. Mình thấy ngay cả các lisp trong express tool họ cũng chỉ xài hàm command
  • 0

Hình đã gửi
IN HIM, I TRUST. THE TRUST IN MY GOD