Đế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

#1281 funnyzui

funnyzui

    biết vẽ arc

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

Đã gửi 13 June 2010 - 03:34 PM

Bạn chạy thử LISP : cộng (trừ) giá trị của Block thuộc tính.
Hình đã gửi
tên lệnh : ChAtt (Change Attributes)
- chọn Block cần thay đổi
- chọn Tag thuộc tính tuơng ứng cần thay đổi
- nhập số gia (muốn trừ, nhập số âm)
- chọn đối tượng trên màn hình

File download : ChAtt.zip


a gia_bach ơi, a có thể viết giùm e lisp này mà có phép nhân đc ko? Nếu đc nữa thì e chỉ cần quan tâm đến tên tag thôi, miễn block nào mình chọn mà có tag đó là nó chạy đc. Cám ơn a trước!
  • 0

#1282 tien2005

tien2005

    biết lệnh properties

  • Members
  • PipPipPipPip
  • 257 Bài viết
Điểm đánh giá: 94 (tàm tạm)

Đã gửi 13 June 2010 - 06:26 PM

Nhờ các Bạn viết hộ cái lisp thực hiện công việc như sau: từ 1 đoạn thẳng có chiều dài bấy kỳ (đối tượng LINE), chia đoạn thẳng này thành n đoạn nhỏ, giá trị n sẽ được nhập trong quá trình chạy lisp.
Thanks
  • 0

#1283 thachphathien1123

thachphathien1123

    biết vẽ rectang

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

Đã gửi 14 June 2010 - 11:39 AM

Nhờ các Bạn viết hộ cái lisp thực hiện công việc như sau: từ 1 đoạn thẳng có chiều dài bấy kỳ (đối tượng LINE), chia đoạn thẳng này thành n đoạn nhỏ, giá trị n sẽ được nhập trong quá trình chạy lisp.
Thanks

CHIA đoạn thẳng cần gì lisp, dùng lệnh div là được mà
  • 0
____________________________________________________
Aluminum Curtain wall- The best technology solutions for the future
Mặt dựng nhôm kính-Giải pháp công nghệ cho tương lai tươi sáng
Không có gì là chuẩn mực

***0986.581.350***

#1284 tuananhce03

tuananhce03

    biết pan

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

Đã gửi 14 June 2010 - 02:33 PM

Có ai viết cho tôi đoạn LISP mà tạo ra các tỉ lệ khác nhau được không?

Ví dụ khi tạo ra một Dimension thi đã có sẵn là kiểu kiến trúc cho dấu.
Rồi còn Scale nữa.
Nói chung là Lisp tạo Dimension mà hay dùng.
Cảm ơn nhiều.
  • 0

#1285 road

road

    Chưa sử dụng CAD

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

Đã gửi 14 June 2010 - 03:39 PM

Vẽ đường bao các đối tương.
Hầu hết cácccông việc của chúng làm đều xuất phất từ việc chọn đường bao.
Tôi có ý tưởng: Tự đông vẽ đường bao cho các đối tượng được chọn.
Mong các bạn giúp tôi thực hiện ý tưởng này.
Xin cám ơn.
  • 0

#1286 tien2005

tien2005

    biết lệnh properties

  • Members
  • PipPipPipPip
  • 257 Bài viết
Điểm đánh giá: 94 (tàm tạm)

Đã gửi 14 June 2010 - 07:34 PM

@thachphathien1123: lệnh DIVIDE chỉ đánh dấu trên đoạn thẳng bằng các node thôi Bạn,thực chất nó cũng là 1 đoạn thẳng. Cái minhc cần là đoạn thẳng có chiều dài L, sau khi chi thì có n đoạn thẳng có L1+L2+...+Ln = L
  • 0

#1287 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 15 June 2010 - 09:43 AM

@thachphathien1123: lệnh DIVIDE chỉ đánh dấu trên đoạn thẳng bằng các node thôi Bạn,thực chất nó cũng là 1 đoạn thẳng. Cái minhc cần là đoạn thẳng có chiều dài L, sau khi chi thì có n đoạn thẳng có L1+L2+...+Ln = L

