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

#781 minhdung007

minhdung007

    biết pan

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

Đã gửi 12 June 2008 - 05:34 AM

Xin lỗi bác Hoành! Trình độ của em kém quá nên diễn đạt khó hiểu làm Bác mất công. Bác thông cảm và giúp em nhé!
Ví dụ ban đầu của em có 12 đối tượng text.

Em đã chạy thử Lisp Cộng - trừ - nhân - chia hai dãy text bác Hoành gửi nhưng gặp phải lỗi sau nhờ bác chỉ giáo thêm.
Lỗi khi thực hiện lệnh "Cong" trên AutoCad2007 với 6 đối tượng text:
Command: cong

Nhap vao hang text dau tien:
Select objects: Specify opposite corner: 3 found

Select objects:

Nhap vao hang text thu hai:
Select objects: Specify opposite corner: 3 found

Select objects:
; error: no function definition: SS2ENT

Lỗi khi thực hiện lệnh "Cong" trên AutoCad14 với 10 đối tượng text:
:
Command: cong

Nhap vao hang text dau tien:
Select objects: Other corner: 5 found

Select objects:

Nhap vao hang text thu hai:
Select objects: Other corner: 5 found

Select objects:
error: null function
(SS2ENT SST1)
(MAPCAR (QUOTE ENTGET) (SS2ENT SST1))
(SETQ LST1 (MAPCAR (QUOTE ENTGET) (SS2ENT SST1)) LST2 (MAPCAR (QUOTE ENTGET)
(SS2ENT SST2)) YKQ (- (* 2 (CADDR (ASSOC 10 (CAR LST2)))) (CADDR (ASSOC 10 (CAR
LST1)))) LSTERR "")
(PROGN (SETQ LST1 (MAPCAR (QUOTE ENTGET) (SS2ENT SST1)) LST2 (MAPCAR (QUOTE
ENTGET) (SS2ENT SST2)) YKQ (- (* 2 (CADDR (ASSOC 10 (CAR LST2)))) (CADDR (ASSOC
10 (CAR LST1)))) LSTERR "") (MAPCAR (QUOTE ENTMAKE) (MAPCAR (QUOTE (LAMBDA (T1
T2 / TT PP GT) (SETQ GT (VL-CATCH-ALL-APPLY (QUOTE HAM) (LIST (ATOF (CDR (ASSOC
1 T1))) (ATOF (CDR (ASSOC 1 T2)))))) (IF (VL-CATCH-ALL-ERROR-P GT) (SETQ LSTERR
(STRCAT LSTERR "- " (VL-CATCH-ALL-ERROR-MESSAGE GT) "\n") GT "#") (SETQ GT
(VL-STRING-RIGHT-TRIM "." (VL-STRING-RIGHT-TRIM "0" (RTOS GT))))) (SETQ P (CDR
(ASSOC 10 T1)) PP (LIST 10 (CAR P) YKQ (CADDR P)) TT (SUBST (CONS 1 GT) (ASSOC
1 T1) T1) TT (SUBST PP (ASSOC 10 T1) TT)))) LST1 LST2)) (IF (/= LSTERR "")
(ALERT (STRCAT "Trong qua trinh tinh toan, co cac loi sau:\n" LSTERR))))
(IF (/= (SSLENGTH SST1) (SSLENGTH SST2)) (ALERT "\nHai tap chon co so doi tuong
khong bang nhau!\nHay chon lai!") (PROGN (SETQ LST1 (MAPCAR (QUOTE ENTGET)
(SS2ENT SST1)) LST2 (MAPCAR (QUOTE ENTGET) (SS2ENT SST2)) YKQ (- (* 2 (CADDR
(ASSOC 10 (CAR LST2)))) (CADDR (ASSOC 10 (CAR LST1)))) LSTERR "") (MAPCAR
(QUOTE ENTMAKE) (MAPCAR (QUOTE (LAMBDA (T1 T2 / TT PP GT) (SETQ GT
(VL-CATCH-ALL-APPLY (QUOTE HAM) (LIST (ATOF (CDR (ASSOC 1 T1))) (ATOF (CDR
(ASSOC 1 T2)))))) (IF (VL-CATCH-ALL-ERROR-P GT) (SETQ LSTERR (STRCAT LSTERR "-
" (VL-CATCH-ALL-ERROR-MESSAGE GT) "\n") GT "#") (SETQ GT (VL-STRING-RIGHT-TRIM
"." (VL-STRING-RIGHT-TRIM "0" (RTOS GT))))) (SETQ P (CDR (ASSOC 10 T1)) PP
(LIST 10 (CAR P) YKQ (CADDR P)) TT (SUBST (CONS 1 GT) (ASSOC 1 T1) T1) TT
(SUBST PP (ASSOC 10 T1) TT)))) LST1 LST2)) (IF (/= LSTERR "") (ALERT (STRCAT
"Trong qua trinh tinh toan, co cac loi sau:\n" LSTERR)))))
(XULYTEXT +)
(C:CONG)
  • 0

