Đến nội dung


Hình ảnh
* * * - - 2 Bình chọn

Viết Lisp theo yêu cầu


  • Chủ đề bị khóa Chủ đề bị khóa
2780 replies to this topic

#841 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

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

Đã gửi 06 July 2008 - 11:52 PM

Àh. phải chăng chúng không thể áp dụng cho block thuộc tính được hả Bác Hoành.
Vì áp dụng với chúng thì mới báo lỗi. Các đối tg khác thì lại bình thường
Liệu có cách nào khác phục đc không Bác?

bạn có thể upload file bị lỗi lên diễn đàn được không?
Tôi thử với block thuộc tính vẫn bình thường.
  • 0

#842 cuongtk2

cuongtk2

    biết vẽ ellipse

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

Đã gửi 07 July 2008 - 10:05 AM

Mình thấy lỗi nằm ở truc, vì xóa nó đi lệnh vẫn thi hành bình thường.
(command ".mirror" (car sel) "" (cadr sel) truc pause)
Hoá ra là nằm ở chế độ osmode ON nên (cadr sel) = truc , báo lỗi điểm sau cần có khoảng cách với điểm đầu "Points must be distinct"
  • 0

#843 Snowman

Snowman

    biết lệnh mirror

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

Đã gửi 07 July 2008 - 07:20 PM

Có lẽ đoạn code đơn giản quá nên bác Hoành lỡ "quên" mất các chế độ bắt điểm. Xin mạn phép bác Hoành sửa lại đoạn code như sau:

(defun qm (truc)
(setq sel (entsel "\nChon doi tuong: "))
(command ".mirror" (car sel) "" (cadr sel) truc pause)
(princ)
)
(defun c:qmx ()
(setq Oldos (getvar "OSMODE"))
(setvar "OSMODE" 0)
(qm "@1,0")
(setvar "OSMODE" oldos)
)
(defun c:qmy ()
(setq Oldos (getvar "OSMODE"))
(setvar "OSMODE" 0)
(qm "@0,1")
(setvar "OSMODE" oldos)
)


Em thêm vào đoạn code tắt chế độ bắt điểm trước khi thực thi lệnh mirror để tránh gây lỗi. (bác nào thích bắt điểm chính xác lại phải gõ thêm vậy )
  • 0

. - ' * ' - .. - ... "Sống trong đời sống cần có một tấm lòng..." . - ' * ' - .. -
-----------------------------------------------------------------------------------

Hình đã gửi Hình đã gửi


#844 Snowman

Snowman

    biết lệnh mirror

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

Đã gửi 07 July 2008 - 07:33 PM

Em lại đưa ra một phương án khác tối ưu hơn một chút :mellow:

(defun qm (truc)
(setq sel (entsel "\nChon doi tuong: "))
(setq Oldos (getvar "OSMODE"))
(setvar "OSMODE" 0)
(command ".mirror" (car sel) "" (cadr sel) truc pause)
(setvar "OSMODE" oldos)
(princ)
)
(defun c:qmx ()
(qm "@1,0")
)

(defun c:qmy ()
(qm "@0,1")
)

Sorry vì đã post 2 bài với nội dung ...na ná nhau (em tư duy hơi bị ...chậm, các bác thông cảm nhé!)
  • 0

. - ' * ' - .. - ... "Sống trong đời sống cần có một tấm lòng..." . - ' * ' - .. -
-----------------------------------------------------------------------------------

Hình đã gửi Hình đã gửi


#845 kienxd04

kienxd04

    biết vẽ pline

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

Đã gửi 08 July 2008 - 10:41 PM

Mọi người có thể giúp đỡ mình viết lisp sau được ko, mình cám ơn rất nhiều:
- mình có 2 đường thẳng cắt nhau, mình dùng lệnh trim cắt phần dư của 1 đoạn thẳng rồi sau đó mình lại dùng lệnh line để vẽ lại đường thẳng đó rồi đổi thuộc tính của nó sang nét đứt. Vậy mình xin nhờ mọi người viết lisp để nó tự dùng lệnh cắt trim rồi đổi sang thuộc tính khác. Mình cám ơn mọi người rất nhiều
  • 0

