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

alisp

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

    204
  • Đã tham gia

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

  • Ngày trúng

    25

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


  1. 14 giờ trước, alisp đã nói:

    8 câu trả lời mà mọi người vẫn phải đoán già đoán non, không hiểu chủ thớt muốn gì lun, ngay tên lệnh cũng nói sai, đó là chamfer chứ kp fillet nhé bác, botay.com!!

    Tôi nói như này là vì không muốn thấy bác Duongtrunghuy nản chí vi cư phải hỏi đi hỏi lại với lối trình bày mơ hồ của chủ thớt, bác Huy là 1 trong số it người còn nhiệt tình giúp đỡ người khác trong CV, bác ay mà không giúp nữa thì chẳng còn ai giúp nữa đâu.


  2. 8 giờ trước, nh0kdkny đã nói:

     

    mình đã thử nhưng hình như không phải. vẫn bị lỗi như này khi chọn nhiều đoạn thẳng còn chọn 1 đoạn thì vẫn dùng được. Có thể đoạn tính tổng chiều dài không áp dụng được cho cad đời cao

     

    image.thumb.png.0cb2817c645ccb91bc09d62ede9cbfa7.png

     

    +Lần trước bạn nói lỗi text, đã sửa được rồi.

    +Lần này bạn nói không chọn được nhiều line, bạn sửa như sau:

    1- Xóa hết đoạn :

            (setq dtuong1 (cdr (car (entget (ssname doituong total)))))
             (command "lengthen" dtuong1"")
             (setq dt (getvar "Perimeter"))

    2- Thay bằng đoạn:

           (setq dtuong1 (ssname doituong total)
                     dt  (vlax-curve-getDistAtParam dtuong1 (vlax-curve-getEndParam dtuong1 )))

    + Nếu có lần sau thì nhờ người khác sửa.

     


  3. Vào lúc 25/1/2021 tại 11:24, nh0kdkny đã nói:

     

    em đang sử dụng lisp này cho cad 2007 thì ổn  nhưng chuyển sang cad 2019 thì lại bị lỗi polyline chọn text không hiển thị kết quả, với đường line sau khi chọn text xong không kết thúc lệnh mà cad lại hiện specify total length.  Mọi người sửa lại cho sử dụng đc với cad đời cao giúp em 

    đây là đoạn code:

    ;; free lisp from cadviet.com
    ;;; this lisp was downloaded from http://www.cadviet.com/forum/topic/47335-da-xong-lisp-xuat-chieu-dai-line-ra-text-co-san-va-co-tien-to-hau-to/
    (defun c:d21 (/ doituong total dtuong1 tdt dt ktext ktratext ktratext1 ktextcu textdt ktextmoi newcolor oldcolor)
       (setq doituong (ssget '((0 . "*LINE"))))
       (setq total (sslength doituong))
       (setq tdt 0)
       (repeat total
             (setq total (- total 1))
             (setq dtuong1 (cdr (car (entget (ssname doituong total)))))
             (command "lengthen" dtuong1"")
             (setq dt (getvar "Perimeter"))
             (setq tdt (+ tdt dt))
       )
       (setq ktext (car (entsel "chi vµo text cЗn ghi: ")))
       (setq ktratext (entget ktext))
       (setq ktratext1 (cdr (assoc 0 ktratext)))
       (if (= ktratext1 "TEXT")
           (progn
                   (setq ktextcu (assoc 1 ktratext))
                   (setq textdt (strcat "DN20-" (rtos (/ tdt 1000) 2 1) " "))
                   (setq ktextmoi (cons 1 textdt))
                   (setq ktratext (subst ktextmoi ktextcu ktratext))
                   (entmod ktratext)
                   (setq color bylayer)
                   (setq newcolor (cons 62 color))
                      (if (assoc 62 ktratext)
                          (progn
                               (setq oldcolor (assoc 62 ktratext))
                               (setq ktratext (subst newcolor oldcolor ktratext))
                               (entmod ktratext)
                          )
                          (entmod (append ktratext (list (cons 62 color))))
                       )
            )
            (alert "¤i trкi ¬i, chдn nhЗm rеi, ®г kh«ng ph¶i lµ tetx!")
       )
      (textpage)
      (graphscr)
    )

    image.png.85ad6760ab36fd64ccf2c2ea1c65f136.png

    Bạn sửa  (setq color bylayer) thành  (setq color 256) .


  4. 1 giờ trước, TRUNGNGAMY đã nói:

    Có khi trong cad đánh lệnh "select " "p" "enter" mình sẽ thấy các đối tượng đã chọn trước đó "hiện hình" nhưng trong lisp mình 0 làm được.

    Làm ơn các bạn chỉ giúp cách viết 1 lệnh lisp cho hiện lên các đối tượng vừa chọn trước đó

    (câu hỏi này trước dây mình thấy đâu đó nhưng quên mất tìm lại không được).

    Cám ơn các bạn.

    Đơn giản mà (sssetfirst nil (ssget "P"))

    • Vote tăng 1

  5. 5 giờ trước, phat1998 đã nói:

    Ý em là với lisp và với 2 đường thẳng AB và BA chứ không phải là có 2 góc rồi lấy 1 góc duy nhất anh ạ. tức là với lisp đó đối tượng là AB hya là BA thì kết quả là 1 ý ạ

    đây là lisp ạ:

     

    Ý bạn này chác muốn nói nếu đi từ đầu tới cuối đg cong hoặc đi ngược từ cuối lên đầu thì góc có giống nhau hay không đó mà, phải vậy ko?

    Nếu đúng là như vậy thì xin thưa là tại 1 điểm trên đg cong thì góc là như nhau bạn nhé, chỉ có điều vị trí điểm đo và thứ tự đo sẽ khác nhau thôi, tức là đi xuôi vị trí điểm đo sẽ khác với khi đi ngược.


  6. 59 phút trước, phat1998 đã nói:

    có phải em đang hiểu sai về cái ' (0,0) , đây là điểm thuộc UCS chứ ko phải WCS phải không ạ ?

    Bạn có vẻ bị ám ảnh bởi cái điểm (0 0) nhỉ, thôi bây giờ bạn tìm góc tiếp tuyến tại  (x y) với điểm kế tiếp (x + dx, y + dy) cho nó dễ hiểu đi, trong đó (dx dy) tìm bởi cái hàm trên.


  7. 1 giờ} trướ}c, phat1998 đã nói:

    có vẻ em vẫn đang bị rối , do em chưa hiểu bản chất, cho em hỏi: 

    em đã đọc khái niệm đạo hàm được ghim ở trên, vậy cuối cùng hàm ( angle '(0 0) (Vlax-curve-getfirstderiv curve (vlax-curve-getParamAtPoint curve pt))) tạo ra kết quả góc giữa cái gì với cái gì, có phải góc giữa tiếp tuyến tại điểm ta xét với trục 0x không ạ.

    cái em không hiểu là hàm Vlax-curve-getfirstderiv như anh nói trả về điểm, vậy sao lại là '(0 0) vì tiếp tuyến nó đâu có đi qua điểm gốc tọa độ ( 0 , 0)

     

    Đạo hàm không phải là điểm mà là (delta x, delta y) và trị của nó nhỏ vì lấy tại điểm kế bên điểm đang xét, do đó nếu lấy toạ độ điểm đang xét thì bạn phải cộng thêm toạ độ x,y của điểm đó mới ra toạ độ điểm kế bên. Vì vậy tốt nhất chọn (0 0) để khỏi phải cộng đó thôi.

×