#782 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 June 2008 - 08:15 AM

Em đã chạy thử Lisp Cộng - trừ - nhân - chia hai dãy text bác Hoành gửi nhưng gặp phải lỗi sau nhờ bác chỉ giáo thêm.
Lỗi khi thực hiện lệnh "Cong" trên AutoCad2007 với 6 đối tượng text:
Command: cong

Nhap vao hang text dau tien:
Select objects: Specify opposite corner: 3 found

Select objects:

Nhap vao hang text thu hai:
Select objects: Specify opposite corner: 3 found

Select objects:
; error: no function definition: SS2ENT

Xin lỗi bạn, tôi quên mất cho hàm ss2ent vào.

Bạn copy đoạn mã dưới đây nối thêm vào cuối cùng của phần lisp trên:

(defun ss2ent(ss / sodt index lstent)
(setq
sodt (if ss (sslength ss) 0)
index 0
)
(repeat sodt
(setq ent (ssname ss index)
index (1+ index)
lstent (cons ent lstent)
)
)
(reverse lstent)
)

Hoặc copy lại code lisp ở bài viết trước của tôi, tôi đã edit cho đúng.
  • 0

#783 MANHHUNGXDA

MANHHUNGXDA

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 926 Bài viết
Điểm đánh giá: 458 (tốt)

Đã gửi 12 June 2008 - 08:35 AM

Em hỏi tý!
Em tính san nền, có rất nhiều Block tạo từ lệnh ATTDEF (ATTRIBUTE)
Cái giá trị thể tích của nó cũng nằm trong 1 block này
em muốn tính tổng tất cả các số trong block này (khối lwợng đào đắp) , thì ok
Nhưng mà chỉ tính 1 phần trong số những block đó thì có cách nào không ạ!

Phá khối thì nó lại không đwợc!
Em xin cảm ơn!
  • 0
Hãy ước cho trọn 1 ước mơ!

#784 Nộ Thiên

Nộ Thiên

    biết lệnh ddedit

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

Đã gửi 12 June 2008 - 08:45 AM

Em hỏi tý!
Em tính san nền, có rất nhiều Block tạo từ lệnh ATTDEF (ATTRIBUTE)
Cái giá trị thể tích của nó cũng nằm trong 1 block này
em muốn tính tổng tất cả các số trong block này (khối lwợng đào đắp) , thì ok
Nhưng mà chỉ tính 1 phần trong số những block đó thì có cách nào không ạ!

Phá khối thì nó lại không đwợc!
Em xin cảm ơn!

Phải up cái Block đó lên Bác Hoành mới trả lời đc.
Hoặc Bác có thể tham khảo file dưới đây.
http://www.cadviet.com/upfiles/Tinh2.lsp
mà chỉnh lại cho đúng với cái Block của Bác.
  • 1

#785 MANHHUNGXDA

MANHHUNGXDA

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 926 Bài viết
Điểm đánh giá: 458 (tốt)

Đã gửi 12 June 2008 - 08:59 AM

Em hỏi tý!
Em tính san nền, có rất nhiều Block tạo từ lệnh ATTDEF (ATTRIBUTE)
Cái giá trị thể tích của nó cũng nằm trong 1 block này
em muốn tính tổng tất cả các số trong block này (khối lwợng đào đắp) , thì ok
Nhưng mà chỉ tính 1 phần trong số những block đó thì có cách nào không ạ!

Phá khối thì nó lại không đwợc!
Em xin cảm ơn!

File đây bác
http://www.cadviet.c...les/tongATT.dwg
  • 0
Hãy ước cho trọn 1 ước mơ!

#786 Nộ Thiên

Nộ Thiên

    biết lệnh ddedit

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

Đã gửi 12 June 2008 - 09:31 AM

File đây bác
http://www.cadviet.com/upfiles/tongATT.dwg

http://www.cadviet.com/upfiles/MHXDA.lsp
  • 1

#787 MANHHUNGXDA

MANHHUNGXDA

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 926 Bài viết
Điểm đánh giá: 458 (tốt)

Đã gửi 12 June 2008 - 09:47 AM