#846 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

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

Đã gửi 08 July 2008 - 11:25 PM

Mọi người có thể giúp đỡ mình viết lisp sau được ko, mình cám ơn rất nhiều:
- mình có 2 đường thẳng cắt nhau, mình dùng lệnh trim cắt phần dư của 1 đoạn thẳng rồi sau đó mình lại dùng lệnh line để vẽ lại đường thẳng đó rồi đổi thuộc tính của nó sang nét đứt. Vậy mình xin nhờ mọi người viết lisp để nó tự dùng lệnh cắt trim rồi đổi sang thuộc tính khác. Mình cám ơn mọi người rất nhiều

Chưa hiểu ý bạn.

Bạn có thể upload 1 file dwg lên diễn đàn được không? mô tả 2 trạng thái trước và sau khi thực hiện lisp.
  • 0

#847 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 09 July 2008 - 01:33 PM

Chưa hiểu ý bạn.

Bạn có thể upload 1 file dwg lên diễn đàn được không? mô tả 2 trạng thái trước và sau khi thực hiện lisp.

Theo mình hiểu là giống như lệnh trim nhưng đoạn bị cắt không mất đi mà vẽ lại bằng nét đứt.
  • 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


#848 duongsatdn

duongsatdn

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 1657 Bài viết
Điểm đánh giá: 761 (tốt)

Đã gửi 09 July 2008 - 01:44 PM

Mọi người có thể giúp đỡ mình viết lisp sau được ko, mình cám ơn rất nhiều:
- mình có 2 đường thẳng cắt nhau, mình dùng lệnh trim cắt phần dư của 1 đoạn thẳng rồi sau đó mình lại dùng lệnh line để vẽ lại đường thẳng đó rồi đổi thuộc tính của nó sang nét đứt. Vậy mình xin nhờ mọi người viết lisp để nó tự dùng lệnh cắt trim rồi đổi sang thuộc tính khác. Mình cám ơn mọi người rất nhiều

Bạn có thể dùng lênh break.
  • 0

#849 kienxd04

kienxd04

    biết vẽ pline

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

Đã gửi 09 July 2008 - 10:38 PM

Vậy mình xin up lên file để mọi người giúp đỡ dùm, cám ơn mọi người rất nhiều
http://www.cadviet.c...es/ban_ve_1.dwg
  • 0

#850 hellocadviet

hellocadviet

    biết vẽ line

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

Đã gửi 12 July 2008 - 05:14 PM

Tình hình là mình hay phải tính cao độ và khoảng cách của các điểm trong mặt cắt ngang. Mình đã tìm được lisp tính cao độ tự động khi tích vào các điểm và đã thêm vào một số lệnh để nó có thể dóng đường thẳng xuống tự động, nhưng mình chưa biết làm sao để tính khoảng cách giữa các điểm đã tích vào. Các bác giúp giùm em nhé. Cảm ơn các bác nhiều.
//------------
(defun c:nn()
(setq fp (getpoint "\nChon diem goc:"))
(setq hf (getreal "\nNhap cao do goc:"))
(setq up (getpoint "\nChon diem dau cao do: "))
(setq ip (getpoint "\nChon vi tri ghi cao do:"))
(setq dd (getpoint "\nChon diem dat duong dong: "))
(setq yip (cadr ip))
(setq yup (cadr up))
(setq yfp (cadr fp))
(setq ydd (cadr dd))
(while
(setq sp (getpoint "\nChon diem can tinh cao do:"))
(setq xsp (car sp))
(setq z (+ yip (/ (- yup yip) 2)))
(setq ipp (list xsp z))
(setq a (list xsp yip))
(setq b (list xsp ydd))
(setq c (list xsp yfp))
(setq ysp (cadr sp))
(setq ysp (+ hf (- ysp yfp)))
(setq ysp (rtos ysp 2 2))
(command "line" a b "")
(command "line" sp c "")
(command ".text" "J" "mc" ipp "90.0" ysp)
(princ)
)
)
//--------------

  • 0

