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

nhoclangbat

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

    1.306
  • Đã tham gia

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

  • Ngày trúng

    35

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


  1. - mấy anh ơi trợ giúp nhoc bài toán này với ^^, nhoc đang tính nâng cấp cái lsp nhoc lên mà chưa nghĩ ra giải thuật ngắn gọn ^^, nó có nhiều trường hợp lắc léo, nhoc test chắc hơn chục trường hợp , gặp cái nào nhoc thêm đk cái đó riết cái lsp dài lê thê mà vẫn chưa thỏa đc.

    -  nhoc có 1 danh sách các khoảng cách mắt lưới như sau 10-25-50-100-200-250-500, hàm làm tròn của nhoc có 1 tham số tương đương với khoảng cách mắt lưới.

    - sơ khai lsp dựa vào kich thước khung, rùi nhoc đặt đk từ lớn đến nhỏ khoảng cách lưới, thằng nào thỏa trước sẽ làm thằng đó, nhưng cái dở ở đây, với khung to, mắt lưới tạo ra quá dày nhìn bị rối.

    - nhoc dựa vào biến tỉ lệ để quyết định hệ số làm tròn là bao nhiêu, tuy nhiên với tỉ lệ nhỏ, mà khung quá to khoảng cách mắt lưới nhỏ, nhìn dày quá ^^

    - ý định của nhoc là ko cần dựa vào tỉ lệ nhập nữa mà dựa vào kích thước khung để quyết định khoảng cách mắt lưới, tỉ lệ chỉ quyết định chiều cao tẽt và kick thước mắt lưới

    - VD: tỉ lệ 500, mà khung tới 700 chẳng hạn, nhoc muốn nó duyệt từ từ lấy 700 chia cho từng đơn vị mắt lưới ở trên từ lớn đến nhỏ, để ra số lần lặp, tối thiểu phải có 2 mắt trục x và 2 mắt trục y, lớn nhất chỉ 3 mắt, còn ra ngoài 2 đk đó thì nó duyệt thằng khác,chừng nào thỏa thì sẽ trả về đơn vị mắt lưới cần tạo và hệ số làm tròn tương ứng, như Vd nhoc ở đây thì 700/200 là đẹp ^^ số làn lặp sẽ là 3.

    ;hàm tao textstyle
    (defun emk_style (MyStyle MyFont)
    (entmake (list    (cons 0 "STYLE")    
    (cons 100 "AcDbSymbolTableRecord")    
    (cons 100 "AcDbTextStyleTableRecord")    
    (cons 2 MyStyle)    (cons 3  MyFont)    
    (cons 70 0))))
    ;;;;
    (defun MakeLine (PT1 PT2 Layer Linetype LTScale xdata)
    	(entmakex (list '(0 . "LINE")
    	(cons 8 (if Layer Layer (getvar "Clayer")))
    	(cons 6 (if Linetype Linetype "bylayer"))
    	(cons 48 (if LTScale LTScale 1))
    	(cons 10 PT1)	(cons 11 PT2)
    	(cons -3 (if xdata (list xdata) nil))))) 
    ;;;;;;--------------------------------------------------------------------------------------------
    ;================================================================================================
    (defun dtr (a)
    (* (/ a 180.0) pi)
    )
    (prompt "LISP TAO LUOI TOA DO BAN DO VI TRI, LENH : KKL")
    ;;;
    (defun c:kkl (/ donvi nx ny pt1 pt2 kcx kcy goc1 goc2 x1 x y  heso old ptext1 ptext2 ptext3 ptext4 str str2 goc3 htext num lstp obj ss ss1 ten pt3 pt4 tronx trony kk)
    (vl-load-com)
    (setq old (getvar "osmode"))
    (if (null (tblsearch "STYLE" "vusaln"))
        (emk_style "vusaln" "Vaptimn.TTF"))
    (if (null (tblsearch "LAYER" "A1-luoik"))
        (_layer2 "A1-luoik" 7))
      (setq tyleVT (getvalue tyleVT 1000.0 "Nhap ty le ban do VT: "))
      (princ "\n")
      (setq heso (/ 1000 tyleVT))
      (setq htext (/ 2.0 heso))
      (setq kk (/ tyleVT 20))
    (prompt "Chon Khung chay luoi, luu y khung chon phai la polyline:")
    ;==================================================================
    (while (/= (setq ss (ssget "+.:E:S" '((0 . "LWPOLYLINE")))) nil)
    ;===================================*******************++++++++++++++++++++********************===================================  
    (progn
    (setvar "osmode" 0)
    ;======================================================================
    (setq obj (vlax-ename->vla-object (ssname ss 0)))
    (setq lstp (vla-getBoundingBox obj 'minp 'maxp))
    (setq pt1 (vlax-safearray->list minp))
    (setq pt2 (vlax-safearray->list maxp))
    (setq pt3 (inters pt1 (polar pt1 (/ pi 2) 90000) pt2 (polar pt2 pi 90000) nil))
    (setq pt4 (inters pt1 (polar pt1 0 90000) pt2 (polar pt2 (dtr 270) 90000) nil))
    ;=======================================================================
    (setq kcx (- (car pt2) (car pt1)) kcy (- (cadr pt2) (cadr pt1)))
    ;===============================================================================================
    (cond        ((and (= tyleVT 500.0) (> kcx 150) (>= (/ kcy 50) 1.8))
    			 (setq donvi 50) (setq kk 50))
    			 ((and (= tyleVT 4000.0) (> kcx 1270) (>= (/ kcy 400) 1.8))
    			 (setq donvi 400) (setq kk 400))
    			 ((and (= tyleVT 5000.0) (> kcx 1590) (>= (/ kcy 500) 1.8))
    			 (setq donvi 500) (setq kk 500))
                 ((and (>= (/ kcx 250) 1.8) (>= (/ kcy 250) 1.8) (> kcx 650))
                 (setq donvi 250))
                 ((and (>= (/ kcx 200) 2) (>= (/ kcy 200) 1.8) (> kcx 410))
                 (setq donvi 200))
                ((and (>= (/ kcx 100) 1.8) (>= (/ kcy 100) 1.8) (> kcx 250))
                 (setq donvi 100))
    		    ((and (>= (/ kcx 50) 1.8) (>= (/ kcy 50) 1.8) (> kcx 125))
                 (setq donvi 50))
                ((and (>= (/ kcx 25) 1.8) (>= (/ kcy 25) 1.8) (> kcx 62.5))
                 (setq donvi 25))
    			 ((and (>= (/ kcx 10) 1.8) (>= (/ kcy 10) 1.8) (> kcx 25.5))
                 (setq donvi 10))
                )
    (if donvi
         (progn
        (cond
            ((> donvi 250) (setq tronx (lamtron (fix (+ (car pt1) 100)) kk)) (setq trony (lamtron (fix (+ (cadr pt1) 100)) kk)))
    	    ((> donvi 10) (setq tronx (lamtron (fix (+ (car pt1) 10)) kk)) (setq trony (lamtron (fix (+ (cadr pt1) 10)) kk)))
    	    ((<= donvi 10) (setq tronx (lamtron (fix (car pt1)) kk)) (setq trony (lamtron (fix (cadr pt1)) kk)))
        )	   
    ;==============================================================================================
    (cond  
            ((> (- (+ tronx (* donvi (- (fix (/ kcx donvi)) 1))) (car pt1)) kcx) (setq nx (- (fix (/ kcx donvi)) 1)))
    		((and (< (- (+ tronx (* donvi (- (fix (/ kcx donvi)) 1))) (car pt1)) kcx) (> (- (- (car pt4) (/ 10 heso)) (+ tronx (* donvi (- (fix (/ kcx donvi)) 1)))) donvi)) (setq nx (1+ (fix (/ kcx donvi)))))
    		((< (- (+ tronx (* donvi (- (fix (/ kcx donvi)) 1))) (car pt1)) kcx) (setq nx (fix (/ kcx donvi))))
    )
    (cond  
             ((> (- (+ trony (* donvi (- (fix (/ kcy donvi)) 1))) (cadr pt1)) kcy) (setq ny (- (fix (/ kcy donvi)) 1)))
    		 ((and (< (- (+ trony (* donvi (- (fix (/ kcy donvi)) 1))) (cadr pt1)) kcy) (> (- (- (cadr pt3) (/ 5 heso)) (+ trony (* donvi (- (fix (/ kcy donvi)) 1)))) donvi)) (setq ny (1+ (fix (/ kcy donvi)))))
    		 ((< (- (+ trony (* donvi (- (fix (/ kcy donvi)) 1))) (cadr pt1)) kcy) (setq ny (fix (/ kcy donvi))))
    )
    ;==============================================================================================
     (setq goc2 (list tronx (cadr pt1) 0.0))
    (setq goc3 (list (car pt1) trony 0.0))
    ;===============================================================
    (repeat nx
    
    (makeline goc2 (polar goc2 (/ pi 2) (/ 8.0 heso)) "A1-luoik" nil nil nil)
    ;=======================================================================
    (setq ptext1 (polar goc2 (dtr 23) (/ 3.5 heso)))
    (setq ptext2 (polar goc2 (dtr 158) (/ 3.5 heso)))
    (setq num (fix (car goc2)))
    (setq str (them0 (itoa (rem num 1000))))
    (setq str2 (itoa (/ num 1000)))
    (mktext ptext1 htext str "M" "A1-luoik" "vusaln" nil)
    (mktext ptext2 htext str2 "M" "A1-luoik" "vusaln" nil)
    ;=======================================================================
    (setq goc2 (mapcar '+ goc2 (list donvi 0.0 0.0)))
    ) ;end repeat nx
    ;============================================================
    (repeat ny
    (makeline goc3 (polar goc3 0 (/ 8.0 heso)) "A1-luoik" nil nil nil)
    ;=====================================================================
    (setq ptext3 (polar goc3 (dtr 23) (/ 4.0 heso)))
    (setq ptext4 (polar goc3 (dtr 338) (/ 4.0 heso)))
    (setq num (fix (cadr goc3)))
    (setq str (them0 (itoa (rem num 1000))))
    (setq str2 (itoa (/ num 1000)))
    (mktext ptext3 htext str2 "M" "A1-luoik" "vusaln" nil)
    (mktext ptext4 htext str "M" "A1-luoik" "vusaln" nil)
    ;============================================================= 
    (setq goc3 (mapcar '+ goc3 (list 0.0 donvi 0.0)))
    ); end repeat ny
    ;============================================================
    (setq goc1 (list tronx trony 0.0))
    ;============================================================================================ 
     (setq x (car goc1))
      (repeat nx
        (setq y (cadr goc1))
        (repeat ny
          
    	  (vediem x y (/ 2.5 heso))
          (setq y (+ y donvi))
        )
    ;===============================================================================================
        (setq x (+ x donvi))
      )
     ;==============================================================================================
     ) ;end progn donvi
       (alert "Ban chon Khung KiBo qua\nChon Khung Lai Hen!!!^^") ; end nho hon 25
    ) ; end if don vi
    ;==============================================================================
    ) ; end progn while
    
    ) ; end while
    (prompt "Ban co mun xoa luoi vua tao, co thi quet chon enter, khong thi enter bo qua")
    (setq ss1 (ssget '((0 . "LINE,TEXT") (8 . "A1-luoik"))))
    (if ss1
     (progn
       (repeat (sslength ss1)
    	 (setq ten (ssname ss1 0))
    	 (entdel ten)
    	 (ssdel ten ss1)
    	 )
      )
     )
    (setvar "osmode" old)
    (princ)
    )
    ;============================================================================================
    (defun c:kxoa()
    (prompt "Chon luoi vua tao mun xoa")
    (ssget '((0 . "LINE,TEXT") (8 . "A1-luoik")))
    (vl-cmdf ".erase" "P" "")
    (princ)
    )
    ;==============================================================================================
    ;;;;;;;;;;;;;;;;;;;
    (defun lamtron (n k / sodu)
      (setq sodu (rem n k))
      (if (/= sodu 0)
        (setq n (+ (- n sodu) k))
      )
      n
    )
    ;=================================
    (defun vediem (xx yy r / left right top bot)
      (setq top (+ yy r))
      (setq bot (- yy r))
      (setq right (+ xx r))
      (setq left (- xx r))
      (makeline (list left yy) (list right yy) "A1-luoik" nil nil nil)
      (makeline (list xx top) (list xx bot) "A1-luoik" nil nil nil)
    )
    ;============================
    ;=================================================================================
    (defun _layer2 ( name colour )
        (if (null (tblsearch "LAYER" name))
            (entmake
                (list
                   '(0 . "LAYER")
                   '(100 . "AcDbSymbolTableRecord")
                   '(100 . "AcDbLayerTableRecord")
                   '(70 . 0)
                    (cons 2 name)
                    (cons 62 colour)
                )
            )
        )
    )
    ;=====================================================================================
    ; ham luu gia tri
    (defun getvalue ( a giatri dongnhac / astr) 
    (or a (setq a giatri))
    (cond
    	((= (type a) 'INT) (setq a (cond ((getint (strcat "\n" dongnhac "(" (itoa a) ") :")))(a))))
    	((= (type a) 'REAL) (setq a (cond ((getreal (strcat "\n" dongnhac "(" (rtos a 2 0) ") :")))(a))))
    	((= (type a) 'STR) (setq a (cond ((= "" (setq astr (getstring T (strcat "\n" dongnhac " (" a "): ")))) a) (astr))))
    ))
    ;;;;
    ;ham tao text 2
    (defun mktext (point height string justify layer textstyle mau / lst)
    (setq lst (list '(0 . "TEXT")
                                  (cons 10 point)
    							  (cons 40 height)
    							  (cons 1 string)
    							  (cons 8 layer)
    							  (cons 7 (if textstyle textstyle (getvar "textstyle")))
    							  (cons 62 (if mau mau 256))
    							  
    			)
    			justify (strcase justify))
    		(cond   ((= justify "L") (setq Lst (append Lst (list (cons 72 0) (cons 11 point)))))
    		        ((= justify "C") (setq Lst (append Lst (list (cons 72 1) (cons 11 point)))))
    				((= justify "R") (setq Lst (append Lst (list (cons 72 2) (cons 11 point)))))
    				((= justify "M") (setq Lst (append Lst (list (cons 72 4) (cons 11 point)))))
    				)
    	(entmakex Lst)
      );end mktext
    ;--------------------------------------
    (defun them0(chuoi)
      (setq len (strlen chuoi))
      (if (= len 1)
        (strcat "00" chuoi)
        (if (= len 2)
          (strcat "0" chuoi)
          chuoi
        )  
      )
     )
    

    - Mong đc các anh giúp đở ^^

    - P/s: nhoc ko giỏi trình bày có gì các anh bỏ quá cho ^^


  2. - ^^ câu 2 ipos  ko cần ràng buộc điều kiện chặt chẽ như vậy hơi thừa VInh ơi ^^, nghĩ xem 1 trong 2 thằng, cần thằng nào là đủ

    - câu 4: có 1 chỗ chưa đc chắc chắn, có khi ta mún phân biệt rõ giữa số nguyên và số thực, 1 số bài toán cần đầu vào là số nguyên thì sao Vinh nhỉ, vì thế ko nên gộp 2 thằng int real chung với nhau sẽ ko ổn ^^, dist thì nhoc ko có ý kiến vì nó còn tham số pt= điểm pick, nếu bỏ qua tham số pt của dist thì có thể gộp chung real với dist, bài trước nhoc nói dài dòng chắc làm Vinh choáng, ý nhoc là khi Vinh nắm đc khái quát, Vinh còn phải nằm đc các tham số của từng thằng get hiểu đc bản chất của nó trả về gì, để khi đưa vào hàm chung ta tìm cách xử lý đc các tính huống xảy ra với mỗi hàm, vì mỗi hàm có tính chất khác nhau ^^, như hàm tổng quát sư huynh Hiệp viết tham số có đưa trực tiếp tên hàm vào nên việc xử lý tình huống chắc dễ hơn ^^( nói đại vì chưa test thử), còn của nhoc trong tham số ko cần tên hàm vì nhoc dựa vào dạng dữ liệu mặc định nó là dạng gì để xác định hàm cần gọi, với nhoc thì chỉ cần 3 hàm đó, vì thấy nó hay dùng, độ phức tạp tương đối it, còn các thằng get khác tùy cơ ứng biến hihi ^^

    - câu 5 chờ anh Ket chó ý kiến, Vinh rãnh nên nghiên cứu cách làm tổng quát hơn với số lượng lớn set biến phụ hơi bị phê, còn phải khử biến nữa ^^, nhoc thì ngán nhất là thằng lambda với mapcar, nếu Vinh đã nắm chắc đc 2 thằng đó, thì việc viết để xử lý tổng quát ít dùng biến phụ ok rùi có thể tham khảo của sư huynh Hiep ^^, vì Hiep cũng dùng mapcar + lambda, nhoc thì viết hàm con defun do còn hơi ngại 2 hàm đó :P  

    • Vote tăng 1

  3. - câu 4 nhoc nói theo cách hiểu nhoc có thể sai ^^, Vinh tham khảo

    -  người dùng nhập vào thường có nhửng hàm nào, getint getreal, getstring, getdist, getangle,getorient, getcorner, getwordk, v....v

    - Mong mún của ta là viết 1 hàm con tổng quát cho các hàm trên, nếu Vinh có dạo vòng vòng lớp Vinh sẽ thấy các anh bàn luận về vấn đề này.

    - anh Ket có gợi ý cho Vinh lsp bạn Hiep viết ở 1 topic khác có sử dụng hàm này, có thể lsp này còn phức tạp với Vinh nên Vinh ngại chưa dịch đc nó ^^, nhoc lôi nó ra cho Vinh thấy rõ

     

    (defun NGT(a mac_dinh ham str_nhac / modul)
    ;;Nhan gia tri
    (or a (setq a mac_dinh))
    (setq a (cond
    	((= "" (setq modul (ham (strcat "\n" str_nhac " <" (vl-princ-to-string a) ">: ")))) a)
    	(modul)
    	(a)
    	)
    	) 

     

    - đây là hàm con theo y/c bài 4 do bạn Hiệp viết, nhoc se phân tích khái quát cho Vinh hen

    + dòng 1 có lẽ Vinh hiểu NGT chỉ là tên hàm thui mún đặt sao cũng đc miễn mình biết công dụng nó làm gì

    + các tham số mà hàm cần 

         + a : đại diện tên biến mún đặt, vd như biến bán kính của vinh là gt thì khi gọi hàm NGT a <=> gt, làm từng bước gọi hàm ví dụ hen (NGT gt

         + mac_dinh: đây là giá trị mặc định mà ta mún gán cho biến gt là gì, mac_dinh <=> 10, (NGT gt 10

         + ham: đây là tên hàm nhập liệu của lsp mún sử dụng, 1 trong các hàm nhoc liệt kê trên kia, như ở đây bán kinh cho đường tròn có thể dùng getdist,real hay int cũng đc, như VInh làm thì ham <=> getdist, (NGT gt 10 getdist

         +str_nhac: ở đây như dòng nhắc vậy đó, srt_nhac <=> "moi ban nhap ban kinh", (NGT gt 10 getdist "moi ban nhap ban kinh") => xong phần gọi hàm ^^

    - cách xài :

    (defun NGT(a mac_dinh ham str_nhac / modul)
    ;;Nhan gia tri
    (or a (setq a mac_dinh))
    (setq a (cond
    	((= "" (setq modul (ham (strcat "\n" str_nhac " <" (vl-princ-to-string a) ">: ")))) a)
    	(modul)
    	(a)
    	)
    	)
    (defun c:tron(/ pt)
    (setq gt (NGT gt 10 getdist "ban nhap ban kinh"))
    (setq pt (getpoint "\ntam:"))
    (command ".circle" pt gt)
    )
    

    - phần lõi nhoc nghĩ  Vinh dịch đc để hiểu mà hen, nhoc giải thik 2 chỗ mà trong hàm Vinh chưa pit, và ít ai để ý nếu lập trình chưa vững

    1 - (vl-princ-to-string a),các hàm bắt đầu = vl mình chưa học tới , Hiep thì có thâm niên ở đây lâu nên học trước đc, màu đỏ là nguyên tên hàm, a ở đây chính là tên biến, hàm này có chức năng chuyển mọi dạng dữ liêu về kiểu chuỗi, số nguyên, số thực, giá trị góc bằng, danh sách,....Tại sao để khi chạy đến dòng nhập liệu ta biết nếu ko nhập gì giá trị mặc định nó là bao nhiêu như lệnh vẽ circle trong cad, vinh để ý sẽ thấy VD: ban nhap ban kinh (10):...., nếu ko nhập gì thì nó sẽ lấy là 10

    2- tại sao có cặp dấu "", vì nếu gặp trường hợp dùng hàm getstring, ko nhập gì enter nó vẫn xem là có nhập vì chuỗi có thể rỗng

    Hiep say: ^^

    Ô la la !  :D  :D  :D

    Là do Getstring trả về chuổi rỗng khi enter

    - còn lại Vinh cứ từ từ ngâm cứu hen, còn 1 cái nhoc quên đó là thằng modul, đó là biến trung gian cục bộ trong hàm con nó sẽ tự khử, còn vì sao có nó, trong bài trước nhoc có giải thích sơ về việc tạo hàm con rồi hen.

    - anh Doan Van Ha có nói:

     

    Viết 1 hàm con nhập liệu để dùng cho mọi dạng Getxxx là 1 tham vọng khá lớn, bởi các hàm này có cách nhập khác nhau.Chúng còn có thể chứa thêm 1 tham số nữa ngoài các tham số mà bạn đã đưa vào. Ví dụ:

    - Với Getstring: còn có tham số CR, mang giá trị T hoặc nil.

    - Với các hàm Getdist, Getangle, Getorient, Getpoint, Getcorner: còn có tham số Pt.

    p/S: viết lisp cũng tùy từng quan điểm. Với cá nhân thì tôi không chuộng kiểu này lắm.

    - Tóm lại từ các ý trên Vinh có thể mông má lại theo quan điểm cũng như cách hiểu của mình

    - như nhoc lợi thế đi sau ^^, tự rút ra cho mình cách viết riêng ^^ đông tây y kết hợp, phục vụ cho mục đích của mình mà mình có khả năng kiểm soát đc, nhoc viết như vậy

    ; ham luu gia tri
    (defun getvalue ( a giatri dongnhac / astr) 
    (or a (setq a giatri))
    (cond
    	((= (type a) 'INT) (setq a (cond ((getint (strcat "\n" dongnhac "(" (itoa a) ") :")))(a))))
    	((= (type a) 'REAL) (setq a (cond ((getreal (strcat "\n" dongnhac "(" (rtos a 2 2) ") :")))(a))))
    	((= (type a) 'STR) (setq a (cond ((= "" (setq astr (getstring T (strcat "\n" dongnhac " (" a "): ")))) a) (astr))))
    ))
    ;;;;
    

    - vì sao nhoc viết tổng quát mà chỉ cho 3 thằng đó thì Vinh xem anh Ha nói ^^

    - như nhoc viết thì lệnh vẽ đường trònh ví dụ trên sẽ là như vầy

    (defun c:tron(/ pt)
    (setq gt (getvalue gt 10.0 "ban nhap ban kinh"))
    (setq pt (getpoint "\ntam:"))
    )
    ; ham luu gia tri
    (defun getvalue ( a giatri dongnhac / astr) 
    (or a (setq a giatri))
    (cond
    	((= (type a) 'INT) (setq a (cond ((getint (strcat "\n" dongnhac "(" (itoa a) ") :")))(a))))
    	((= (type a) 'REAL) (setq a (cond ((getreal (strcat "\n" dongnhac "(" (rtos a 2 0) ") :")))(a))))
    	((= (type a) 'STR) (setq a (cond ((= "" (setq astr (getstring T (strcat "\n" dongnhac " (" a "): ")))) a) (astr))))
    ))
    ;;;;
    

    - anh Ket cũng có nói thằng họ getxxx, có thể tóm đc thằng nào hay đó, của Hiep viết thì tổng quát hơn cho các thằng getxxx lun, nhoc cũng chưa thử sử dụng hàm của Hiep với trường hợp là getpoint hay getangle thì thế nào vì ngại ^^, nếu Vinh có thử thì cho nhoc pit k/q với hen ^^

    • Vote tăng 1

  4. - công nhận Vinh có khả năng giải thuật độc đáo, câu 5 làm quá độc ^^, nhoc còn ko nghĩ ra cách này, lúc đầu nhìn nhóc mém loạn (subst (subst (subst) kaka, ví dụ nhỏ như Vinh thì bài toán ok,  nếu số lượng tên mặt hàng lên đền chục ( A B C D E F G H J K L M N O P Q R) chắc Vinh sét phụ biến mệt nghĩ  :P

    - câu ipos nhoc cũng dở nhìn cái if quên nhìn dòng defun của Vinh ^^, Vinh nên xem lại xíu, (and (> 0 -1) (<= 0 (length lst)) = > True => (- 0 1)= -1

    - câu 6 đẹp rùi ^^


  5. - hi xử đc cái khung nhưng mất cái while rùi ^^, ai gợi ý hộ nhoc viết sao để chọn đc nhiều khung 1 lúc với, nhoc viết cũng gần ra, nhưng nếu chuột phải thoát thì báo lỗi ^^

    ;hàm tao textstyle
    (defun emk_style (MyStyle MyFont)
    (entmake (list    (cons 0 "STYLE")    
    (cons 100 "AcDbSymbolTableRecord")    
    (cons 100 "AcDbTextStyleTableRecord")    
    (cons 2 MyStyle)    (cons 3  MyFont)    
    (cons 70 0))))
    ;;;;
    (defun MakeLine (PT1 PT2 Layer Linetype LTScale xdata)
    	(entmakex (list '(0 . "LINE")
    	(cons 8 (if Layer Layer (getvar "Clayer")))
    	(cons 6 (if Linetype Linetype "bylayer"))
    	(cons 48 (if LTScale LTScale 1))
    	(cons 10 PT1)	(cons 11 PT2)
    	(cons -3 (if xdata (list xdata) nil))))) 
    ;;;;;;--------------------------------------------------------------------------------------------
    ;================================================================================================
    (defun dtr (a)
    (* (/ a 180.0) pi)
    )
    (prompt "LISP TAO LUOI TOA DO BAN DO VI TRI, LENH : KKL")
    ;;;
    (defun c:kkl (/ donvi nx ny pt1 pt2 kcx kcy goc1 goc2 x1 x y  heso old ptext1 ptext2 ptext3 ptext4 str str2 goc3 htext num)
    (vl-load-com)
    (setq old (getvar "osmode"))
    (if (null (tblsearch "STYLE" "vusaln"))
        (emk_style "vusaln" "Vaptimn.TTF"))
    (if (null (tblsearch "LAYER" "A1-luoik"))
        (_layer2 "A1-luoik" 7))
      (setq tyleVT (getvalue tyleVT 1000.0 "Nhap ty le ban do VT: "))
      (princ "\n")
      (setq heso (/ 1000 tyleVT))
      (setq htext (/ 2.0 heso))
    (prompt "Chon Khung chay luoi, luu y khung chon phai la polyline:")
    (while (/= (vla-getBoundingBox (vlax-ename->vla-object (ssname (ssget "+.:E:S" '((0 . "LWPOLYLINE"))) 0)) 'minp 'maxp))
    ;===================================*******************++++++++++++++++++++********************===================================  
    (progn
    (setvar "osmode" 0)
    ;======================================================================
    (setq pt1 (vlax-safearray->list minp))
              (setq pt2 (vlax-safearray->list maxp))
    ;=======================================================================
    (setq kcx (- (car pt2) (car pt1)) kcy (- (cadr pt2) (cadr pt1)))
    ;===============================================================================================
    (cond
                ((and (>= (/ kcx 100) 2) (>= (/ kcy 100) 2))
                 (setq donvi 100))
                ((and (>= (/ kcx 50) 2) (>= (/ kcy 50) 2))
                 (setq donvi 50))
                ((and (>= (/ kcx 25) 2) (>= (/ kcy 25) 2))
                 (setq donvi 25))
                )
    (if donvi
         (progn
             (setq nx (fix (/ kcx donvi)) ny (fix (/ kcy donvi)))
     ;==============================================================================================
     (setq goc2 (list (lamtron (fix (+ (car pt1) 10))) (cadr pt1) 0.0))
    (setq goc3 (list (car pt1) (lamtron (fix (+ (cadr pt1) 10))) 0.0))
    ;===============================================================
    (repeat nx
    
    (makeline goc2 (polar goc2 (/ pi 2) (/ 8.0 heso)) "A1-luoik" nil nil nil)
    ;=======================================================================
    (setq ptext1 (polar goc2 (dtr 23) (/ 3.5 heso)))
    (setq ptext2 (polar goc2 (dtr 158) (/ 3.5 heso)))
    (setq num (fix (car goc2)))
    (setq str (them0 (itoa (rem num 1000))))
    (setq str2 (itoa (/ num 1000)))
    (mktext ptext1 htext str "M" "A1-luoik" "vusaln" nil)
    (mktext ptext2 htext str2 "M" "A1-luoik" "vusaln" nil)
    ;=======================================================================
    (setq goc2 (mapcar '+ goc2 (list donvi 0.0 0.0)))
    ) ;end repeat nx
    ;============================================================
    (repeat ny
    (makeline goc3 (polar goc3 0 (/ 8.0 heso)) "A1-luoik" nil nil nil)
    ;=====================================================================
    (setq ptext3 (polar goc3 (dtr 23) (/ 4.0 heso)))
    (setq ptext4 (polar goc3 (dtr 338) (/ 4.0 heso)))
    (setq num (fix (cadr goc3)))
    (setq str (them0 (itoa (rem num 1000))))
    (setq str2 (itoa (/ num 1000)))
    (mktext ptext3 htext str2 "M" "A1-luoik" "vusaln" nil)
    (mktext ptext4 htext str "M" "A1-luoik" "vusaln" nil)
    ;============================================================= 
    (setq goc3 (mapcar '+ goc3 (list 0.0 donvi 0.0)))
    ); end repeat ny
    ;============================================================
    (setq goc1 (list (lamtron (fix (+ (car pt1) 10))) (lamtron (fix (+ (cadr pt1) 10))) 0.0))
    ;============================================================================================ 
     (setq x (car goc1))
      (repeat nx
        (setq y (cadr goc1))
        (repeat ny
          
    	  (vediem x y (/ 2.5 heso))
          (setq y (+ y donvi))
        )
    ;===============================================================================================
        (setq x (+ x donvi))
      )
     ;==============================================================================================
     ) ;end progn donvi
       (alert "Ban chon Khung KiBo qua\nVe Khung Lai Hen!!!^^") ; end nho hon 25
    ) ; end if don vi
    ;==============================================================================
    ) ; end progn while
    ) ; end while
    (setvar "osmode" old)
    (princ)
    )
    ;==============================================================================================
    ;;;;;;;;;;;;;;;;;;;
    (defun lamtron (n / sodu)
      (setq sodu (rem n 100))
      (if (/= sodu 0)
        (setq n (+ (- n sodu) 100))
      )
      n
    )
    ;=================================
    (defun vediem (xx yy r / left right top bot)
      (setq top (+ yy r))
      (setq bot (- yy r))
      (setq right (+ xx r))
      (setq left (- xx r))
      (makeline (list left yy) (list right yy) "A1-luoik" nil nil nil)
      (makeline (list xx top) (list xx bot) "A1-luoik" nil nil nil)
    )
    ;============================
    ;=================================================================================
    (defun _layer2 ( name colour )
        (if (null (tblsearch "LAYER" name))
            (entmake
                (list
                   '(0 . "LAYER")
                   '(100 . "AcDbSymbolTableRecord")
                   '(100 . "AcDbLayerTableRecord")
                   '(70 . 0)
                    (cons 2 name)
                    (cons 62 colour)
                )
            )
        )
    )
    ;=====================================================================================
    ; ham luu gia tri
    (defun getvalue ( a giatri dongnhac / astr) 
    (or a (setq a giatri))
    (cond
    	((= (type a) 'INT) (setq a (cond ((getint (strcat "\n" dongnhac "(" (itoa a) ") :")))(a))))
    	((= (type a) 'REAL) (setq a (cond ((getreal (strcat "\n" dongnhac "(" (rtos a 2 0) ") :")))(a))))
    	((= (type a) 'STR) (setq a (cond ((= "" (setq astr (getstring T (strcat "\n" dongnhac " (" a "): ")))) a) (astr))))
    ))
    ;;;;
    ;ham tao text 2
    (defun mktext (point height string justify layer textstyle mau / lst)
    (setq lst (list '(0 . "TEXT")
                                  (cons 10 point)
    							  (cons 40 height)
    							  (cons 1 string)
    							  (cons 8 layer)
    							  (cons 7 (if textstyle textstyle (getvar "textstyle")))
    							  (cons 62 (if mau mau 256))
    							  
    			)
    			justify (strcase justify))
    		(cond   ((= justify "L") (setq Lst (append Lst (list (cons 72 0) (cons 11 point)))))
    		        ((= justify "C") (setq Lst (append Lst (list (cons 72 1) (cons 11 point)))))
    				((= justify "R") (setq Lst (append Lst (list (cons 72 2) (cons 11 point)))))
    				((= justify "M") (setq Lst (append Lst (list (cons 72 4) (cons 11 point)))))
    				)
    	(entmakex Lst)
      );end mktext
    ;--------------------------------------
    (defun them0(chuoi)
      (setq len (strlen chuoi))
      (if (= len 1)
        (strcat "00" chuoi)
        (if (= len 2)
          (strcat "0" chuoi)
          chuoi
        )  
      )
     )
    ;error: bad argument type: lselsetp nil
    

  6. - thanks anh Gia_bach, nhoc vẫn chưa biết sort thằng Y cách nào, dùng hàm vl thì nhoc chưa pit, đi vòng vòng 4rum thấy thằng nào dê hiểu nhoc mót thằng đó chứ chưa học về nó nhiều, tọa độ nhoc mún lấy là góc dưới trái, với góc trên phải, nếu sort theo Y, thì có 2 điểm trên trái với trên phải Y= nhau khác X, nhoc sợ nó sếp thằng Y trên trái trước thì khổ ^^, cái tổng quát nhoc mún là dù người vẽ cái khung bắt đầu từ đâu thì cũng xác định đc thứ tự 2 điểm nhoc cần lấy mặc dù vòng vòng thì cũng chỉ có 4 điểm ^^, ý của nhoc nếu sắp sếp đc ok theo ý đồ, nhoc dùng nth để lấy 2 thằng trong đó ra tính ^^

    - mấy anh rãnh xem qua lsp giúp nhoc với, nhờ anh ndtnv nhoc tóm nó gọn hơn ko dài lưa thưa nữa ^^

    ;hàm tao textstyle
    (defun emk_style (MyStyle MyFont)
    (entmake (list    (cons 0 "STYLE")    
    (cons 100 "AcDbSymbolTableRecord")    
    (cons 100 "AcDbTextStyleTableRecord")    
    (cons 2 MyStyle)    (cons 3  MyFont)    
    (cons 70 0))))
    ;;;;
    (defun MakeLine (PT1 PT2 Layer Linetype LTScale xdata)
    	(entmakex (list '(0 . "LINE")
    	(cons 8 (if Layer Layer (getvar "Clayer")))
    	(cons 6 (if Linetype Linetype "bylayer"))
    	(cons 48 (if LTScale LTScale 1))
    	(cons 10 PT1)	(cons 11 PT2)
    	(cons -3 (if xdata (list xdata) nil))))) 
    ;;;;;;--------------------------------------------------------------------------------------------
    ;================================================================================================
    (defun dtr (a)
    (* (/ a 180.0) pi)
    )
    (prompt "LISP TAO LUOI TOA DO BAN DO VI TRI, LENH : KKL")
    ;;;
    (defun c:kkl (/ donvi nx ny pt1 pt2 kcx kcy goc1 goc2 x1 x y  heso old ptext1 ptext2 ptext3 ptext4 str str2 goc3 htext num )
    (vl-load-com)
    (setq old (getvar "osmode"))
    (if (null (tblsearch "STYLE" "vusaln"))
        (emk_style "vusaln" "Vaptimn.TTF"))
    (if (null (tblsearch "LAYER" "A1-luoik"))
        (_layer2 "A1-luoik" 7))
      (setq tyleVT (getvalue tyleVT 1000.0 "Nhap ty le ban do VT: "))
      (setq heso (/ 1000 tyleVT))
      (setq htext (/ 2.0 heso))
    ;===================================*******************++++++++++++++++++++********************===================================  
    (while (and (setvar "osmode" 1)
                (setq pt1 (getpoint "\nChon diem goc duoi trai khung:"))
                (setq pt2 (getpoint pt1 "\nChon diem goc tren phai khung:")))
    (progn
    (setvar "osmode" 0)
    ;======================================================================
    ;=======================================================================
    (setq kcx (- (car pt2) (car pt1)) kcy (- (cadr pt2) (cadr pt1)))
    ;===============================================================================================
    (cond
                ((and (>= (/ kcx 100) 2) (>= (/ kcy 100) 2))
                 (setq donvi 100))
                ((and (>= (/ kcx 50) 2) (>= (/ kcy 50) 2))
                 (setq donvi 50))
                ((and (>= (/ kcx 25) 2) (>= (/ kcy 25) 2))
                 (setq donvi 25))
                )
    (if donvi
         (progn
             (setq nx (fix (/ kcx donvi)) ny (fix (/ kcy donvi)))
     ;==============================================================================================
     (setq goc2 (list (lamtron (fix (+ (car pt1) 10))) (cadr pt1) 0.0))
    (setq goc3 (list (car pt1) (lamtron (fix (+ (cadr pt1) 10))) 0.0))
    ;===============================================================
    (repeat nx
    
    (makeline goc2 (polar goc2 (/ pi 2) (/ 8.0 heso)) "A1-luoik" nil nil nil)
    ;=======================================================================
    (setq ptext1 (polar goc2 (dtr 23) (/ 3.5 heso)))
    (setq ptext2 (polar goc2 (dtr 158) (/ 3.5 heso)))
    (setq num (fix (car goc2)))
    (setq str (them0 (itoa (rem num 1000))))
    (setq str2 (itoa (/ num 1000)))
    (mktext ptext1 htext str "M" "A1-luoik" "vusaln" nil)
    (mktext ptext2 htext str2 "M" "A1-luoik" "vusaln" nil)
    ;=======================================================================
    (setq goc2 (mapcar '+ goc2 (list donvi 0.0 0.0)))
    ) ;end repeat nx
    ;============================================================
    (repeat ny
    (makeline goc3 (polar goc3 0 (/ 8.0 heso)) "A1-luoik" nil nil nil)
    ;=====================================================================
    (setq ptext3 (polar goc3 (dtr 23) (/ 4.0 heso)))
    (setq ptext4 (polar goc3 (dtr 338) (/ 4.0 heso)))
    (setq num (fix (cadr goc3)))
    (setq str (them0 (itoa (rem num 1000))))
    (setq str2 (itoa (/ num 1000)))
    (mktext ptext3 htext str2 "M" "A1-luoik" "vusaln" nil)
    (mktext ptext4 htext str "M" "A1-luoik" "vusaln" nil)
    ;============================================================= 
    (setq goc3 (mapcar '+ goc3 (list 0.0 donvi 0.0)))
    ); end repeat ny
    ;============================================================
    (setq goc1 (list (lamtron (fix (+ (car pt1) 10))) (lamtron (fix (+ (cadr pt1) 10))) 0.0))
    ;============================================================================================ 
     (setq x (car goc1))
      (repeat nx
        (setq y (cadr goc1))
        (repeat ny
          
    	  (vediem x y (/ 2.5 heso))
          (setq y (+ y donvi))
        )
    ;===============================================================================================
        (setq x (+ x donvi))
      )
     ;==============================================================================================
     ) ;end progn donvi
       (alert "Ban chon Khung KiBo qua\nVe Khung Lai Hen!!!^^") ; end nho hon 25
    ) ; end if don vi
    ;==============================================================================
    ) ; end progn while
    ) ; end while
    (setvar "osmode" old)
    (princ)
    )
    ;==============================================================================================
    ;;;;;;;;;;;;;;;;;;;;
    (defun lamtron (n / sodu)
      (setq sodu (rem n 100))
      (if (/= sodu 0)
        (setq n (+ (- n sodu) 100))
      )
      n
    )
    ;=================================
    (defun vediem (xx yy r / left right top bot)
      (setq top (+ yy r))
      (setq bot (- yy r))
      (setq right (+ xx r))
      (setq left (- xx r))
      (makeline (list left yy) (list right yy) "A1-luoik" nil nil nil)
      (makeline (list xx top) (list xx bot) "A1-luoik" nil nil nil)
    )
    ;============================
    ;=================================================================================
    (defun _layer2 ( name colour )
        (if (null (tblsearch "LAYER" name))
            (entmake
                (list
                   '(0 . "LAYER")
                   '(100 . "AcDbSymbolTableRecord")
                   '(100 . "AcDbLayerTableRecord")
                   '(70 . 0)
                    (cons 2 name)
                    (cons 62 colour)
                )
            )
        )
    )
    ;=====================================================================================
    ;; ham luu gia tri
    (defun getvalue ( a giatri dongnhac / astr) 
    (or a (setq a giatri))
    (cond
    	((= (type a) 'INT) (setq a (cond ((getint (strcat "\n" dongnhac "(" (itoa a) ") :")))(a))))
    	((= (type a) 'REAL) (setq a (cond ((getreal (strcat "\n" dongnhac "(" (rtos a 2 0) ") :")))(a))))
    	((= (type a) 'STR) (setq a (cond ((= "" (setq astr (getstring T (strcat "\n" dongnhac " (" a "): ")))) a) (astr))))
    ))
    ;;;;
    ;;ham tao text 2
    (defun mktext (point height string justify layer textstyle mau / lst)
    (setq lst (list '(0 . "TEXT")
                                  (cons 10 point)
    							  (cons 40 height)
    							  (cons 1 string)
    							  (cons 8 layer)
    							  (cons 7 (if textstyle textstyle (getvar "textstyle")))
    							  (cons 62 (if mau mau 256))
    							  
    			)
    			justify (strcase justify))
    		(cond   ((= justify "L") (setq Lst (append Lst (list (cons 72 0) (cons 11 point)))))
    		        ((= justify "C") (setq Lst (append Lst (list (cons 72 1) (cons 11 point)))))
    				((= justify "R") (setq Lst (append Lst (list (cons 72 2) (cons 11 point)))))
    				((= justify "M") (setq Lst (append Lst (list (cons 72 4) (cons 11 point)))))
    				)
    	(entmakex Lst)
      )	;end mktext
    ;;--------------------------------------
    (defun them0(chuoi)
      (setq len (strlen chuoi))
      (if (= len 1)
        (strcat "00" chuoi)
        (if (= len 2)
          (strcat "0" chuoi)
          chuoi
        )  
      )
     )
    

    - nếu xác định sai 2 điểm, lưới tạo ra sẽ ko ở trong khung chọn ^^

    (defun K:getlstp(v / l1 l2)
    (setq l1 (acet-geom-vertex-list v))
    (setq l2 nil)
    (foreach x l1
     (if (not (member x l2)) (setq l2 (cons x l2))))
     l2
    )
    (defun c:xxx()
    (prompt "chon doi tuong:")
    (setq lstp (K:getlstp (ssname (ssget "+.:E:S" '((0 . "LWPOLYLINE"))) 0)))
    (setq pt1 (nth 0 kl))
    (setq pt2 (nth 2 kl))
    ;.............................
    )
      
    

    - nhoc mới nghĩ ra đc tới đây chưa pit sort kiểu nào ^^


  7. -^^ nói đến chuyên môn thì nhoc còn phải mót nhiều, do hoàn cảnh, tính chất công việc hiện tai của nhoc , mỗi người 1 hoàn cảnh 1 lời khó mà nói hết a ah, chủ yếu là vì nhoc thích tìm tòi ^^, mỗi lần viết thấy vui, tương lai thế nào chưa rõ, cố đc đến đâu hay đến đó.

    - Clip anh nhoc xem trước đó rùi ^^, cách biên tập của a nó không giống bên nhoc, bên nhoc nhoc cũng có vài công trình dạng tuyến chỉ rãi lưới đơn giản khổ giấy lớn hơn

    - mục đích nhoc thử làm lsp này để hỗ trợ cho chương trình sẵn của cơ quan, nhưng có nhiều khi mình mún xử lý độc lập, còn chương trình nó hay ràng buộc theo nhiều cái khác khó xử lý tính huống nhanh^^

    - nhoc ko giỏi hơn anh đâu ^^, nhoc chậm tiu lắm, chỉ cố gắng hết theo sức mình có

    - nhoc có xem qua lsp tạo lưới của a, nhưng nó còn hơi cao với nhoc, nhìn lsp của nhoc đơn giản thui, nhưng mất đến 2 ngày nhoc mới làm xong kaka

    ;hàm tao textstyle
    (defun emk_style (MyStyle MyFont)
    (entmake (list    (cons 0 "STYLE")    
    (cons 100 "AcDbSymbolTableRecord")    
    (cons 100 "AcDbTextStyleTableRecord")    
    (cons 2 MyStyle)    (cons 3  MyFont)    
    (cons 70 0))))
    ;;;;
    (defun MakeLine (PT1 PT2 Layer Linetype LTScale xdata)
    	(entmakex (list '(0 . "LINE")
    	(cons 8 (if Layer Layer (getvar "Clayer")))
    	(cons 6 (if Linetype Linetype "bylayer"))
    	(cons 48 (if LTScale LTScale 1))
    	(cons 10 PT1)	(cons 11 PT2)
    	(cons -3 (if xdata (list xdata) nil))))) 
    ;;;;;;--------------------------------------------------------------------------------------------
    ;================================================================================================
    (defun dtr (a)
    (* (/ a 180.0) pi)
    )
    (prompt "LISP TAO LUOI TOA DO BAN DO VI TRI, LENH : KKL")
    ;;;
    (defun c:kkl (/ donvi nx ny pt1 pt2 pt3 pt4 kcx kcy goc1 goc2 x1 x y  heso old ptext1 ptext2 ptext3 ptext4 str str2 goc3 htext num )
    (vl-load-com)
    (setq old (getvar "osmode"))
    (if (null (tblsearch "STYLE" "vusaln"))
        (emk_style "vusaln" "Vaptimn.TTF"))
    (if (null (tblsearch "LAYER" "A1-luoik"))
        (_layer2 "A1-luoik" 7))
      (setq donvi (list (cons 1  100) (cons 2  50) (cons 3  25)))
      (setq tyleVT (getvalue tyleVT 1000.0 "Nhap ty le ban do VT: "))
      (setq heso (/ 1000 tyleVT))
      (setq htext (/ 2.0 heso))
    ;===================================*******************++++++++++++++++++++********************===================================  
    (while (and (setvar "osmode" 1)
                (setq pt1 (getpoint "\nChon diem goc duoi trai khung:"))
                (setq pt2 (getpoint pt1 "\nChon diem goc tren phai khung:")))
    (progn
    (setvar "osmode" 0)
    ;======================================================================
    ;=======================================================================
    (setq pt3 (inters pt1 (polar pt1 (/ pi 2) 90000) pt2 (polar pt2 pi 90000) nil))
    (setq pt4 (inters pt1 (polar pt1 0 90000) pt2 (polar pt2 (dtr 270) 90000) nil))
    (setq kcx (distance pt1 pt4) kcy (distance pt1 pt3))
    ;==============================================================================
    (cond 
    ((and (>= (/ kcx 100) 2) (>= (/ kcy 100) 2))
    ;==========================================================
    (setq nx (fix (/ kcx 100)) ny (fix (/ kcy 100)))
    (setq goc2 (list (lamtron (fix (+ (car pt1) 10))) (cadr pt1) 0.0))
    (setq goc3 (list (car pt1) (lamtron (fix (+ (cadr pt1) 10))) 0.0))
    ;============================================================
    (repeat nx
    
    (makeline goc2 (polar goc2 (/ pi 2) (/ 8.0 heso)) "A1-luoik" nil nil nil)
    ;=======================================================================
    (setq ptext1 (polar goc2 (dtr 23) (/ 3.5 heso)))
    (setq ptext2 (polar goc2 (dtr 158) (/ 3.5 heso)))
    (setq num (fix (car goc2)))
    (setq str (them0 (itoa (rem num 1000))))
    (setq str2 (itoa (/ num 1000)))
    (mktext ptext1 htext str "M" "A1-luoik" "vusaln" nil)
    (mktext ptext2 htext str2 "M" "A1-luoik" "vusaln" nil)
    ;=======================================================================
    (setq goc2 (mapcar '+ goc2 (list (cdr (assoc 1 donvi)) 0.0 0.0)))
    ) ;end repeat nx
    ;============================================================
    (repeat ny
    (makeline goc3 (polar goc3 0 (/ 8.0 heso)) "A1-luoik" nil nil nil)
    ;=====================================================================
    (setq ptext3 (polar goc3 (dtr 23) (/ 4.0 heso)))
    (setq ptext4 (polar goc3 (dtr 338) (/ 4.0 heso)))
    (setq num (fix (cadr goc3)))
    (setq str (them0 (itoa (rem num 1000))))
    (setq str2 (itoa (/ num 1000)))
    (mktext ptext3 htext str2 "M" "A1-luoik" "vusaln" nil)
    (mktext ptext4 htext str "M" "A1-luoik" "vusaln" nil)
    ;============================================================= 
    (setq goc3 (mapcar '+ goc3 (list 0.0 (cdr (assoc 1 donvi)) 0.0)))
    ); end repeat ny
    ;============================================================
    (setq goc1 (list (lamtron (fix (+ (car pt1) 10))) (lamtron (fix (+ (cadr pt1) 10))) 0.0))
    ;============================================================================================ 
     (setq x (car goc1))
      (repeat nx
        (setq y (cadr goc1))
        (repeat ny
          
    	  (vediem x y (/ 2.5 heso))
          (setq y (+ y (cdr (assoc 1 donvi))))
        )
    ;===============================================================================================
        (setq x (+ x (cdr (assoc 1 donvi))))
      )
    ;============================================================
    ) ;end 100
    
    
    ;========================================================++++++++++**************+++++++++=======================================================
    ((and (>= (/ kcx 50) 2) (>= (/ kcy 50) 2))
    ;==========================================================
    (setq nx (fix (/ kcx 50)) ny (fix (/ kcy 50)))
    (setq goc2 (list (lamtron (fix (+ (car pt1) 10))) (cadr pt1) 0.0))
    (setq goc3 (list (car pt1) (lamtron (fix (+ (cadr pt1) 10))) 0.0))
    ;============================================================
    (repeat nx
    
    (makeline goc2 (polar goc2 (/ pi 2) (/ 8.0 heso)) "A1-luoik" nil nil nil)
    ;=======================================================================
    (setq ptext1 (polar goc2 (dtr 23) (/ 3.5 heso)))
    (setq ptext2 (polar goc2 (dtr 158) (/ 3.5 heso)))
    (setq num (fix (car goc2)))
    (setq str (them0 (itoa (rem num 1000))))
    (setq str2 (itoa (/ num 1000)))
    (mktext ptext1 htext str "M" "A1-luoik" "vusaln" nil)
    (mktext ptext2 htext str2 "M" "A1-luoik" "vusaln" nil)
    ;=======================================================================
    (setq goc2 (mapcar '+ goc2 (list (cdr (assoc 2 donvi)) 0.0 0.0)))
    ) ;end repeat nx
    ;============================================================
    (repeat ny
    (makeline goc3 (polar goc3 0 (/ 8.0 heso)) "A1-luoik" nil nil nil)
    ;=====================================================================
    (setq ptext3 (polar goc3 (dtr 23) (/ 4.0 heso)))
    (setq ptext4 (polar goc3 (dtr 338) (/ 4.0 heso)))
    (setq num (fix (cadr goc3)))
    (setq str (them0 (itoa (rem num 1000))))
    (setq str2 (itoa (/ num 1000)))
    (mktext ptext3 htext str2 "M" "A1-luoik" "vusaln" nil)
    (mktext ptext4 htext str "M" "A1-luoik" "vusaln" nil)
    ;============================================================= 
    (setq goc3 (mapcar '+ goc3 (list 0.0 (cdr (assoc 2 donvi)) 0.0)))
    ); end repeat ny
    ;============================================================
    (setq goc1 (list (lamtron (fix (+ (car pt1) 10))) (lamtron (fix (+ (cadr pt1) 10))) 0.0))
    ;============================================================================================ 
     (setq x (car goc1))
      (repeat nx
        (setq y (cadr goc1))
        (repeat ny
          
    	  (vediem x y (/ 2.5 heso))
          (setq y (+ y (cdr (assoc 2 donvi))))
        )
    ;===============================================================================================
        (setq x (+ x (cdr (assoc 2 donvi))))
      )
    ;============================================================
    ) ;end 50
    ;============================================================******++++++++++++++++++++****************++++++++++++++++++++========================
    ((and (>= (/ kcx 25) 2) (>= (/ kcy 25) 2))
    ;==========================================================
    (setq nx (fix (/ kcx 25)) ny (fix (/ kcy 25)))
    (setq goc2 (list (lamtron (fix (+ (car pt1) 10))) (cadr pt1) 0.0))
    (setq goc3 (list (car pt1) (lamtron (fix (+ (cadr pt1) 10))) 0.0))
    ;============================================================
    (repeat nx
    
    (makeline goc2 (polar goc2 (/ pi 2) (/ 8.0 heso)) "A1-luoik" nil nil nil)
    ;=======================================================================
    (setq ptext1 (polar goc2 (dtr 23) (/ 3.5 heso)))
    (setq ptext2 (polar goc2 (dtr 158) (/ 3.5 heso)))
    (setq num (fix (car goc2)))
    (setq str (them0 (itoa (rem num 1000))))
    (setq str2 (itoa (/ num 1000)))
    (mktext ptext1 htext str "M" "A1-luoik" "vusaln" nil)
    (mktext ptext2 htext str2 "M" "A1-luoik" "vusaln" nil)
    ;=======================================================================
    (setq goc2 (mapcar '+ goc2 (list (cdr (assoc 3 donvi)) 0.0 0.0)))
    ) ;end repeat nx
    ;============================================================
    (repeat ny
    (makeline goc3 (polar goc3 0 (/ 8.0 heso)) "A1-luoik" nil nil nil)
    ;=====================================================================
    (setq ptext3 (polar goc3 (dtr 23) (/ 4.0 heso)))
    (setq ptext4 (polar goc3 (dtr 338) (/ 4.0 heso)))
    (setq num (fix (cadr goc3)))
    (setq str (them0 (itoa (rem num 1000))))
    (setq str2 (itoa (/ num 1000)))
    (mktext ptext3 htext str2 "M" "A1-luoik" "vusaln" nil)
    (mktext ptext4 htext str "M" "A1-luoik" "vusaln" nil)
    ;============================================================= 
    (setq goc3 (mapcar '+ goc3 (list 0.0 (cdr (assoc 3 donvi)) 0.0)))
    ); end repeat ny
    ;============================================================
    (setq goc1 (list (lamtron (fix (+ (car pt1) 10))) (lamtron (fix (+ (cadr pt1) 10))) 0.0))
    ;============================================================================================ 
     (setq x (car goc1))
      (repeat nx
        (setq y (cadr goc1))
        (repeat ny
          
    	  (vediem x y (/ 2.5 heso))
          (setq y (+ y (cdr (assoc 3 donvi))))
        )
    ;===============================================================================================
        (setq x (+ x (cdr (assoc 3 donvi))))
      )
    ;============================================================
    ) ;end  25
    ;==================================================*********************++++++++++++++++++++*************===========================
    ((and (< (/ kcx 25) 2) (< (/ kcy 25) 2))
    (alert "Ban chon Khung KiBo qua\nVe Khung Lai Hen!!!^^")) ; end nho hon 25
    ) ;end cond
    ;==================================================================++++++++++**************+++++++++=======================================
    ) ;end progn of while pt1 pt2
    ) ; end  while
    (setvar "osmode" old)
    (princ)
    )
    ;==============================================================================================
    ;;;;;;;;;;;;;;;;;;;;
    (defun lamtron (n / sodu)
      (setq sodu (rem n 100))
      (if (/= sodu 0)
        (setq n (+ (- n sodu) 100))
      )
      n
    )
    ;=================================
    (defun vediem (xx yy r / left right top bot)
      (setq top (+ yy r))
      (setq bot (- yy r))
      (setq right (+ xx r))
      (setq left (- xx r))
      (makeline (list left yy) (list right yy) "A1-luoik" nil nil nil)
      (makeline (list xx top) (list xx bot) "A1-luoik" nil nil nil)
    )
    ;============================
    ;=================================================================================
    (defun _layer2 ( name colour )
        (if (null (tblsearch "LAYER" name))
            (entmake
                (list
                   '(0 . "LAYER")
                   '(100 . "AcDbSymbolTableRecord")
                   '(100 . "AcDbLayerTableRecord")
                   '(70 . 0)
                    (cons 2 name)
                    (cons 62 colour)
                )
            )
        )
    )
    ;=====================================================================================
    ;; ham luu gia tri
    (defun getvalue ( a giatri dongnhac / astr) 
    (or a (setq a giatri))
    (cond
    	((= (type a) 'INT) (setq a (cond ((getint (strcat "\n" dongnhac "(" (itoa a) ") :")))(a))))
    	((= (type a) 'REAL) (setq a (cond ((getreal (strcat "\n" dongnhac "(" (rtos a 2 0) ") :")))(a))))
    	((= (type a) 'STR) (setq a (cond ((= "" (setq astr (getstring T (strcat "\n" dongnhac " (" a "): ")))) a) (astr))))
    ))
    ;;;;
    ;;ham tao text 2
    (defun mktext (point height string justify layer textstyle mau / lst)
    (setq lst (list '(0 . "TEXT")
                                  (cons 10 point)
    							  (cons 40 height)
    							  (cons 1 string)
    							  (cons 8 layer)
    							  (cons 7 (if textstyle textstyle (getvar "textstyle")))
    							  (cons 62 (if mau mau 256))
    							  
    			)
    			justify (strcase justify))
    		(cond   ((= justify "L") (setq Lst (append Lst (list (cons 72 0) (cons 11 point)))))
    		        ((= justify "C") (setq Lst (append Lst (list (cons 72 1) (cons 11 point)))))
    				((= justify "R") (setq Lst (append Lst (list (cons 72 2) (cons 11 point)))))
    				((= justify "M") (setq Lst (append Lst (list (cons 72 4) (cons 11 point)))))
    				)
    	(entmakex Lst)
      )	;end mktext
    ;;--------------------------------------
    (defun them0(chuoi)
      (setq len (strlen chuoi))
      (if (= len 1)
        (strcat "00" chuoi)
        (if (= len 2)
          (strcat "0" chuoi)
          chuoi
        )  
      )
     ) 

  8. - sẵn topic có liên quan đến địa chính, nhoc show 1 lsp nhoc vừa mới mày mò viết ra, lsp tạo mắt lưới phục vụ cho việc biên tập bản hiện trạng vị trí trích đo chắc chắn là chưa bằng anh Duan viết rùi ^^, nhoc có xem rùi hiện tại bên nhoc chưa có nhu cầu như a viết chỉ đơn giản như kiểu nhoc viết thui, nhoc post cái clip minh họa trước, chưa dám tung hàng chờ ý kiến phản hồi của mọi người  :P

    https://www.youtube.com/watch?v=fWckJbtKYhE&feature=youtu.be


  9. - ah câu 4 nhoc nhầm ^^, nếu là nhoc, nhoc viết vậy dễ dịch hơn

    (setq gt1 (getdist))

    (if (not gt1) (setq gt 10) (setq gt gt1))

    - hì câu 6 cảm nhận của nhoc thì ok, tùy cơ ứng biến trường hợp nào tiện hơn thì dùng cái đó ^^

    - Câu 5: đề cho trước 3 danh sách

    (setq lst '((A . 2000) (B . 4000) (C . 5000)));=> chỉ mục tên hàng với giá tương ứng
    (setq lst2 '((A . 45) (B . 12) (C . 10))); chỉ mục tên hàng với số lượng tương ứng
    (setq lst3 (list A A B B C)) ;=> danh sách tên các mặt hàng đã bán trong ngày
    

    - y/c 1: dựa vào 3 lst trên tính đc tổng tiền 3 mặt hàng đó đã bán trong ngày, như vd nhoc viết ở đây, tính nhẳm thì lẹ rùi ^^, chủ yếu là viết ham để nó tính thế nào, kết quả trả ra đúng là 17000, dựa vào lst3 vs lst1

    - y/c 2: tính số lượng còn lại lại của mỗi mặt hàng dựa vào lst2 và lst3.

    - y/c 3: thông báo có mặt hàng nào hết ko dựa vào lst2 và lst3

×