<a href="http://www.cadviet.com/upfiles/MHXDA.lsp" target="_blank">http://www.cadviet.com/upfiles/MHXDA.lsp</a>

Không biết nói gì hơn, Em trân thành cảm ơn anh!
  • 0
Hãy ước cho trọn 1 ước mơ!

#788 minhdung007

minhdung007

    biết pan

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

Đã gửi 12 June 2008 - 10:14 PM

Xin lỗi bạn, tôi quên mất cho hàm ss2ent vào.

Bạn copy đoạn mã dưới đây nối thêm vào cuối cùng của phần lisp trên:


(defun ss2ent(ss / sodt index lstent)
(setq
sodt (if ss (sslength ss) 0)
index 0
)
(repeat sodt
(setq ent (ssname ss index)
index (1+ index)
lstent (cons ent lstent)
)
)
(reverse lstent)
)

Hoặc copy lại code lisp ở bài viết trước của tôi, tôi đã edit cho đúng.


Em thực hiện các phép tính "Cong" "Tru" "Nhân" "Chia" đều thành công. Chỉ có phép phép "Nhân" cho kết quả tận cùng là các chữ số không (0) đều không hiển thị số không. Ví dụ 4*5=2, 5*20=1...
Một vấn đề nữa là kết quả nằm trùng lên dãy text chọn đầu tiên do đó rất khó xem kết quả. Bác có thể sửa cho em kết quả nằm ở vị trí có toạ độ Y bất kỳ tự chọn trên màn hình không?
  • 0

#789 ditimbantot

ditimbantot

    biết zoom

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

Đã gửi 15 June 2008 - 03:17 PM

-Bác Hoành ơi vậy bác có thể viết giùm mình 1 lisp pick chọn số liệu tọa độ không không cần nhập tọa độ lại không,
-Mỗi lần nhập lại Pline phải gõ lại tọa độ có khi gõ sai nữa , phải gõ lại mệt thiệt có khi cần cả mấy chục điểm tọa độ pline gõ lại muốn mỏi tay luôn bác giúp giùm cái nha dù sao cũng thank bác nhiều
  • 0

#790 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 15 June 2008 - 04:05 PM

-Bác Hoành ơi vậy bác có thể viết giùm mình 1 lisp pick chọn số liệu tọa độ không không cần nhập tọa độ lại không,
-Mỗi lần nhập lại Pline phải gõ lại tọa độ có khi gõ sai nữa , phải gõ lại mệt thiệt có khi cần cả mấy chục điểm tọa độ pline gõ lại muốn mỏi tay luôn bác giúp giùm cái nha dù sao cũng thank bác nhiều

'Số liệu tọa độ' là cái gì bạn?
Bạn có thể nói rõ không? hoặc bạn upload được 1 file lên diễn đàn là tốt nhất.
  • 0

#791 traitimsat034

traitimsat034

    biết vẽ pline

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

Đã gửi 16 June 2008 - 09:01 PM

anh cho em xin một lisp gồm 3 lệnh giống như lệnh layer iso, lay on và lay off nhưng chức năng là đóng băng và phá băng lớp. các lớp được chọn bằng cách select trên màn hình. cám ơn anh!
  • 0

#792 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 16 June 2008 - 11:40 PM

anh cho em xin một lisp gồm 3 lệnh giống như lệnh layer iso, lay on và lay off nhưng chức năng là đóng băng và phá băng lớp. các lớp được chọn bằng cách select trên màn hình. cám ơn anh!

bạn thử lệnh LAYFRZ và LAYTHW chưa?
  • 0

#793 trungthucsd10

trungthucsd10

    biết pan

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

Đã gửi 17 June 2008 - 06:54 AM

Các bác ơi.
Tôi là người mới làm quen với Cad nhưng khi tham gia diễn đàn thấy mấy bác hướng dẫn những câu lệnh hay quá, ví như eattext
Tôi đang có rất nhiều điểm trong một bản vẽ cần chuyển toạ độ của chúng sang dạng .txt hay exel thì làm thế nào?
Có pác nào biết thì chỉ giúp tôi với.
  • 0

#794 crazylisp

crazylisp

    biết vẽ line

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

Đã gửi 21 June 2008 - 08:58 AM

Các bác ơi.
Tôi là người mới làm quen với Cad nhưng khi tham gia diễn đàn thấy mấy bác hướng dẫn những câu lệnh hay quá, ví như eattext
Tôi đang có rất nhiều điểm trong một bản vẽ cần chuyển toạ độ của chúng sang dạng .txt hay exel thì làm thế nào?
Có pác nào biết thì chỉ giúp tôi với.