#851 Sony2007

Sony2007

    biết lệnh copy

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

Đã gửi 12 July 2008 - 05:36 PM

Các bác giúp em với:
1. Lisp tính tổng các số (thông qua việc chọn các text chữ số) sau đó ghi ra text với height=2, Justify=Bottom Right, vị trí text do người dùng chỉ định.
2. Lisp tính hiệu hai số (thông qua việc chọn các text chữ số): số trừ thuộc layer có tên là "layer1", số bị trừ có tên là "layer2". Mỗi phép trừ gồm hai text thuộc 2 lớp (Layer1, layer2), cách nhau 1 đoạn bằng 2.3. Kết quả của mỗi phép trừ sẽ ghi vào bên trái của text thuộc "layer1" và cách 1 đoạn bằng 4. Vì trong bản vẽ của em có rất nhiều phép trừ tương tự như thế.
Em xin chân thành cám ơn các bác trước
  • 0

#852 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

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

Đã gửi 12 July 2008 - 11:40 PM

Các bác giúp em với:
1. Lisp tính tổng các số (thông qua việc chọn các text chữ số) sau đó ghi ra text với height=2, Justify=Bottom Right, vị trí text do người dùng chỉ định.
2. Lisp tính hiệu hai số (thông qua việc chọn các text chữ số): số trừ thuộc layer có tên là "layer1", số bị trừ có tên là "layer2". Mỗi phép trừ gồm hai text thuộc 2 lớp (Layer1, layer2), cách nhau 1 đoạn bằng 2.3. Kết quả của mỗi phép trừ sẽ ghi vào bên trái của text thuộc "layer1" và cách 1 đoạn bằng 4. Vì trong bản vẽ của em có rất nhiều phép trừ tương tự như thế.
Em xin chân thành cám ơn các bác trước

Bạn xem lisp công trừ nhân chia text ở đây
  • 0

#853 Sony2007

Sony2007

    biết lệnh copy

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

Đã gửi 13 July 2008 - 03:44 PM

Bạn xem lisp công trừ nhân chia text ở đây

Cám ơn bác, nhưng kết quả thì nó nằm trùng với hàng text đầu tiên. Nên phải di chuyển ra hơi mất thời gian 1 chút.
Bác có thể viết cho em 1 đoạn lisp để căn lề các đối tượng được không. Ví dụ: có nhiều text 1, text 2 ... Nằm ở các vị trí khác nhau. Khi mình chọn các đối tượng này và đưa chúng về hoặc là: cùng giá trị y, cùng giá trị x. Như kiểu là cùng hàng, hoặc cùng cột ấy.
Cám ơn bác
  • 0

#854 Sony2007

Sony2007

    biết lệnh copy

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

Đã gửi 13 July 2008 - 03:45 PM

Bạn xem lisp công trừ nhân chia text ở đây

Cám ơn bác, nhưng kết quả thì nó nằm trùng với hàng text đầu tiên. Nên phải di chuyển ra hơi mất thời gian 1 chút.
Bác có thể viết cho em 1 đoạn lisp để căn lề các đối tượng được không. Ví dụ: có nhiều text 1, text 2 ... Nằm ở các vị trí khác nhau. Khi mình chọn các đối tượng này và đưa chúng về hoặc là: cùng giá trị y, cùng giá trị x. Như kiểu là cùng hàng, hoặc cùng cột ấy.
Cám ơn bác
  • 0

#855 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

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

Đã gửi 13 July 2008 - 04:02 PM

Cám ơn bác, nhưng kết quả thì nó nằm trùng với hàng text đầu tiên. Nên phải di chuyển ra hơi mất thời gian 1 chút.
Bác có thể viết cho em 1 đoạn lisp để căn lề các đối tượng được không. Ví dụ: có nhiều text 1, text 2 ... Nằm ở các vị trí khác nhau. Khi mình chọn các đối tượng này và đưa chúng về hoặc là: cùng giá trị y, cùng giá trị x. Như kiểu là cùng hàng, hoặc cùng cột ấy.
Cám ơn bác

