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

bach1212

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

    193
  • Đã tham gia

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

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


  1. Bạn thêm dòng này: (command "_.chprop" (entlast) "" "C" 6 "") ngay sau dòng: (entmod elst). Trong đó 6 là màu.

    Mình đã thêm như bạn nói nhưng chưa được bạn ah? Bạn check giúp mình lại nhé.

    (command "setvar" "OSMODE" oslast)
      (command "erase" ss "")
      (setq ss nil)
      (command "redraw" )
      (setq dtl (* dtl tl2))
      (print dtl)
      (setq elst (entget (car (entsel "Thay cho so: "))))
      (setq elst (subst (cons 1 (rtos dtl 2 2)) (assoc 1 elst) elst))
      (entmod elst)
    (command "_.chprop" (entlast) "" "C" 6 "")
      ;(print)
      (prompt (strcat "\nTong dien tich: " (rtos dtl 2 4)))
      (print)
    

  2. Mình đang dùng lisp tính diện tích này

    (defun c:edt()
    (setvar "DIMZIN" 0)
      (if (= tl nil) (progn
        (setq tl (getreal "\nDrawing scale<1/> : "))
        (setq ntl tl)
        (setq tl2 (* ntl ntl))
        )
      )
      (setq dtl 0)
      (setq ss (ssadd))
      (setq oslast (getvar "OSMODE"))
      (command "osnap" "")
      (print)
      (print)
      (setq pt1 (getpoint "\nChon mot diem trong vung dien tich can tinh: "))
      (while (/= pt1 nil)
        (command "-boundary" pt1 "")
        (setq et (entlast))
        (ssadd et ss)
        (command "area" "e" "last")
        (setq vsize ( /(getvar "VIEWSIZE") 3 ))
        (command "hatch" "ANSI31" vsize "0" "last" "")
        (setq et (entlast))
        (ssadd et ss)
        (setq dtcon (getvar "AREA"))
        (setq dtl (+ dtcon dtl))
        (print)
        (print)
        (setq pt1 (getpoint "\nChon mot diem trong vung dien tich tiep theo : "))
      )
      (command "setvar" "OSMODE" oslast)
      (command "erase" ss "")
      (setq ss nil)
      (command "redraw" )
      (setq dtl (* dtl tl2))
      (print dtl)
      (setq elst (entget (car (entsel "Thay cho so: "))))
      (setq elst (subst (cons 1 (rtos dtl 2 2)) (assoc 1 elst) elst))
      (entmod elst)
      ;(print)
      (prompt (strcat "\nTong dien tich: " (rtos dtl 2 4)))
      (print)
    ;  (setq pt2 (getpoint "\nPoint to write: "))
    ;  (command "text" pt2 (/ vsize 6) "0" (rtos dtl 2 2))
    );defun
    ;(setq caodo (atof (assoc 1 ((entget (car (entsel "Thay cho so: ")))))))
    ;----------------------------------------------------------------------------
    (Defun c:vld()
      (Setq pt1(getpoint"\nChon diem bat dau ve:"))
      ;(Setq s(getreal"\nCho chieu dai doan ve:"))
      ;(Setq pt(getreal"\nCho do doc cua duong thang<%>:"))
      (While
        (Setq s(getreal"\nCho chieu dai doan ve:"))
      (Setq pt(getreal"\nCho do doc cua duong thang<%>:"))
        (setq pt2(list ))))
    	
    

    Mình muốn chỉnh sửa thêm 1 chút là: text kết quả sau khi ed vào text có sẵn thì text đổi màu thành màu hồng.

    Rất mong các bạn giúp đỡ!


  3.  

    Mình thấy vệc này tạm thời làm thủ công + lisp đơn giản không hề chậm lắm đâu, và mọi người sẽ hiện thực hóa nó.Ta sẽ không dùng lệnh aa để đo diện tích,vì chưa có đối tượng bao,hoặc phải kích điểm rất lâu,mà dùng mắt thường để tạo ra đường biên đa giác bao ngoài trước.

    1.Như bạn nói, đường biên chỉ bao gồm 2 layer, vậy trước tiên bạn layiso 2 layer này trước đã nhé.

    2.Sau đó dùng lisp nối các line bao ngoài thành 1 pline kín

    3.Lấy diện tích đa giác bao ngoài này bằng các lisp tính diện tích có sẵn trên diễn đàn

    Các thao tác để tạo pline bao ngoài có thể gói gọn bằng lisp này, của 1 Pro người nga do 1 pro người Việt (^^) giới thiệu.Lệnh Eco.Sau khi có em bao ngoài rồi thì việc còn lại k có j phứcc tạp cả ^^

     

    ;;;; External contour of objects(defun C:ECO (/       *error* blk     obj     MinPt   MaxPt   hiden              pt      pl      unnamed_block   isRus   tmp_blk adoc              blks    lays    lay     oname   sel     csp     loc              sc      ec      ret     DS      osm     iNSpT             )  (defun *error* (msg)    (princ msg)    (mapcar '(lambda (x) (vla-put-visible x :vlax-true)) hiden)    (vla-endundomark adoc)    (if (and tmp_blk             (not (vlax-erased-p tmp_blk))             (vlax-write-enabled-p tmp_blk)        ) ;_ end of and      (vla-erase tmp_blk)    ) ;_ end of if    (if osm      (setvar "OSMODE" osm)    ) ;_ end of if    (foreach x loc (vla-put-lock x :vlax-true))  ) ;_ end of defun  (vl-load-com)  (setvar "CMDECHO" 0)  (setq osm (getvar "OSMODE"))  (if (zerop (getvar "WORLDUCS"))    (progn (vl-cmdf "_.UCS" "") (vl-cmdf "_.Plan" ""))  ) ;_ end of if  (setq isRus (= (getvar "SysCodePage") "ANSI_1251"))  (setq adoc (vla-get-activedocument (vlax-get-acad-object))        blks (vla-get-blocks adoc)        lays (vla-get-layers adoc)  ) ;_ end of setq  (vla-startundomark adoc)  (if isRus    (princ "\n§£§í§Ò§Ö§â§Ú§ä§Ö §à§Ò§ì§Ö§Ü§ä§í §Õ§Ý§ñ §á§à§ã§ä§â§à§Ö§ß§Ú§ñ §Ü§à§ß§ä§å§â§Ñ")    (princ "\nSelect objects for making a contour")  ) ;_ end of if  (vlax-for lay lays    (if (= (vla-get-lock lay) :vlax-true)      (progn (vla-put-lock lay :vlax-false)             (setq loc (cons lay loc))      ) ;_ end of progn    ) ;_ end of if  ) ;_ end of vlax-for  (if (setq sel (ssget))    (progn      (setq sel (ssnamex sel))      (setq iNSpT '(0 0 0))      (setq sel (mapcar 'vlax-ename->vla-object                        (vl-remove-if 'listp (mapcar 'cadr sel))                ) ;_ end of mapcar      ) ;_ end of setq      (setq csp (vla-objectidtoobject adoc (vla-get-ownerid (car sel))))      (setq unnamed_block             (vla-add (vla-get-blocks adoc)                      (vlax-3d-point inspt)                      "*U"             ) ;_ end of vla-add      ) ;_ end of setq      (foreach x sel        (setq oname (strcase (vla-get-objectname x)))        (cond	  ((member oname '("ACDBVIEWPORT" "ACDBATTRIBUTEDEFINITION" "ACDBMTEXT" "ACDBTEXT"  )  ) ;_ end of member               nil              )	  ((= oname "ACDBBLOCKREFERENCE")               (vla-insertblock                 unnamed_block                 (vla-get-insertionpoint x)                 (vla-get-name x)                 (vla-get-xscalefactor x)                 (vla-get-yscalefactor x)                 (vla-get-zscalefactor x)                 (vla-get-rotation x)               ) ;_ end of vla-InsertBlock               (setq blk (cons x blk))              )              (t (setq obj (cons x obj)))        ) ;_ end of cond      ) ;_foreach      (setq lay (vla-item lays (getvar "CLAYER")))      (if (= (vla-get-lock lay) :vlax-true)        (progn (vla-put-lock lay :vlax-false)               (setq loc (cons lay loc))        ) ;_ end of progn      ) ;_ end of if      (if obj        (progn (vla-copyobjects                 (vla-get-activedocument (vlax-get-acad-object))                 (vlax-make-variant                   (vlax-safearray-fill                     (vlax-make-safearray                       vlax-vbobject                       (cons 0 (1- (length obj)))                     ) ;_ end of vlax-make-safearray                     obj                   ) ;_ end of vlax-safearray-fill                 ) ;_ end of vlax-make-variant                 unnamed_block               ) ;_ end of vla-copyobjects        ) ;_ end of progn      ) ;_ end of if      (setq obj (append obj blk))      (if obj        (progn          (setq tmp_blk (vla-insertblock                          csp                          (vlax-3d-point inspt)                          (vla-get-name unnamed_block)                          1.0                          1.0                          1.0                          0.0                        ) ;_ end of vla-insertblock          ) ;_ end of setq          (vla-getboundingbox tmp_blk 'MinPt 'MaxPt)           (setq MinPt (vlax-safearray->list MinPt)                MaxPt (vlax-safearray->list MaxPt)                DS    (max (distance MinPt (list (car MinPt) (cadr MaxPt)))                           (distance MinPt (list (car MaxPt) (cadr MinPt)))                      ) ;_ end of max                DS    (* 0.2 DS)                  ;1/5                DS    (max DS 10)                MinPt (mapcar '- MinPt (list DS DS))                MaxPt (mapcar '+ MaxPt (list DS DS))          ) ;_ end of setq          (lib:Zoom2Lst (list MinPt MaxPt))          (setq sset (ssget "_C" MinPt MaxPt))          (if sset            (progn              (setvar "OSMODE" 0)              (setq hiden (mapcar 'vlax-ename->vla-object                                  (vl-remove-if                                    'listp                                    (mapcar 'cadr (ssnamex sset))                                  ) ;_ end of vl-remove-if                          ) ;_ end of mapcar                    hiden (vl-remove tmp_blk hiden)              ) ;_ end of setq              (mapcar '(lambda (x) (vla-put-visible x :vlax-false))                      hiden              ) ;_ end of mapcar              (setq pt (mapcar '+ MinPt (list (* 0.5 DS) (* 0.5 DS))))              (vl-cmdf "_.RECTANG" (trans MinPt 0 1) (trans MaxPt 0 1))              (setq pl (vlax-ename->vla-object (entlast)))              (setq sc (entlast))              (if                (vl-catch-all-error-p                  (vl-catch-all-apply                    '(lambda ()                       (vl-cmdf "_-BOUNDARY" (trans pt 0 1) "")                       (while (> (getvar "CMDACTIVE") 0) (command ""))                     ) ;_ end of lambda                  ) ;_ end of VL-CATCH-ALL-APPLY                ) ;_ end of VL-CATCH-ALL-ERROR-P                 (if isRus                   (princ "\n§¯§Ö §å§Õ§Ñ§Ý§à§ã§î §á§à§ã§ä§â§à§Ú§ä§î §Ü§à§ß§ä§å§â")                   (princ "\nIt was not possible to construct a contour")                 ) ;_ end of if              ) ;_ end of if              (setq ec sc)              (while (setq ec (entnext ec))                (setq ret (cons (vlax-ename->vla-object ec) ret))                )                (setq ret (vl-remove pl ret))              (mapcar '(lambda (x) (vla-erase x) (vlax-release-object x))                      (list pl tmp_blk)              ) ;_ end of mapcar              (setq pl nil                    tmp_blk nil              ) ;_ end of setq              (setq                ret (mapcar '(lambda (x / mipt)                               (vla-getboundingbox x 'MiPt nil)                                (setq MiPt (vlax-safearray->list MiPt))                               (list MiPt x)                             ) ;_ end of lambda                            ret                    ) ;_ end of mapcar              ) ;_ end of setq              (setq ret (vl-sort ret                                 '(lambda (e1 e2)                                    (< (distance MinPt (car e1))                                       (distance MinPt (car e2))                                    ) ;_ end of <                                  ) ;_ end of lambda                        ) ;_ end of vl-sort              ) ;_ end of setq              (setq pl  (nth 1 ret)                    ret (vl-remove pl ret)              ) ;_ end of setq              (mapcar 'vla-erase (mapcar 'cadr ret))              (mapcar '(lambda (x) (vla-put-visible x :vlax-true))                      hiden              ) ;_ end of mapcar              (foreach x loc (vla-put-lock x :vlax-true))              (if pl                (progn                  (initget "Yes No")                  (if                    (= (getkword (if isRus                                   "\n§µ§Õ§Ñ§Ý§ñ§ä§î §à§Ò§ì§Ö§Ü§ä§í? [Yes/No] <No> : "                                   "\nDelete objects? [Yes/No] <No> : "                                 ) ;_ end of if                       ) ;_ end of getkword                       "Yes"                    ) ;_ end of =                     (mapcar '(lambda (x)                                (if (vlax-write-enabled-p x)                                  (vla-erase x)                                ) ;_ end of if                              ) ;_ end of lambda                             obj                     ) ;_ end of mapcar                  ) ;_ end of if                ) ;_ end of progn                (if isRus                  (princ "\n§¯§Ö §å§Õ§Ñ§Ý§à§ã§î §á§à§ã§ä§â§à§Ú§ä§î §Ü§à§ß§ä§å§â")                  (princ "\nIt was not possible to construct a contour")                ) ;_ end of if              ) ;_ end of if            ) ;_ end of progn          ) ;_ end of if        ) ;_ end of progn      ) ;_ end of if      (vl-catch-all-apply        '(lambda ()           (mapcar 'vlax-release-object                   (list unnamed_block tmp_blk csp blks lays)           ) ;_ end of mapcar         ) ;_ end of lambda      ) ;_ end of VL-CATCH-ALL-APPLY    ) ;_ end of progn  ) ;_if not  (foreach x loc (vla-put-lock x :vlax-true))  (setvar "OSMODE" osm)  (vla-endundomark adoc)  (vlax-release-object adoc)  (command ".area" "o" "L")(setq dt (getvar "area"))(command ".erase" L "") (writeres dt)  (princ)) ;_ end of defun;;; ========== HELPER FUNCTION ==========================================(defun lib:IsPtInView (pt / VCTR Y_Len SSZ X_Pix Y_Pix X_Len Lc Uc)  (setq pt (trans pt 0 1))  (setq VCTR  (getvar "VIEWCTR")        Y_Len (getvar "VIEWSIZE")        SSZ   (getvar "SCREENSIZE")        X_Pix (car SSZ)        Y_Pix (cadr SSZ)        X_Len (* (/ X_Pix Y_Pix) Y_Len)        Lc    (polar VCTR (dtr 180.0) (* 0.5 X_Len))        Uc    (polar Lc 0.0 X_Len)        Lc    (polar Lc (dtr 270.0) (* 0.5 Y_Len))        Uc    (polar Uc (dtr 90.0) (* 0.5 Y_Len))  ) ;_ end of setq  (if (and (> (car pt) (car Lc))           (< (car pt) (car Uc))           (> (cadr pt) (cadr Lc))           (< (cadr pt) (cadr Uc))      ) ;_ end of and    t    nil  ) ;_ end of if) ;_ end of defun(defun DTR (a) (* pi (/ a 180.0)))(defun lib:pt_extents (vlist / tmp)  (setq    tmp (mapcar          '(lambda (x) (vl-remove-if 'null x))          (mapcar            '(lambda (what) (mapcar '(lambda (x) (nth what x)) vlist))            '(0 1 2)          ) ;_ end of mapcar        ) ;_ end of mapcar  ) ;_setq  (list (mapcar '(lambda (x) (apply 'min x)) tmp)        (mapcar '(lambda (x) (apply 'max x)) tmp)  ) ;_ end of list) ;_defun(defun lib:Zoom2Lst (vlist / bl tr Lst OS)  (setq Lst (lib:pt_extents vlist)        bl  (car Lst)        tr  (cadr Lst)  ) ;_ end of setq  (if (not (and (lib:IsPtInView bl) (lib:IsPtInView tr)))    (progn (setq OS (getvar "OSMODE"))           (setvar "OSMODE" 0)           (command "_.Zoom"                    "_Window"                    (trans bl 0 1)                    (trans tr 0 1)                    "_.Zoom"                    "0.95x"           ) ;_ end of command           (setvar "OSMODE" OS)           t    ) ;_ end of progn    NIL  ) ;_ end of if) ;_ end of defun(defun CheckObj(e MyType) (equal (cdr (assoc 0 (entget e))) MyType))(defun WriteRes(kq / OK e data)(setq OK nil)(while (not OK)(setq e (car (entsel "\tChon text ghi ket qua:")))(if (CheckObj e "TEXT") (setq OK T) (princ "\nDoi tuong chon khong phai text")))(entmod (subst (cons 1 (rtos kq 2 2)) (assoc 1 (setq data (entget e))) data))(princ))

     

     

    Nhờ bạn ketxu cải biến thêm lisp eco để nó tính diện tích nhiều đa giác kín 1 lúc? 

    HIện tại mình thấy khi quét nhiều đa giác kín thì nó chỉ tính diện tích của 1 đa giác.


  4. ;; free lisp from cadviet.com
    ;;; this lisp was downloaded from http://www.cadviet.com/forum/index.php?showtopic=47442&pid=196992&st=0entry196992
    ;; free lisp from cadviet.com
    ;;; this lisp was downloaded from http://www.cadviet.com/forum/index.php?showtopic=47442&pid=196822&st=0entry196822
    ;Khëi t¹o mét sè th«ng sè cho vÏ nót
    ;------------------------------------------------------
    (defun C:knut ()
    (setq hf (getreal "\nChieu cao text: "))
    (command "dimstyle" "s" "Dimn" "dimstyle" "s" "Dran")
    (command "-Style" "hoatfon" "hoatfon" hf "" "" "" "" "")
    (command "-Layer" "n" "Text" "c" "4" "Text" "")
    (command "-Layer" "n" "Dim" "c" "8" "DIm" "")
    (command "-Layer" "n" "Khuat" "c" "4" "Khuat" "l" "Dashed" "Khuat" "")
    (Princ)
    )
    ;;;Chuong trinh chinh (Ve va thong ke cac yeu to cua duong cong)
    (setq tlv (getint "\nNhap ty le ban ve nut 1/... :"))
    (defun c:GN ()
    (setq cmd (getvar "cmdecho"))
    (setvar "cmdecho" 0)
    (setq sttdinh (getint "\nNhap so thu tu dinh :"))
    (setq es (entsel "\nChon cung tron can ve:"))
    (setq dbang (getpoint "\nChon vi tri dat bang thong ke:"))
    (setq osm (getvar "osmode"))
    (setvar "osmode" 0)
    (setq tdt (car es)
      	dra (cadr es)
      	ent (entget tdt)
      	cen (cdr (assoc 10 ent))
      	goc1 (cdr (assoc 50 ent))
      	goc2 (cdr (assoc 51 ent))
      	bk (cdr (assoc 40 ent))
    )
    (setq td1 (polar cen goc1 bk)
      	td2 (polar cen goc2 bk)
    )
    (setq mid (list (/ (+ (car td1) (car td2)) 2) (/ (+ (cadr td1) (cadr td2)) 2) (caddr td1)))
    (setq goc (angle cen mid))
    (setq goctam (abs (- goc2 goc1)))
    (if (< goctam pi)
    	(setq goct goctam)
    	(setq goct (- (* 2 pi) goctam))
    )
    (setq dtam (/ bk (cos (/ goct 2))))
    (setq dinh (polar cen goc dtam))
    (setq T (rtos (/ (* (distance dinh td1) tlv) 1000) 2 2)
      	P (rtos (/ (* (- dtam bk) tlv) 1000) 2 2)
      	K (rtos (/ (* (* goct bk) tlv) 1000) 2 2)
     	Ssbk (rtos (/ (* bk tlv) 1000) 2 2)
    )
    (command "-layer" "s" "khuat" "" ".line" td1 dinh td2 "")
    (command "-layer" "s" "DIM" "" "Dimstyle" "" "Dimn")
    (setq kckt (* 2.2 (getvar "dimtxt")) dkt1 (polar td1 goc1 kckt))
    (command "DIMALIGNED" dinh td1 dkt1)
    (setq  dkt2 (polar td2 goc2 kckt))
    (command "DIMALIGNED" dinh td2 dkt2)
    (command "Dimstyle" "" "Dran" "DIMRADIUS" tdt dra "")
    ;VÏ khung thèng kª nut
    ;--------------------------------
    (setq  xb (+ (car dbang) (* 11 (getvar "textsize"))) yb (- (cadr dbang) (* 10.25 (getvar "textsize"))) dbang2 (list xb yb (caddr dbang)) odbang (polar dbang (/ (* 3 pi) 4) (/ (getvar "textsize") 5)) odbang2 (polar dbang2 (- (* 2 pi) (/ pi 4)) (/ (getvar "textsize") 5)))
    (command ".layer" "s" "text" "" ".rectang" odbang odbang2 ".rectang" dbang dbang2) (command "change" "l" "" "p" "c" "1" "")
    ;Xö lý b¶ng thèng kª
    ;-----------------------------
    (setq gockep (angtos (- pi goct) 1 4))
    (setq Kiem1 (substr gockep 2 1) kiem2 (substr gockep 3 1) kiem3 (substr gockep 4 1))
    (cond ((= kiem1 "d") (setq dau (substr gockep 1 1) cuoi (substr gockep 3))) ((= kiem2 "d") (setq dau (substr gockep 1 2) cuoi (substr gockep 4))) ((= kiem3 "d") (setq dau (substr gockep 1 3) cuoi (substr gockep 5)))
    )
    (setq  gockep (strcat (strcat dau "%%d") cuoi))
    ;----------------------------
    (setq nhan (rtos sttdinh 2 0))
    (setq chugoc (strcat (strcat "A" nhan) (strcat "=" gockep)))
    (setq chubk (strcat (strcat (strcat "R" nhan) (strcat "=" ssbk)) "m"))
    (setq chutt (strcat (strcat (strcat "T" nhan) (strcat "=" T)) "m"))
    (setq  chup (strcat (strcat (strcat "P" nhan) (strcat "=" P)) "m"))
    (setq  chucd (strcat (strcat (strcat "K" nhan) (strcat "=" K)) "m"))
    (setq dong1 (polar dbang (- (* 2 pi) (/ (* 9 pi) 24)) (* 1.75 (getvar "textsize")))
        	dong2 (polar dong1 (+ pi (/ pi 2)) (* 2 (getvar "textsize")))
        	dong3 (polar dong2 (+ pi (/ pi 2)) (* 2 (getvar "textsize")))
        	dong4 (polar dong3 (+ pi (/ pi 2)) (* 2 (getvar "textsize")))
        	dong5 (polar dong4 (+ pi (/ pi 2)) (* 2 (getvar "textsize")))
    )
    (command "-layer" "s" "Text" "" ".text" dong1 "" chugoc ".text" dong2 "" chubk ".text" dong3 "" chutt ".text" dong4 "" chup ".text" dong5 "" chucd)
    (setq tendinh (strcat "A" nhan))
    (command ".text" dinh "" tendinh)
    (command "insert" "nut" dinh "" "" "" )
    (setvar "osmode" osm)
    (setvar "cmdecho" cmd) (princ)
    (setvar "osmode" 15359)
    )
    
    

    Lisp đó đây ah.

    Mình không nhớ lisp này là ai viết nữa cả.

    Mình vẫn dùng cad 2007 như từ trước đến giờ.

    Lỗi là khi xuất kết quả, toàn bộ các thông số R, T, P, K của tất cả các đường cong khác nhau đều là 0.02 với 0.01. Không đúng với giá trị thực tế.

    XIn gửi file đính kèm để các bạn kiểm tra hộ nhé.

    http://www.mediafire.com/download/argi2wcom81amtx/111.dwg

     

    A1 = 71d31'09''
    R1 = 21.97m
    T1 = 30.51m
    P1 = 15.63m
    K1 = 41.61m

  5. Mình gặp 1 số bản vẽ khi dùng lisp để xoay 1 đối tượng TEXT theo 1 pline thì nó lại xoay theo chiều vuông góc với pline đó.
    Những bản vẽ khác thì ko bị thế. Không biết đây là lỗi gì, cách khắc phục như thế nào ạ?
    Khi copy toàn bộ đối tượng của bản vẽ đó sang 1 bản vẽ mới thì lại xoay được bình thường. 


  6. Cảm ơn tất cả các bạn, đặc biệt bạn tot77, test lại thì thấy khá ổn, so với nova là khoảng 96% kết quả tương đồng.  :) Thường kết quả sai khác ở rìa do cao độ thưa nên lưới mỏng, tam giác to. Còn ở trung tâm, lưới tam giác dày, nhỏ hơn thì là kết quả chính xác hơn.
    Gửi các bạn cách tạo lưới của Nova: để các bạn nghiên cứu thêm. 
    http://www.cadviet.com/upfiles/3/40304_luoi.rar

     


  7. sory tot77, quên mất là 6 cái nút dưới cùng là đã dùng lisp để tính mà chưa xoá đi chứ ko phải nova tính. 6 nút đó là chỗ có nhìu vòng tròn đỏ nhất. 

     

    et9o.jpg

     

    Có nhìu con số bạn dùng lisp tính ra khác, mà mình dùng lisp tính ra khác nhỉ. (trong vòng tròn vàng của 6 cái nút dùng lisp này ấy)  :)


  8. Nova làm tự động hết bạn ah. Ban đầu nó lựa chọn toàn bộ text cao độ. Sau đó nó vẽ lưới tam giác.
    Rồi có 1 lệnh để tra cao độ tại điểm bất kỳ.
    Điểm chèn mình nghĩ nếu có khác nhau thì chỉ sai khác kết quả 1-2cm thôi.
    Nhưng hiện tại lisp có 1 cách tính sai như mình đã miêu tả ở trên đó, là kết quả ra nhỏ hơn 5 trong khi 3 text gần nhất đều lớn hơn 5.  :) 
    Hiện tượng ed text bằng thủ công ko có bị nhầm số như bạn nói đâu nhé. hì hì. 


  9. Bản thân nova cũng là vẽ ra lưới tam giác rồi nội suy những điểm ở trong lưới thôi. Nova có 1 lệnh riêng để tính cao độ tại 1 điểm bất kỳ, kết quả được thể hiện ở dòng comment. Sau đó mình điền lại thông số đó vào text màu xanh bằng cách ed thôi.
    Mình nghĩ cách mà nova và lisp nội suy chắc là cơ bản tương tự nhau, vì đều là tạo lưới tam giác cả.
    Tuy nhiên so 2 kết quả với những cao độ xung quanh thì nova vẫn chuẩn hơn.
    Ví như ví dụ trên có nói ấy, 1 điểm nằm trong 1 tam giác 3 cao độ đều lớn hơn 5.00. Nova cho kết quả là lớn hơn 5 và nhỏ hơn cao độ 3 điểm mốc đó.
    Nhưng lisp cho cao độ nhỏ hơn 5 là thấy điểm này hơi vô lý rồi.  :) 
    Nếu kết quả chênh lệch nhau 1-2cm thì oki, nhưng có những kết quả chênh lớn tới 20-30cm.
    Bạn nghiên cứu tiếp giúp mình được chứ tot77. hì hì. 
     


  10. Lỗi thì có dạng báo thế này, nhưng cũng thỉnh thoảng mới bị. 
    Select objects:  ; error: bad argument type: 2D/3D point: nil
    Còn về thuật nội suy, so với nova thì độ chính xác là 95% rồi bạn. Có đôi ba vị trí, độ sai khác kết quả của 2 phương pháp nova và lisp là khá lớn, 20-30cm.
    Mình có file này, là cao độ đã tính thủ công từ nova, gửi bạn tham khảo để test khả năng nội suy của lisp
    https://www.mediafire.com/?nd6e50t04dubj2n
    Ko biết sao, load file bằng cadviet ko được, nên bạn sài tạm mediafire nhé  :)


  11. Theo mình hiểu thì khi chọn blog có sẵn thì nó sẽ nội suy tại điểm là tâm đường tròn của blog.
    Bạn có thể phát triển được lisp cao cấp hơn nữa là cho phép quét toàn bộ các blog đã có sẵn và tự ed số màu xanh thành kết quả nội suy tại tâm của đường tròn của mỗi blog ko?  :) . Được vậy thì chắc là công việc của mình từ 1 ngày xuống 1 phút. hì hì

×