Chuyển đến nội dung
Diễn đàn CADViet

minhdung007

Thành viên
  • Số lượng nội dung

    8
  • Đã tham gia

  • Lần ghé thăm cuối

Bài đăng được đăng bởi minhdung007


  1. 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?


  2. 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)


  3. Một hàng là một hay nhiều đối tượng text?

    Một dòng là một hay nhiều đối tượng text?

     

    Bạn đừng có dùng chữ hàng hay dòng bởi vì nó không sáng hơn bài viết trước của bạn chút nào. Bạn hãy trả lời câu hỏi bài viết trước của tôi: cho tôi biết trong ví dụ đầu tiên của bạn có bao nhiêu đối tượng text? 2 hay 12?

     

    Nếu có thể tránh hiểu nhầm, bạn hãy upload 1 file dwg lên diễn đàn. Tôi không ngại viết lisp nhưng tôi ngại viết sai ý bạn, vì khi tôi đã viết tôi sẽ không sửa lisp nữa.

    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.


  4. Dữ liệu nhập vào thế nào bạn? Nhập vào từ 2 đối tượng text, hay từ 12 đối tượng text, hay từ file txt,....

    Kết quả được xuất ra thế nào bạn?

    Dữ liệu nhập vào là hai hàng text nằm song song và không hạn chế về số lượng (có thể 2, 4, 6, 8text hay nhiều hơn), Kết quả được xuất ra là một dòng text nằm song song phía dưới hai dòng text kia. Như ví dụ đối với 6 cặp text em gửi cho bác Hoành đó. Cảm ơn bác đã quan tâm.


  5. Bạn có thể post yêu cầu về autolisp ở topic này.

    Nhờ bác Hoành viết hộ em lisp này. Chân thành cảm ơn bác nhiều!

    Cộng - trừ - nhân - chia hai hàng số cho trước và ghi kết quả ra hàng thứ 3.

    Ví dụ: Có hai dãy số

    2 5 6 8 18 10

    1 2 7 8 2 1

    Kết qủa:

    - Phép cộng (cong): 3 7 13 16 20 11

    - Phép trừ (tru): 1 3 -1 0 16 9

    - Phép nhân (nhan): 2 10 42 64 36 10

    - Phép chia (chia) : 2 2.5 0.86 1 9 10


  6. Bạn có thể post yêu cầu về autolisp ở topic này.

    Bác Nguyen Hoanh oi! Em khoái cái món Autolisp này của Bác lắm! Cảm ơn các Bác đã khai sinh ra trang Web để cho em down Lisp của các Bác về dùng <_< và đem lại hiệu quả công việc cao. Hôm nay em có ý tưởng này mong các Bác giúp em với:

    -Ghi cao độ + ký hiệu mũi tên cao độ của điểm thứ 2 thông qua điểm thứ 1. Khi đã có text cao độ + ký hiệu mũi tên cao độ của điểm 1. Bằng cách tự chọn điểm đặt kết quả và đo khoảng cách theo phương Y từ điểm 1 đến điểm 2 trên bản vẽ.

    Mục đích của lisp này là điền cao độ + ký hiệu mũi tên cao độ các điểm khác. Khi đã có trước cao độ + ký hiệu mũi tên cao độ 1 điểm và khoảng cách theo phương Y giữa điểm 1 và các điểm còn lại.

×