bạn dùng lệnh TX và TY trong bộ ACV 1.0
  • 1

#856 cuongtk2

cuongtk2

    biết vẽ ellipse

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

Đã gửi 13 July 2008 - 04:04 PM

Mọi người có thể giúp đỡ mình viết lisp sau được ko, mình cám ơn rất nhiều:
- mình có 2 đường thẳng cắt nhau, mình dùng lệnh trim cắt phần dư của 1 đoạn thẳng rồi sau đó mình lại dùng lệnh line để vẽ lại đường thẳng đó rồi đổi thuộc tính của nó sang nét đứt. Vậy mình xin nhờ mọi người viết lisp để nó tự dùng lệnh cắt trim rồi đổi sang thuộc tính khác. Mình cám ơn mọi người rất nhiều


Bạn dùng code này sẽ cho phép cắt 2 đường LINE

(defun c:catdt ( / ent1 ent2 sp1 sp2 ep1 ep2 pickpoint int layer)
(setq ent1 (car (entsel "\nChon duong chan:"))
ent2 (entsel "\nChon diem cat:")
sp1 (cdr (assoc 10 (entget ent1)))
ep1 (cdr (assoc 11 (entget ent1)))
sp2 (cdr (assoc 10 (entget (car ent2))))
ep2 (cdr (assoc 11 (entget (car ent2))))
pickpoint (cadr ent2)
int (inters sp1 ep1 sp2 ep2)
layer (cdr (assoc 8 (entget (car ent2))))
)
(entdel (car ent2))
(if (<
(distance sp2 int)
(distance sp2 pickpoint))
(vedt1)
(vedt2)
)
)
(defun vedt2 ()
(entmake (list ( cons 0 "line") (cons 8 layer) (cons 10 sp2) (cons 11 int) (cons 6 "HIDDEN")))
(entmake (list ( cons 0 "line") (cons 8 layer) (cons 10 int) (cons 11 ep2) ))
)
(defun vedt1 ()
(entmake (list ( cons 0 "line") (cons 8 layer) (cons 10 ep2) (cons 11 int) (cons 6 "HIDDEN")))
(entmake (list ( cons 0 "line") (cons 8 layer) (cons 10 int) (cons 11 sp2) ))
)

  • 0

#857 Sony2007

Sony2007

    biết lệnh copy

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

Đã gửi 14 July 2008 - 06:17 AM

bạn dùng lệnh TX và TY trong bộ ACV 1.0

Thanks, i'll try it
  • 0

#858 Sony2007

Sony2007

    biết lệnh copy

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

Đã gửi 14 July 2008 - 07:09 AM

Lệnh là SD (sắp dim)

Chương trình sẽ yêu cầu người sử dụng chọn đường Dim chuẩn. Sau đó, yêu cầu người sử dụng chọn các đường Dim cần sắp xếp. Chương trình sẽ tự động dàn các Dim theo hàng đều.
Hình đã gửi

Bác có thể nâng cấp viết lệnh sắp xếp SD này cho đường kích thước theo dạng xiên có được không ?
  • 0

#859 dvdcad

dvdcad

    biết vẽ arc

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

Đã gửi 14 July 2008 - 10:39 PM

Bác nguyen hoanh em có vấn đề này nhờ bác giúp: em có 1 bản vẽ trên đó có các text khác nhau ở các lớp khác nhau. bác xem có lisp nào mà xuất ra file *.txt hoặc *csv mà mỗi lớp 1 cột. cam ơn bác nhiều
  • 0

#860 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

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

Đã gửi 14 July 2008 - 11:30 PM

Bác nguyen hoanh em có vấn đề này nhờ bác giúp: em có 1 bản vẽ trên đó có các text khác nhau ở các lớp khác nhau. bác xem có lisp nào mà xuất ra file *.txt hoặc *csv mà mỗi lớp 1 cột. cam ơn bác nhiều

Thứ tự của text thì sao bạn,
Trường hợp các đối tượng trong các layer không giống nhau thì mặc kệ?
  • 0