Ban tien2005 sử dụng thử code sau :
(defun c:brln(/ dt n sp ep dis dis_unit ang)
(setq dt (car(entsel "\n Moi ban chon Line : ")))
(setq n (getint "\n So doan thang can chia tu Line ban dau :"))
(setq sp (vlax-curve-getstartpoint dt)
ep (vlax-curve-getendpoint dt)
dis (distance sp ep)
dis_unit (/ dis n)
ang (angle sp ep)
)
(setq sp (polar sp ang dis_unit))
(vl-cmdf "break" dt "_non" "f" (trans sp 0 1) "@")
(Repeat (- n 2)
(setq sp (polar sp ang dis_unit))
(vl-cmdf "break" "L" "_non" "f" (trans sp 0 1) "@")
)
)
@road :
1. Nhắc bạn : không được post 1 nội dung ở 2 topic
2. "Tự đông vẽ đường bao cho các đối tượng được chọn". Đối tượng : theo bạn hiểu như thế nào? Toàn bộ đối tượng à?
Vẽ đường bao cho từng đối tượng riêng rẽ hay sao? Mục đích của việc vẽ đường bao là gì? Bạn vui lòng nói rõ.

Bài viết đã được chỉnh sửa nội dung bởi Tue_NV: 15 June 2010 - 10:13 AM

  • 0

#1288 ductrunggtvt

ductrunggtvt

    biết zoom

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

Đã gửi 16 June 2010 - 11:07 AM

