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

Doan Nguyen Van

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

    765
  • Đã tham gia

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

  • Ngày trúng

    121

Bài đăng được đăng bởi Doan Nguyen Van


  1. 2 giờ trước, cadok đã nói:

    Do trong một số lisp của cad, khi ta Cộng, nếu là dâu , nó chỉ cộng phần nguyên, còn phần thập phân nó ko cộng. Ví dụ như lisp ATT+ này của diễn đàn CadViet. Mình có đính kèm lisp bên dưới b xem nhé

    ATT+.LSP

    (defun c:ATT+ (/ ent tag lst tong ss)
      (setq ent  (car (nentsel "Pick COLUM+:")))
      (setq tag (cdr (assoc 2 (entget ent))) tong 0.0)
      (princ "\nQuet chon cac block")
      (setq ss (ssget (list (cons 0 "INSERT"))))
      (while (setq ent (ssname ss 0))
        (setq ss (ssdel ent ss))
        (if (setq lst (assoc  tag (mapcar '(lambda (att) (cons (vla-get-tagstring att) (vla-get-textstring att)))
    	    (vlax-invoke (vlax-ename->vla-object ent) 'getattributes)
    	    ))) 
    	  (setq tong (+ tong (distof (vl-string-subst "." "," (cdr lst) )))))
        )
    (alert (rtos tong 2 2))
    )

    Thay vì sửa file cad, mình sửa lệnh này cho bạn cộng đc cả phần dấu ","

    • Like 2

  2. 12 giờ trước, nguyenhoangm3k4 đã nói:

    Mình muốn viết 1 lisp kết xuất ra text diện tích của hình mầu đen và hình mầu đỏ sau đó kết xuất chỉa tỉ lệ % của hình mầu đen so với hình mầu đỏ. xin các Pro viết giúp xin cảm ơn nhiều ạ !!! 

     image.png.281b4bae93094ca24bf354c87406ea52.png

    Inbox zalo 0976379894 nhé bạn


  3. 1 giờ trước, cuongtk2 đã nói:

    Tên nút lưu ở XML/button.xml, danh mục lưu ở các Option 1-6.xml theo thứ tự nút trong file button. Anh đang định viết lại để mình có thể  nhận dạng số lượng button từ file button.xml để cho người dùng có thể tăng hoặc giảm số lượng danh mục. Thư mục XML phải để cùng thư mục với file thi hành (exe)

    Debug.rar

    Hay đấy a, lưu trữ lsp tìm lại dễ, không biết cái này có thêm được dòng Find (tìm tên trong danh sách danh mục không a nhỉ)


  4. Vào lúc 24/11/2023 tại 18:21, cuongtk2 đã nói:

    Tôi viết tool nhỏ để các bạn có thể lưu trữ những đoạn code, cũng như những đoạn văn bản.

    Các table bên trái sửa tên trong file button.xml. 

    Một chỉ mục có 3 thành phần: chỉ mục, nội dung, mô tả. Tên chỉ mục được sắp xếp ABC trên listbox danh mục.

    Các sửa đổi chỉ mục cần Save. Nút Select để copy to Clipboard 

    Chúc mọi người vui vẻ.

    SnippedCode.rar

    Cái này dữ liệu lưu ở đâu anh nhỉ, nếu chuyển máy tính khác còn gắp đi được ^^


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

    Bạn không hiểu ý bên trên của mình rồi password là một đoạn văn bản đã bị mã hoá trong đoạn văn bản này dịch ngược sẽ được ngày tháng năm. dùng để so sánh.

    Nếu nhập đúng sẽ lưu đoạn văn bản đó ra registry. Mỗi lần load lisp đọc registry.

    Nếu có registry dịch ngược registry nếu đúng là định dạng ngày tháng năm mình đặt ra, thì bắt đầu so sánh.

    Nếu sai quay lại công cụ nhập password

     

    Mình ví dụ về 1 hàm mã hoá ngày tháng năm mình đang dùng.

    string_1 = 2023-08-26-b5435b1kjh46b51kh5431kl5b

    đằng trước là ngày tháng năm đằng sau là md5.

    b1:    2023-08-26 -> Abcdef gì gì đó

    b2:    xáo trộn trật tự của đoạn văn bản

    Được string_2 = password

     

    Nhập password thì sắp xếp lại trật tự ban đầu. 

    So sánh md5 của 2023-08-26 có bằng dãy số đằng sau không

    Nếu không đúng thì bắt đầu so sánh thời gian.

     

    Tỷ lệ người dùng sửa được cái text này đúng dạng thời gian mà mình đặt ra = 1/(8E48) không có khả năng đâu :))

     

    Vs lsp, không gì là không thể :))


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

    Ui bác test cái hình gì nguy hiểm thế :))

     

     

    10 phút trước, Duong Nhat Duy đã nói:

    Lisp ngon quá, nhưng mà theo bác Đoàn test thì đang hơi sai sai đó.

    Kaka, test lỗi nó cùng nằm trên cung tròn ấy mà, thêm điều kiện so sánh chiều dài nữa là ngon 


  7. 14 phút trước, ngokiet đã nói:

    Mình có viết thử cho vui

    Test   (vl-sort '("1" "10" "10C" "10A" "10B" "2" "20" "25" "3" "4") 'ssnt)

    hay (vl-sort lst '(lambda(a b) (ssnt (cdr(assoc 1 a)) (cdr(assoc 1 b))))

     

     

    
    (defun ssnt(s1 s2 / t1 t2)
      (if (/= s1 "")
        (if (/= s2 "")
          (if (< 47 (ascii s1) 58)      
    	(if (< 47 (ascii s2) 58)
    	  (if (eq (setq t1 (atoi s1)) (setq t2 (atoi s2)))
    	    (ssnt (vl-string-left-trim "0123456789" s1) (vl-string-left-trim "0123456789" s2))
    	    (< t1 t2)))
    	(if (eq (ascii s1) (ascii s2))
    	  (ssnt (substr s1 2) (substr s2 2))
    	  (or (< 47 (ascii s2) 58) (< (ascii s1) (ascii s2))))))))

     

    Cái này gặp lỗi với các list dạng số 


  8. 15 giờ trước, Duong Nhat Duy đã nói:

    Mình có sưu tầm được 1 hàm sắp xếp list string của cụ Lee Mac khá hay, đại ý nó sort
    (LM:alphanumsort (list "1" "10" "10A" "10B" "2" "20" "25" "3" "4"))
    ;thành (list "1" "2" " "3" "4" "10" "10A" "10B" "20" "25")

    
    ;; Alphanumerical Sort  -  Lee Mac
    ;; Sorts a list of strings containing a combination of alphabetical & numerical characters.
     
    (defun LM:alphanumsort ( lst )
        (mapcar (function (lambda ( n ) (nth n lst)))
            (vl-sort-i (mapcar 'LM:splitstring lst)
                (function
                    (lambda ( a b / x y )
                        (while
                            (and
                                (setq x (car a))
                                (setq y (car b))
                                (= x y)
                            )
                            (setq a (cdr a)
                                  b (cdr b)
                            )
                        )
                        (cond
                            (   (null x) b)
                            (   (null y) nil)
                            (   (and (numberp x) (numberp y)) (< x y))
                            (   (numberp x))
                            (   (numberp y) nil)
                            (   (< x y))
                        )
                    )
                )
            )
        )
    )
     
    ;; Split String  -  Lee Mac
    ;; Splits a string into a list of text and numbers
     
    (defun LM:splitstring ( str )
        (
            (lambda ( l )
                (read
                    (strcat "("
                        (vl-list->string
                            (apply 'append
                                (mapcar
                                    (function
                                        (lambda ( a b c )
                                            (cond
                                                (   (= 92 b)
                                                    (list 32 34 92 b 34 32)
                                                )
                                                (   (or (< 47 b 58)
                                                        (and (= 45 b) (< 47 c 58) (not (< 47 a 58)))
                                                        (and (= 46 b) (< 47 a 58) (< 47 c 58))
                                                    )
                                                    (list b)
                                                )
                                                (   (list 32 34 b 34 32))
                                            )
                                        )
                                    )
                                    (cons nil l) l (append (cdr l) '(( )))
                                )
                            )
                        )
                        ")"
                    )
                )
            )
            (vl-string->list str)
        )
    )

    Nhưng mình muốn dùng nó ở dạng "này" (vì mình chả biết phải gọi nó là gì nữa :(( )

    
    (setq lst (list
    	    (cons "1" ent1)
    	    (cons "10A" ent2)
    	    (cons "25" ent3)
    	    ))
    (vl-sort lst '(lambda (a b) (< (car a) (car b))))
    
    ;Mình muốn từ cái hàm sắp xếp LeeMac, biến nó thành 1 quy luật (thay cho cái chỗ (< (car a) (car b)) để sort các list cho nó tổng quát hơn, ví dụ như cái list mình đang có ở trên, sort theo nguyên tố đứng đầu

    Các bạn giúp mình với, mình cảm ơn !

    Thay (mapcar 'LM:splitstring lst) thành (mapcar 'LM:splitstring (mapcar '(lambda (x) (car x)) lst)) nhé bác

    • Like 1

  9. 23 phút trước, NamPhamts đã nói:

    Chào các anh, em mới tìm hiểu Cad 3D không biết trong các có lệnh nào hay lisp nào tạo ra các Surface giữa các mặt tiếp giáp hoặc giao nhau của các khối không ạ.

    Giống như lệnh "interfere" tạo ra khối giao nhau giữa 2 khối.

    Em cảm ơn ạ!

     

    Dùng lệnh SECTION nhé bạn, pick 3 điểm 


  10.  

    1 giờ} trướ}c, Nguyễn Hà Huy đã nói:

    bác hiểu sai vấn đề rồi, trong seting đó chỉ tắt cái cung đấy thôi có đổi độ thành số của DIMANGULAR đâu, lisp của bác @tannguyen291 đang giúp em chuyển dim DIMARC sang DIMANGULAR, nhưng do dim DIMARC em phải cắt nhỏ cung ra để dim mất thời gian lên đang muốn các bác giúp loại dim DIMANGULAR nó có hỗ trợ DIMCONTINUE khi dim nó thuận tiện hơn

    Đọc mấy bài trên hiểu thấy vấn đề bạn Huy đặt ra là dim Angular nó có hỗ trợ DIMCONTINUE thôi

    Đã viết lsp rồi sao không viết thành dim ARC Continue lun nhỉ ^^

    (defun c:da2 (/ lacu ptt1 cen ptt2 ptt3 r ang lst ent)
      (setq	ptt1 (getpoint "\nPick \U+0111i\U+1EC3m th\U+1EE9 nh\U+1EA5t: ")
    	cen  (osnap ptt1 "_CEN")
      )
      (if (not cen)
        (alert "\nKh\U+00F4ng ph\U+1EA3i l\U+00E0 ARC!!!")
        (progn
          (setq ptt2 (getpoint cen "\nPick \U+0111i\U+1EC3m th\U+1EE9 hai: ")
    	    r	 (distance cen ptt1)
    	    ang	 (angle cen ptt1)
          )
          (setq dis	(distance (setq ptt3 (getpoint (setq ptm (ACET-GEOM-MIDPOINT ptt1 ptt2)) "Pick Diem Dat"))
    			  ptm
    		)
          )
          (entmake (list (cons 0 "ARC")
    		     (cons 10 cen)
    		     (cons 40 r)
    		     (cons 50 ang)
    		     (cons 51 (+ ang (- (* 2 pi) 0.001)))
    	       )
          )
          (setq ent (entlast))
          (setq lst (list ent ptt1))
          (command "dimarc" lst "p" ptt1 ptt2 ptt3)
          (entdel ent)
          (Setq ptt1 ptt2)
          (while (setq ptt2 (getpoint cen "\nPick \U+0111i\U+1EC3m TIEP THEO: "))
    	(setq r	  (distance cen ptt1)
    	      ang (angle cen ptt1)
    	)
    	(entmake (list (cons 0 "ARC")
    		       (cons 10 cen)
    		       (cons 40 r)
    		       (cons 50 ang)
    		       (cons 51 (+ ang (- (* 2 pi) 0.001)))
    		 )
    	)
    	(setq ent (entlast))
    	(setq lst (list ent ptt1))
    	(setq ptt3 (polar (setq ptm (ACET-GEOM-MIDPOINT ptt1 ptt2)) (angle cen ptm) dis))
    	(command "dimarc" lst "p" ptt1 ptt2 ptt3)
    	(entdel ent)
    	(Setq ptt1 ptt2)
          )
        )
      )
      (princ)
    )

     

    • Vote tăng 1

  11. 56 phút trước, limfx đã nói:

    Mình đang tạo Lisp entmake Arc length Dimension, làm thế nào để xác định điểm p3, p4 từ điểm p1, p2 đã biết để cho kết quả Arc length Dimension như mong muốn? Thanks!

    Lisp:

    (entmakex (list '(0 . "ARC_DIMENSION") '(100 . "AcDbEntity")
            (cons 100 "AcDbDimension")
            (cons 10 p3);location of dimension line
            (cons 11 p4);location of dimension text
            (cons 70 37)
            (cons 100 "AcDbArcDimension")
            (cons 13 p1);start point
            (cons 14 p2);end mpoint
            (cons 15 c);center point
          );list
          );entmake

    Dimention.dwg

    dimmension.jpg

    Cái Point P1 P2 đi theo chiều cố định theo chiều ngược chiều kim đồng hồ bạn nhé

    • Like 1

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

    @Lâm Vũ em thấy cái lisp này nó không ổn lắm bác ạ, đường tim không đúng, lisp đang nối từng điểm trên 2pline với nhau theo thứ tự điểm nhưng các điểm trên 2 đường pline nó không song song nhau nên nhiều đoạn nó nối chéo 1 phát, thành ra tim nó không đúng, bác có cách gì không ạ?

    Gửi bản vẽ lên xem bạn 


  13. Vào lúc 6/8/2022 tại 11:35, trungkien8338 đã nói:

    đúng rồi bạn, mình đọc giá trị của attribute bằng autolisp. vậy là không có lisp nào khắc phục được lỗi này sao bạn.

    Gợi ý cho bạn cách lấy thông tin ATT không bị lỗi Unicode

    (Entget(vlax-vla-object->ename(car (vlax-invoke (vlax-ename->vla-object (Car(entsel))) 'getattributes))))

     

    • Like 1
×