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

Tot77

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

    934
  • Đã tham gia

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

  • Ngày trúng

    60

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


  1. Thật ra bạn đã "sưu tầm" đầy đủ các hàm cần thiết, nhưng bạn chưa vận dụng hết thôi.

    (defun c:AV(/ OBJ PARAMPT PL SS)
        (if
            (and
             (setq pl (car (entsel "\n Chon Polyline can them Node : ")))
             (= (cdr (assoc 0 (entget pl))) "LWPOLYLINE")
                 (setq obj (vlax-ename->vla-object pl))
                 (princ "\nChon Polyline cat:")
                 (setq    ss (ssget))
           )
            (foreach pt (LM:intersectionsinset (ssadd pl ss))
                (or
                (setq ParamPt (vlax-curve-getParamAtPoint pl pt))
                (setq ParamPt (vlax-curve-getParamAtPoint pl (vlax-curve-getClosestPointTo pl pt) ))
              )
                (if (> (- ParamPt (fix ParamPt)) 0.001); bo qua t/hop diem Pt trung voi dinh cua PLINE
                (vlax-invoke obj 'AddVertex (1+ (fix ParamPt)) (list (car pt) (cadr pt)))
              )
            )        
        ) (princ)
    )

     

    • Vote tăng 1

  2. Làm dùm bác, hơi lỉnh kỉnh nhưng xài tạm.

    <code>

    (defun test()
    (setq l '(a b 0 0 c d e 0 0 0 f g 0 h 0 0 i j))
    (setq l1 (cons 1 (append l (list 1))))

    (setq l1 (reverse (cdr (reverse (cdr (vl-remove-if '(lambda(x) (if (and (setq vt (vl-position x l1)) (/= 0 vt) (/=  vt (length l1)))
                                                              (and (/= 0 (nth (1- vt) l1)) (/= 0 (nth (1+ vt) l1)) ))) l1))))))
    (setq i 0
                l2 nil
                lc nil)
    (repeat (length l1)
        (cond ((and (= 0 (nth i l1)) (/= 0 (nth (1+ i) l1)))
                        (setq l2 (append l2 (list (nth i l1) (nth (1+ i) l1)))
                                    lc (append lc (list l2))
                                  l2 nil))
                    ((and (/= 0 (nth i l1)) (/= 0 (nth (1+ i) l1))))
                    (t    (setq l2 (append l2 (list (nth i l1)))))
                    )
        (setq i (1+ i))
    )
    lc
    )

    </code>

    • Vote tăng 1

  3. Bạn thử cái này, có điều tôi không hiểu là file text xep theo thứ tự y x z chứ không phải x y z.

     

    (defun c:tes(/ dong toado file)
    (defun dxf (id v) (cdr (assoc id (entget v))))
     
    (setvar 'dimzin 2)
    (prompt "\nChon file text:")
    (setq file (open (getfiled "Open file" (getvar "dwgprefix") "txt" 4) "r"))
    (if (not txtmau) (setq txtmau (car (entsel "\nChon text mau:"))))
    (while (setq dong (read-line file))
    (while (vl-string-search "\t" dong) (setq dong (vl-string-subst " " "\t" dong)))
    (setq toado (cdr (read (strcat "(" dong ")")))
    toado (list (cadr toado) (car toado) (last toado)))
    (entmakex (list (cons 0 "TEXT") (cons 10 toado) (cons 11 toado) (cons 62 (dxf 62 txtmau))
    (cons 40 (dxf 40 txtmau)) (cons 41 (dxf 41 txtmau)) (cons 7 (dxf 7 txtmau))
    (cons 72 (dxf 72 txtmau)) (cons 73 (dxf 73 txtmau))
    (cons 50 0) (cons 1 (rtos (last toado) 2 2)) (cons 8 (dxf 8 txtmau)))) 
    )
    (close file)
    )
     
    

  4. Bạn nào biết xin giúp mình thuật toán giải quyết vấn đề dưới đây nhé
    *Giả sử có một danh sách phức hợp
    (setq li ‘((3 a) (2 b (5 c) (6 a) (3 b (6 d) (3 c) (3 b (7 a)))
    -Trong đó (3 a), (2 b, (5 c),… là các danh sách con 
    Với  3, 2 , 5,… là các ký hiệu số thực bất kỳ ứng với từng danh sách con trong đó
    Và a, b, c,…là các chữ cái bất kỳ ứng với từng danh sách con trong đó
    *Bài toán: xắp xếp lại danh sách li trên theo kiểu
    -trật tự danh sách trên không được thay đổi
    -ký hiệu của danh sách con đầu tiên sẽ được đánh số 1 ( (3 a) thành (1 a))
    - các ký hiệu trên được đánh số tăng dần theo cấp số cộng (+1)
    -các chữ cái giống nhau sẽ được đánh số ký hiệu giống nhau
    Như ví dụ trên sau khi giải quyết sẽ có dạng giống như
     ‘((1 a) (2  B) (3 c) (1 a) (2  B) (4 d) (3 c) (2  B) (1 a))
    Diễn đạt có gì lủng củng các bạn bỏ qua nhé. Cám ơn các bạn nhé

     

    Bạn thử cái này, có điều nếu là chữ cái thì phải nằm trong dấu "".

    (defun test(/ L1 L2 L3 L4 LI N)
    (setq li '((3 "a") (2 "b") (5 "c") (6 "a") (3 "b") (6 "d") (3 "c") (3 "b") (7 "a"))
    n 1
    l1 (mapcar 'last li)
    l2 nil ; dict 1
    l3 nil ; dict 2
    l4 nil ; kq
    ) 
    (foreach v l1
    (if (not (member v l2))
    (setq l2 (cons v l2)
    l3 (cons (list v n) l3)
    l4 (cons (list n v) l4)
    n (1+ n))
    (setq l4 (cons (reverse (assoc v l3)) l4))) 
    )
    (reverse l4)
    )
    
    • Vote tăng 1

  5. Bạn làm như sau:

     

    (defun tra (a lst)
    (while (or (< a (car lst)) (> a (last lst)))
    (setq a (getreal (strcat "\nNhap gia tri trong khoang " (rtos (car lst)) "->" (rtos (last lst)) " :"))))
    (if (member a lst)
    (vl-position (car (vl-remove-if-not '(lambda(x) (= x a)) lst)) lst)
    (list (setq c (1- (vl-position a (vl-sort (cons a lst) '<)))) (1+ c)))
    )
    ;;; test
    (tra 0 '(1 2 3 4 5.2 6.3))
    (tra 7.2 '(1 2 3 4 5.2 6.3))
    (tra 4.0 '(1 2 3 4 5.2 6.3))
    (tra 4.5 '(1 2 3 4 5.2 6.3))
    

    Tuy vl-position phân biệt real và int nhưng hàm member lại không phân biệt.

    Các hàm vl- khá nhiều, chắc chẳng ai rảnh mà dịch hết ra tiếng Việt, nếu có thì chắc là viết sách bán thôi.

    Tuy vậy bạn cũng chẳng cần biết tiếng anh làm gì, đọc help chỉ cần chú ý mấy cái ví dụ để biết cách sử dụng là được rồi.

    • Vote tăng 1
×