Chào mọi người. mình thường phải vẽ đường gióng và công việc cứ lặp đi lặp lại đến phát ngán, mọi người có thể cho mình tham khảo 1 lisp với nội dung như sau:
- có 2 đường thẳng (có thể // hoặc ko //) và n điểm ko nằm trên 2 đường thẳng này
- mình muốn viết 1 lisp mà khi gọi lệnh sẽ hỏi chọn đường thẳng thứ 1, sau đó hỏi chọn tiếp đường thẳng thứ 2, tiếp theo sẽ hỏi chọn điểm. rồi khi lần lượt mình bắt vào các điểm như đã nói lisp sẽ tự động vẽ các đường thẳng gióng từ điểm đã chọn đến vuông góc với đường thẳng thứ 1, đường thẳng này được giới hạn bởi đường thẳng thứ 1 và đường thẳng thứ 2 (nếu khi hỏi chọn đường thẳng thứ 2 mà mình ko chọn thì nó sẽ vẽ luôn từ điểm chọn đến vuông góc đường thẳng thứ 1)
- đường thẳng cần vẽ được lisp vẽ có thuộc tính theo layer hiện hành
  • 0

#1289 gia_bach

gia_bach

    biết lệnh adcenter

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

Đã gửi 16 June 2010 - 02:08 PM

Chào mọi người. mình thường phải vẽ đường gióng và công việc cứ lặp đi lặp lại đến phát ngán, mọi người có thể cho mình tham khảo 1 lisp với nội dung như sau:
- có 2 đường thẳng (có thể // hoặc ko //) và n điểm ko nằm trên 2 đường thẳng này
- mình muốn viết 1 lisp mà khi gọi lệnh sẽ hỏi chọn đường thẳng thứ 1, sau đó hỏi chọn tiếp đường thẳng thứ 2, tiếp theo sẽ hỏi chọn điểm. rồi khi lần lượt mình bắt vào các điểm như đã nói lisp sẽ tự động vẽ các đường thẳng gióng từ điểm đã chọn đến vuông góc với đường thẳng thứ 1, đường thẳng này được giới hạn bởi đường thẳng thứ 1 và đường thẳng thứ 2 (nếu khi hỏi chọn đường thẳng thứ 2 mà mình ko chọn thì nó sẽ vẽ luôn từ điểm chọn đến vuông góc đường thẳng thứ 1)
- đường thẳng cần vẽ được lisp vẽ có thuộc tính theo layer hiện hành

LISP Vẽ đường Line vuông góc với đường thẳng đã chọn (Pline, Arc)và giới hạn trong 2 đường thẳng (nếu có).
Hy vọng đúng ý bạn.
(defun C:VeVG (/ obj1 obj2 ObjL pt1 pt2 spc ss1 ss2)
;|Ve line vuong goc voi duong thang
By : Gia Bach, gia_bach @ www.CadViet.com |;
(vl-load-com)
(defun AddLine(pt1 pt2)
(vla-addLine spc
(vlax-3D-point pt1)
(vlax-3D-point pt2)))

(if (and
(princ "\nChon duong thang thu 1 : ")
(setq ss1 (ssget "+.:S:N" (list (cons 0 "*LINE,ARC"))))
(princ "\nChon duong thang thu 2 : "))
(progn
(if (setq ss2 (ssget "+.:S:N" (list (cons 0 "LINE"))))
(setq obj2 (vlax-Ename->Vla-Object(ssname ss2 0))))
(setq spc (vla-get-modelspace (vla-get-ActiveDocument(vlax-get-acad-object)))
obj1 (vlax-Ename->Vla-Object(ssname ss1 0)))
(while (setq pt1 (getpoint "\nChon diem : "))
(setq pt2 (vlax-curve-getClosestPointTo obj1 pt1 T))
(setq ObjL (AddLine pt1 pt2))
(if (and
obj2
(setq pt1 (vlax-Invoke objL "IntersectWith" obj2 3))
(not(vl-catch-all-error-p (vl-catch-all-apply 'vlax-3d-point pt1))))
(vla-put-StartPoint ObjL (vlax-3D-point pt1))) ) ) )
(princ))

  • 1

#1290 toai

toai

    biết vẽ ellipse

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

Đã gửi 16 June 2010 - 02:44 PM

[quote name='Tue_NV' date='Jun 15 2010, 9:43' post='98205']
Ban tien2005 sử dụng thử code sau :
(defun c:brln(/ dt n sp ep dis dis_unit ang)
(setq dt (car(entsel "\n Moi ban chon Line : ")))
(setq n (getint "\n So doan thang can chia tu Line ban dau :"))
(setq sp (vlax-curve-getstartpoint dt)
ep (vlax-curve-getendpoint dt)
dis (distance sp ep)
dis_unit (/ dis n)
ang (angle sp ep)
)
(setq sp (polar sp ang dis_unit))
(vl-cmdf "break" dt "_non" "f" (trans sp 0 1) "@")
(Repeat (- n 2)
(setq sp (polar sp ang dis_unit))
(vl-cmdf "break" "L" "_non" "f" (trans sp 0 1) "@")
)
)
Bác Tue_NV ơi, tôi đã down lisp về và dùng rồi (Acad 2008) nhưng sau khi chọn line, nhập số đoạn cần chia thì line ban đầu vẫn k chia thành từng đoạn (vẫn là 1 đoạn thẳng).Nhờ bác xem lại giùm!
Đây là dòng lệnh mà tôi đã nhập:
http://www.4shared.c.../lenh_lnbr.html
  • 0
Mưu sự tại nhân, thành sự tại thiên.

#1291 ductrunggtvt

ductrunggtvt

    biết zoom

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

Đã gửi 16 June 2010 - 04:40 PM

Có một việc nhỏ cần giúp đỡ:
:: Tính và điền lại cao độ theo phương thẳng đứng y, trên bản vẽ đã có các text ghi chú cao độ nhưng chưa đúng, cần sửa lại các text này
- B1. Bắt đầu khi gọi lệnh sẽ chọn tỉ lệ bản vẽ (tỷ lệ đứng y: nhập a theo tỉ lệ bản vẽ và bước nhập tỉ lệ thì chỉ cần nhập 1 lần, trong những lần chạy lệnh lần sau sẽ ko hỏi tỷ lệ nữa trừ khi load lại lisp)
- B2. Chọn 1 điểm gốc (cao độ gốc so sánh có tọa độ theo phương đứng là y0) cad yêu cầu chọn 1 text (là cao độ gốc so sánh đã có sẵn, ví dụ là text có giá trị là a0)
- B3. Chọn điểm thứ 1 (tọa độ theo phương đứng của điểm này là y1,lisp sẽ tính ra chênh lệch cao độ này so với cao độ gốc bằng y0-y1),sau đó chọn 1 text, lisp sẽ sửa lại text này thành cao độ điểm thứ 1 (giá trị text là a0-(y0-y1))
- B4. Chọn điểm thứ 2, là làm tương tự ....
.................................
( nếu các cao độ là âm thì khi tex cao độ sẽ có dạng "-b" còn cao độ dương thì để bình thường, không cần phải có dấu ")

Ps:
+ có thể cho mình lisp thay đổi chiều cao text: chọn 1 vùng(lisp tự lọc ra thành phần text), sau đó nhập giá trị cao text mới
+cảm ơn Gia Bach đã viết hộ lisp gióng đường thẳng. rất có ích cho mình.
  • 0

#1292 gia_bach

gia_bach

    biết lệnh adcenter

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

Đã gửi 17 June 2010 - 11:18 AM

Nhờ các Bạn viết hộ cái lisp thực hiện công việc như sau: từ 1 đoạn thẳng có chiều dài bấy kỳ (đối tượng LINE), chia đoạn thẳng này thành n đoạn nhỏ, giá trị n sẽ được nhập trong quá trình chạy lisp.
Thanks

LISP này tui viết lâu rồi, không biết bi giờ có "hết đát" chưa ? bạn test thử nhé :cheers:
Bạn xem ở đây : lisp chia Curve (LINE,ARC, PLINE và SPLINE hở)
  • 1

#1293 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 19 June 2010 - 11:16 AM

Bạn chạy thử LISP : cộng (trừ) giá trị của Block thuộc tính.
Hình đã gửi
tên lệnh : ChAtt (Change Attributes)
- chọn Block cần thay đổi
- chọn Tag thuộc tính tuơng ứng cần thay đổi
- nhập số gia (muốn trừ, nhập số âm)
- chọn đối tượng trên màn hình

File download : ChAtt.zip


a gia_bach ơi, a có thể viết giùm e lisp này mà có phép nhân đc ko? Nếu đc nữa thì e chỉ cần quan tâm đến tên tag thôi, miễn block nào mình chọn mà có tag đó là nó chạy đc. Cám ơn a trước!

Chào tnmtpcfunnyzui
Trên những ý tưởng của anh gia_bach, Tue_NV đã viết code về Lisp Cộng trừ nhân chia giá trị thuộc tính của Block Attribute với 1 số
- Dựa trên tính chất cơ bản của phép cộng, trừ : Khi cộng hoặc trừ một số với số 0 thì kết quả là chính nó
a+0 = a
a-0 = a
- Dựa trên tính chất cơ bản của phép nhân, chia : Khi nhân hoặc chia một số với số 1 thì kết quả là chính nó
a x 1 = a
a : 1 = a
Các bạn có thể đọc thêm ở đây :
Bài viết số 90

Hình đã gửi
Lisp thực hiện phép tính nhân chia trước, cộng trừ sau nếu giá trị trong box Cộng số hoặc trừ số khác 0 và giá trị trong box nhân số hoặc chia số khác 1
Qua đây, cho Tue_NV gửi lời cảm ơn chân thành đến anh gia_bach đã hỗ trợ cho Tue_NV viết đoạn Code này.
Cảm ơn anh gia_bach rất nhiều :cheers:
DownLoad Lisp file
  • 3

#1294 hung22121983

hung22121983

    Chưa sử dụng CAD

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

Đã gửi 19 June 2010 - 12:41 PM

Em có yêu cầu này mong mấy cao thủ giúp đỡ. Em muốn viết 1 chương trình lisp có khả năng chỉnh sửa số liệu trực tiếp trong bản vẽ không thông qua các lệnh cad, chỉnh sửa từ vật thể 2d đến 3d. Không biết mấy cao thủ có thể giúp em không :cheers: .Em cũng muốn tự tay viết nhưng do em chỉ có quyển dạy Lisp tập 1 của Nguyễn Hữu Lộc thôi, không có quyển thứ 2, đã từng đọc mấy sách khác nhưng toàn sách dịch nên không hiểu đã rối còn rối thêm, có bác nào có sách của Nguyễn Hữu Lộc post cho em được không?
  • 0

#1295 yes

yes

    biết pan

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

Đã gửi 23 June 2010 - 06:06 PM

Chào các bạn, do nhu cầu công việc mình muốn nhờ các bạn viết giúp lisp bật, tắt các đối tựợng cùng màu.
  • 0

#1296 hoa35ktxd

hoa35ktxd

    biết lệnh move

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

Đã gửi 23 June 2010 - 07:18 PM

Chào tnmtpcfunnyzui
Trên những ý tưởng của anh gia_bach, Tue_NV đã viết code về Lisp Cộng trừ nhân chia giá trị thuộc tính của Block Attribute với 1 số
- Dựa trên tính chất cơ bản của phép cộng, trừ : Khi cộng hoặc trừ một số với số 0 thì kết quả là chính nó
a+0 = a
a-0 = a
- Dựa trên tính chất cơ bản của phép nhân, chia : Khi nhân hoặc chia một số với số 1 thì kết quả là chính nó
a x 1 = a
a : 1 = a
Các bạn có thể đọc thêm ở đây :
Bài viết số 90

Hình đã gửi
Lisp thực hiện phép tính nhân chia trước, cộng trừ sau nếu giá trị trong box Cộng số hoặc trừ số khác 0 và giá trị trong box nhân số hoặc chia số khác 1
Qua đây, cho Tue_NV gửi lời cảm ơn chân thành đến anh gia_bach đã hỗ trợ cho Tue_NV viết đoạn Code này.
Cảm ơn anh gia_bach rất nhiều :cheers:
DownLoad Lisp file

Xin góp ý 1 chút.
Chưa test cụ thể đoạn code này nhưng tôi thấy phương pháp nhập liệu hơi phiền phức vì phải quan tâm đến hai Textbox. Theo tôi chỉ cần 1 Textbox cũng giải quyết được. Nhập dấu +-*/ trước và giá trị sau, khi đó căn cứ vào dấu hiệu phép tính (ký tự đầu tiên) chương trình sẽ thực hiện phép tính đối với giá trị nhập vào sau dấu phép tính.
Nếu cần tính toán với biểu thức (nhiều phép tính cùng 1 lúc) cũng có thể giải quyết được với 1 Textbox.
  • 2

#1297 truongthanh

truongthanh

    biết lệnh text

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

Đã gửi 24 June 2010 - 02:46 PM

Cho mình hỏi có LISP nào convert ARC và CIRCLE thành LINE ko vậy?
  • 0

#1298 hoa35ktxd

hoa35ktxd

    biết lệnh move

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

Đã gửi 24 June 2010 - 11:11 PM

Cho mình hỏi có LISP nào convert ARC và CIRCLE thành LINE ko vậy?

Câu hỏi lạ thật, không hiểu bạn hỏi thật hay hỏi cho vui.
  • 0

#1299 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 25 June 2010 - 07:01 AM

Câu hỏi lạ thật, không hiểu bạn hỏi thật hay hỏi cho vui.

Chắc không phải hỏi cho vui đâu. Mình đoán bạn này đang vướng khi thực hiện lệnh wipeout đây mà.

Nếu đúng vấn đề này thì mình có 1 đoạn lisp dùng thực hiện wipeout cho hình tròn này.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;
(Defun c:wpc ()
(command "undo" "be")
(setq luubatdiem (getvar "osmode"))
(setvar "osmode" 0)

(Princ "\nHay chon CIRCLE :")
(setq XX (ssget '((0 . "CIRCLE"))))

(setq L 0)
(setq M (sslength XX))
(while (< L M)
(setq DT (ssname XX L))
(setq DT (entget DT))
(setq TAM (cdr (assoc 10 DT)))
(setq BANKINH (cdr (assoc 40 DT)))

(command ".polygon" "30" TAM "" BANKINH)
(command ".wipeout" "" "last" "y")

(setq L (1+ L))
)

(setvar "osmode" luubatdiem)
(command "undo" "end")
(Princ)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

  • 1

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


#1300 truongthanh

truongthanh

    biết lệnh text

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

Đã gửi 25 June 2010 - 08:23 AM

Câu hỏi lạ thật, không hiểu bạn hỏi thật hay hỏi cho vui.

cảm ơn bạn đã quan tâm!mình hỏi thật chứ không phải cho vui đâu!có 1 số LISP chỉ hiểu đối tượng là LINE thôi bạn!ví dụ LISP hatch maker của bác BEEMOVE!
  • 0