Bạn hãy nêu rõ yêu cầu hơn. Vì tôi thấy trên diễn đàn cũng đã có 1 số lisp xuất dữ liệu CAD sang dạng txt.
  • 0

#795 en_bien

en_bien

    Chưa sử dụng CAD

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

Đã gửi 23 June 2008 - 04:44 PM

xin các huynh giúp e!!
e đã có các lisp như : tạo các layer, các kiểu dim, các text...
giờ em muốn mỗi khi mở cad thi các lisp đó đã được mặc định, tức là đã
có các layer,dim...
xin cám ơn các a nhiều nhiều
  • 0

#796 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 23 June 2008 - 05:10 PM

xin các huynh giúp e!!
e đã có các lisp như : tạo các layer, các kiểu dim, các text...
giờ em muốn mỗi khi mở cad thi các lisp đó đã được mặc định, tức là đã
có các layer,dim...
xin cám ơn các a nhiều nhiều

Bạn tạo 1 file mẫu, rồi save file đó vào: acad.dwt, mỗi lần new 1 file, chương trình sẽ chọn theo file này làm mẫu.
  • 0

#797 dvdcad

dvdcad

    biết vẽ arc

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

Đã gửi 23 June 2008 - 10:24 PM

mình nhờ các bác viết giúp 1lisp nhé: mình có 1file *txt trongđó format file như sau: tên điểm Toạ độ X toạ độ Y cao h

mình muốn có file lisp Import lên bản vẽ mà trên bản vẽ hiện lên tên điểm đó và ngược lại export ra file *.txt có định dạng như trên. cảm ơn nhiều
  • 0

#798 en_bien

en_bien

    Chưa sử dụng CAD

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

Đã gửi 24 June 2008 - 04:09 PM

Bạn tạo 1 file mẫu, rồi save file đó vào: acad.dwt, mỗi lần new 1 file, chương trình sẽ chọn theo file này làm mẫu.

A có thể nói rỏ hơn ko, e làm như a nói nhưng ko đc, e mới mày mò thôi, mong a thông cảm. thank
ah! a cho e hỏi thêm tí nữa : file có đuôi là *.-ls file ; *.arx ; *.sld , a cho e biết những chức năng của những file này đc ko??
thank a
  • 0

#799 ssg

ssg

    biết lệnh adcenter

  • Vip
  • PipPipPipPipPipPipPip
  • 1228 Bài viết
Điểm đánh giá: 1087 (rất tốt)

Đã gửi 24 June 2008 - 04:37 PM

A có thể nói rỏ hơn ko, e làm như a nói nhưng ko đc, e mới mày mò thôi, mong a thông cảm. thank
ah! a cho e hỏi thêm tí nữa : file có đuôi là *.-ls file ; *.arx ; *.sld , a cho e biết những chức năng của những file này đc ko??
thank a

1) Yêu cầu của bạn không liên quan gì đến lisp
2) Cách làm cụ thể:
- Tạo 1 bản vẽ mới, tự thiết lập layer, textstyle, dimstyle, linestyle, khung bản vẽ, khung tên... mẫu theo ý bạn
- Saveas *.dwt (tên gì tuỳ bạn, không nhất thiết là acad.dwt) -> bạn đã có 1 bản vẽ mẫu dạng *.dwt (AutoCAD Drawing Template), được lưu trữ để sử dụng nhiều lần sau này.
- Lập bản vẽ mới theo mẫu: Lệnh New - trong hộp thoại Create New Drawing, chọn nút "Use a template", chỉ định file *.dwt mà bạn đã lưu trữ nói trên.
Kết quả: toàn bộ các thiết lập trước đây của bạn được gán cho bản vẽ mới vừa tạo, không phải mất công làm lại các thao tác (khá mất thời gian và nhàm chán) đó nữa.
3) Bạn chưa nắm được cách tạo và dùng *.dwt tức là chưa vượt qua giai đoạn "AutoCAD cơ bản", đừng để ý đến các file *.sld, *.arx làm gì cho nó mệt người. Hãy đợi đấy!
  • 1

#800 hocvecad

hocvecad

    biết vẽ arc

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

Đã gửi 25 June 2008 - 01:58 AM

Bác Hoành ơi , em đã đọc và sử dụng lệnh Cinvis của bác . Vậy bác có thể giúp em viết lisp hiện đối tượng theo màu không . Ví dụ như chỉ hiện đối tượng có màu đỏ chẳng hạn . Em rất khâm phục bác . Trình độ Lisp của bác em học cả đời chắc cũng ko theo nổi .
  • 0