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

snowman.hms

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

    105
  • Đã tham gia

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

  • Ngày trúng

    9

Bài đăng được đăng bởi snowman.hms


  1. image.png.0e388f7c3546f5f20fb3acb1db8e6603.png

     

    blocreference(insert) -> blockrecord -> xdict -> acad_evaluation_graph -> blockvisibilityparameter  (dxf 360) -> filter dxf 333 (*parameter)

     

    tham khảo bài viết của Gile: https://forums.autodesk.com/t5/visual-lisp-autolisp-and-general/get-list-of-parameters-being-used-in-block-without-vla-vlax/m-p/8461420#M378276

    http://poleshchuk.spb.ru/cad/2009/tainypod08e.htm

    • Like 1

  2. 1 giờ} trướ}c, Doan Van Ha đã nói:

    Nếu là index thì chưa đủ. VD khi test với p1 thì có 5 q, p2 có 3 q, p3 có 4 q. Mà tôi thì cần biết đ q của từng nhóm.

    Dù sao cũng cám ơn bạn. Bạn là 1 trong số ít người luôn đưa ra những thuật toán hay, tôi rất thích.

    à em k rõ mục đích của bác. chỉ đưa ra vậy thôi. trong lisp có vài điểm: dùng int thì nhanh hơn double, phép so sánh thì nhanh hơn tính toán, array thì nhanh hơn list, dùng sort quá nhiều sẽ gây chậm...

    • Like 1

  3. (defun _map (lp lq / f1 f2 f3)
    	;; where lp = dsQ && lq = dsP (query points)
    	((lambda (lp lq f1 f2 / l1 l2 a)
    			(setq l1 (f1 (vl-sort lp '(lambda (a b) (< (car a) (car b)))) 0)
    					l2 (f1 (vl-sort lq '(lambda (a b) (< (car a) (car b)))) 0)
    					a (vlax-make-safearray vlax-vbinteger (cons 0 (1- (length lp))))
    			)
    			(foreach p l1 (f2 p l2 a))
    			(f1 (vlax-safearray->list a) -1)
    		)
    		lp lq
    		(lambda (l i) (mapcar (function (lambda (x) (cons (setq i (1+ i)) x))) l))
    		(lambda (p l a / d d1 q q1 i)
    				(cond 
    					((null l))
    					((setq q (car l) i (car p) p (cdr p)  l (cdr l) d (distance p (cdr q)) q1 q)
    						(while l
    							(setq q (car l) l (cdr l))
    							(cond ((< d (abs (- (car p) (cadr q)))) (setq l nil))
    									((< (setq d1 (distance p (cdr q))) d) (setq d d1 q1 q))
    							)
    						)
    						;;(princ (strcat  "\n" (vl-prin1-to-string (list (1- i) d (1- (car q1))))))
    						(vlax-safearray-put-element a (1- i) (1- (car q1)))
    					)
    				)
    		)
    	)
    )
    ;; (_map dsQ dsP)

     

    • Like 1

  4. image.png.2a821bd977dd87a1eb7fe687a5a6cbf0.png 

     

    - Nếu đường cong cần tìm là đường tròn, và nếu điểm tiếp xúc với đường thẳng là điểm cuối (A)

    thì

       + tâm đường cong cần tìm nằm trên đường thẳng tại A và vuông góc với đoạn thẳng cho trước

       + khoảng cách từ tâm đường tròn cần tìm (O1) đến tâm đường tròn cho trước = khoảng cách từ điểm đó đến điểm A1 (offset theo cùng hướng một khoảng đúng bằng bán kính đường tròn cho trước)

       + tâm đường tròn cần tìm là giao điểm giữa đường trung trực của OA1 và AA1.

    • Like 1

  5. Hint : vlr-insert-reactor

    First parameter is a VLA-object pointing to the database in which the block is being inserted. ;;----> current database object

    Second parameter is a string naming the block to be inserted.                                                       ;;-----> Name of the block (or clipboard temp file within local->temp folder

    Third parameter is a VLA-object identifying the source database of the block.                            ;-----> the source database object (where the block being copied belong to)

     

    1614296739_nh.png.e9f9cd0ace9036b24685472f55c728e6.png

     

    ** Source database Contains :
      - Blockname : *Model_Space
      - Blockname : *Paper_Space
      - Blockname : _Oblique
      - Blockname : 2

    ảnh.png

    • Like 1

  6. (defun c:tt1 (/ cp dx dy p1 p2)
        (setq
            cp (getvar "VIEWCTR")
            dy (* 0.5 (getvar "VIEWSIZE"))
            dx (* 0.5 (* dy (/ (car (getvar "SCREENSIZE"))(cadr (getvar"SCREENSIZE")))))
            p1 (mapcar '- cp (list dx dy))
            p2 (mapcar '+ cp (list dx dy))
        )
        (princ
            (vl-prin1-to-string
                (list 'progn
                    (list 'setvar "ctab" (getvar 'ctab))
                    (list 'setq 'p1 (cons 'list p1) 'p2 (cons 'list p2))
                    (list 'command ".zoom" "w" 'p1 'p2)
                )
            )
        )    
        (princ)    
    )

    • Like 1

  7. @gia_bach với 2 pline phức tạp, cách này ko hiệu quả. Vì nó có thể tạo nhiều region khi thực hiện phép giao region. Thuật toán sẽ phải check in_pline nhiều lần.

    Nếu là e, e sẽ làm như này

    1. Chọn pline đỏ.

    2. Ssget "cp"

    3. Lọc ss, những thằng ko intersect thì cho vào result

    Những thằng intersect thì _dointersection 

    Cái dointersection này với tập lớn thì nên build graph với integer index sẽ hiệu quả.

    • Like 1

  8. 6 phút trước, Doan Van Ha đã nói:

    Đáp án chính xác!

    Qua câu hỏi này muốn truyền 1 thông tin mà user khi xử lý chuỗi dạng "nDm" chú ý, nếu không coi chừng lỗi lisp bất tử!

    Chữ "D" và "d" hóa ra cũng "gần giống" chữ "E" và chữ "e". Tuy nhiên (type 1E3) là REAL, nhưng (type 1D3) là Nil. 

    (mapcar	'(lambda (x)
    	     (princ (strcat "\n(atof \""
    			    x
    			    "\") = "
    			    (vl-prin1-to-string (atof x))
    			    "\n\t(distof \""
    			    x
    			    "\") = "
    			    (vl-prin1-to-string (distof x))
    		    )
    	     )
    	 )
    	'("1D9"	   "1d9"    "2D8"    "2D9"    "2d8"    "2d9"	"3D8"	 "3D9"	  "3d8"	   "3d9"    "4D8"    "4D9"
    	  "4d8"	   "4d9"    "5D8"    "5D9"    "5d8"    "5d9"	"6D8"	 "6D9"	  "6d8"	   "6d9"    "7D8"    "7D9"
    	  "7d8"	   "7d9"    "8D8"    "8D9"    "8d8"    "8d9"	"9D8"	 "9D9"	  "9d8"	   "9d9"
    	 )
    )
    ->>
    (atof "1D9") = 1.0e+009
    	(distof "1D9") = nil
    (atof "1d9") = 1.0e+009
    	(distof "1d9") = nil
    (atof "2D8") = 2.0e+008
    	(distof "2D8") = nil
    (atof "2D9") = 2.0e+009
    	(distof "2D9") = nil
    (atof "2d8") = 2.0e+008
    	(distof "2d8") = nil
    (atof "2d9") = 2.0e+009
    	(distof "2d9") = nil
    (atof "3D8") = 3.0e+008
    	(distof "3D8") = nil
    (atof "3D9") = 3.0e+009
    	(distof "3D9") = nil
    (atof "3d8") = 3.0e+008
    	(distof "3d8") = nil
    (atof "3d9") = 3.0e+009
    	(distof "3d9") = nil
    (atof "4D8") = 4.0e+008
    	(distof "4D8") = nil
    (atof "4D9") = 4.0e+009
    	(distof "4D9") = nil
    (atof "4d8") = 4.0e+008
    	(distof "4d8") = nil
    (atof "4d9") = 4.0e+009
    	(distof "4d9") = nil
    (atof "5D8") = 5.0e+008
    	(distof "5D8") = nil
    (atof "5D9") = 5.0e+009
    	(distof "5D9") = nil
    (atof "5d8") = 5.0e+008
    	(distof "5d8") = nil
    (atof "5d9") = 5.0e+009
    	(distof "5d9") = nil
    (atof "6D8") = 6.0e+008
    	(distof "6D8") = nil
    (atof "6D9") = 6.0e+009
    	(distof "6D9") = nil
    (atof "6d8") = 6.0e+008
    	(distof "6d8") = nil
    (atof "6d9") = 6.0e+009
    	(distof "6d9") = nil
    (atof "7D8") = 7.0e+008
    	(distof "7D8") = nil
    (atof "7D9") = 7.0e+009
    	(distof "7D9") = nil
    (atof "7d8") = 7.0e+008
    	(distof "7d8") = nil
    (atof "7d9") = 7.0e+009
    	(distof "7d9") = nil
    (atof "8D8") = 8.0e+008
    	(distof "8D8") = nil
    (atof "8D9") = 8.0e+009
    	(distof "8D9") = nil
    (atof "8d8") = 8.0e+008
    	(distof "8d8") = nil
    (atof "8d9") = 8.0e+009
    	(distof "8d9") = nil
    (atof "9D8") = 9.0e+008
    	(distof "9D8") = nil
    (atof "9D9") = 9.0e+009
    	(distof "9D9") = nil
    (atof "9d8") = 9.0e+008
    	(distof "9d8") = nil
    (atof "9d9") = 9.0e+009
    	(distof "9d9") = nil

     

    • Like 1

  9. Vào lúc 2/12/2020 tại 21:54, Doan Van Ha đã nói:

    Đào lên thư giản nhức đầu cho vui.

    Không dùng ký tự "E" và "e", hãy tìm 1 chuỗi có 3 ký tự "ABC" mà giá trị khi hàm atof trả về lớn hơn 123456789.

    (> (atof "ABC") 123456789) >> T

    ("1D9" "1d9" "2D8" "2D9" "2d8" "2d9" "3D8" "3D9" "3d8" "3d9" "4D8" "4D9" "4d8" "4d9" "5D8" "5D9" "5d8" "5d9" "6D8" "6D9" "6d8" "6d9" "7D8" "7D9" "7d8" "7d9" "8D8" "8D9" "8d8" "8d9" "9D8" "9D9" "9d8" "9d9")

    • Like 1
×