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

Thaistreetz

Nhà quảng cáo
  • Số lượng nội dung

    905
  • Đã tham gia

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

  • Ngày trúng

    30

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


  1. Mình đang nghiên cứu vụ sắp xếp thứ tự bản vẽ khi in.

    Ban đầu thì nó bừa bộn lắm

    8hn8urmeyoef32kmvo30165.jpg

     

    Yêu cầu đặt ra là sắp xếp từ trên xuống dưới (cái này ưu tiên trước) rồi từ trái sang phải (ưu tiên sau)

     

    kết quả sẽ là thế này

    d480lxg0a4yw3j83eddn171.jpg

     

    Ae nào có phương án giải quyết giúp mình với nhé :undecided:

    Kiếm cái code dãn dòng text của bác GiaBach bạn sẽ tìm thấy thứ bạn cần


  2. Lệnh là FT, chỉnh thế nào tùy bạn. Mình đưa ra ý tưởng khác bạn 1 chút để dễ dùng hơn. ĐK dùng lisp này: tất cả các text tên tuyến phải được đặt ở layer TENTUYEN. bạn có thể tự sửa code sao cho phù hợp với cách đặt tên layer của bạn. sửa ở đây (8 . "TENTUYEN")

    (defun c:FT (/ DXF DCL_FT DCL_ID FILE_DCL HT LST PT0 PT1 PT2 SST TEMP_FT TENT)
    (vl-load-com)
    (setvar "cmdecho" 0)
    (defun DXF (code en) (cdr (assoc code (entget en))))
    (setq SST (acet-ss-to-list (ssget "x" '((0 . "TEXT") (8 . "TENTUYEN")))) LST '())
    (foreach SSn SST (if (not (member (dxf 1 SSn) LST)) (setq LST (append LST (list (dxf 1 SSn))))))
    (setq LST (acad_strlsort LST))
    (setq DCL_FT (list (strcat
    "ftuyen : dialog { label = \"Free lisp from Cadviet.com\";"
     " : column {"
     " : row { : list_box { key = \"ListT\"; edit_width = 95; height = "
    	(rtos (if (<= (1+ (length LST)) 40) (1+ (length LST)) 41)  2 0) ";}}"
     ": row { : button { key = \"cancel\"; label = \"Cancel and exit\"; is_default = true; is_cancel = true;}}"
     "}}" ))
    TEMP_FT (vl-filename-mktemp "FT.DCL")
    FILE_DCL (open TEMP_FT "W"))
    (foreach LL DCL_FT (write-line LL FILE_DCL))
    (close FILE_DCL)
    (setq DCL_ID (load_dialog TEMP_FT))
    (new_dialog "ftuyen" DCL_ID)
    (start_list "ListT")
    (mapcar 'add_list LST)
    (end_list)
    (action_tile "ListT" "(setq TenT (nth (fix (atof (get_tile \"ListT\"))) LST)) (done_dialog) ")
    (start_dialog) 
    (unload_dialog DCL_ID)
    (vl-file-delete TEMP_FT)
    (if TenT (progn
    (foreach SSn SST	(if (= (DXF 1 SSn) TenT) (setq PT0 (DXF 10 SSn) HT (DXF 40 SSn))))
    (setq PT1 (polar PT0 (* 0.25 pi) (* 40 HT)) PT2 (polar PT0 (* 1.25 pi) (* 40 HT)))
    (command "zoom" "w" PT1 PT2)
    (prompt (strcat "- " TenT"\n_Thaistreetz@gmail.com"))) (prompt " - cancel"))
    (princ)
    );end


  3. Xin chào a.e cadviet, mình có một bản vẽ mặt bằng thoát nước, trên bản vẽ có nhiều tuyến sắp xếp không có trật tự gì hết. mình muốn tìm một tuyến trên bản vẽ nhưng rất mất thời gian và khó tìm thấy mặ dù mình đã ẩn hết các Layer còn lại. Nhờ a.e viết hộ cho một lisp để tìm nhanh hơn, ví dụ mình tìm Tuyến 10-12 thì nhập 10-12 vào thì Tuyến 10-12 hiện giữa màn hình. Cảm ơn a.e trước nha.

     

    Bản vẽ: http://www.cadviet.com/upfiles/3/mat_bang_...ky_phuong_1.dwg

    Hồi truớc mình đã viết lisp này rồi mà giờ tìm hoài không thấy. chán thật


  4. xin hỏi các bạn mình bị lỗi như này : dùng lệnh layiso thì không hiện 1 minh layer cần giữ mà vẫn hiện các layer khác, mà các layer còn lại bị khoá hết,không hiểu bị lỗi làm sao luôn :undecided:

    (mà cái này mình dùng lisp cho cad 2010 64 bít mới thấy bị vậy )

    khi gõ layiso có lựa chọn setting. bạn gõ S để thiết lập lại


  5. Cảm ơn Thaistreetz đã hồi âm.

    Lệnh reverse thì Cad 2007 báo Unknown command "REVERSE". Press F1 for help. (Có lẽ nhầm chính tả tên lệnh)

    Còn Pedit thì chắc bạn nhớ nhầm thật.

    Xem lại dùm mình với. Cảm ơn 1 lần nữa.

    à, mình dùng cad2010, vừa test xong, cả 2 đều đúng. chắc lệnh này mới đuợc đưa vào.

    nếu không thì bạn dùng thằng này. Pline, spline rồi line, arc, circle, ellipse, text, hatch hay cả gradient fill nó xơi tất

    • Vote tăng 1

  6. Đây là ví dụ cho bạn nè

    (defun c:thu ()
     (setq pt1 (getpoint "\n nhap diem: "))
     (setq pt2 (getpoint "\n nhap diem: "))
     (setq pt3 (getpoint "\n nhap diem: "))
     (entmake(list(cons 0 "SPLINE")(cons 100 "AcDbEntity")(cons 8 "0")(cons 100 "AcDbSpline") (cons 70 24) (cons 71 3) (cons 72 8) (cons 73 4) (cons 74 2)(cons 11 pt1)(cons 11 pt2)(cons 11 pt3)))
     )

    Không biết kết quả như ý không bạn thử xem nếu được thì phát triển lên theo ý bạn nhé. Chúc bạn may mắn

    Nói thế này thì không ai hiểu đuợc.

    các đường Spline là loại đuờng đặc biệt đuợc biểu diễn bởi các hàm số toán học, mã 71 quy định bậc của hàm số dùng để vẽ.

    Các đường Spline được vẽ theo cách thông thường bằng hàm command được biểu diễn bởi 1 hàm số bậc 3.

    vẽ theo cách này thông thường ta nhận được 2 dạng đường Spline là spline đóng hoặc spline mở.

    mã 70 quy định điều này.

    1. đường spline đóng

    2. đường spline tuần hoàn

    mặc dù 2 giá trị trên là độc lập để quy định thuộc tính của spline nhưng theo cách vẽ thông thường thì ta luôn nhận được cả 2 giá trị trên khi vẽ spline đóng hoặc không nhận đc giá trị nào khi spline mở.

    4. đường spline hữu tỷ

    8. đường spline phẳng

    16. đường spline tuyến tính

    Vậy muốn vẽ spline phẳng và đóng bạn phải đưa vào giá trị là 11 (= 1+2+8) cho mã 70

    Số đỉnh của Spline do mã 74 quy định. mã 73 hình như tuân theo mã 74 (cái này mình không chắc lắm. kệ nó, mình để mặc đinh)


  7. Chương trình "phán" hết sức tuỳ tiện!

    Lý do:

    Số nguyên (integer) hợp lệ trong lisp phải nằm trong khoảng +2,147,483,647 đến -2,147,483,648

    Vượt ra ngoài khoảng đó, kết quả sẽ sai bét. Đây là lỗi overflow (tràn bộ nhớ). Cái computer sẽ không chịu trách nhiệm về việc này! Quả bóng trách nhiệm được đá sang cho programmer :leluoi: .Không riêng gì lisp, các ngôn ngữ lập trình khác cũng vậy thôi.

    Nếu thunhap dùng kiểu real -> chương trình sẽ "phán" chính xác.

    thiếu cả cái này nữa bác ợ (if (<= thunhap 0) (alert "Ông khai bố láo chi xiên") (progn .....


  8. Diễn đàn có thể giúp viết lisp đảo chiều đường polyline hay Lwpolyline không ạ?

    Tức là các điểm đầu thành các điểm cuối và ngược lại.

    Nếu có lệnh Cad có thể làm được yêu cầu này thì nhờ diễn đàn chỉ giúp.

    Xin cảm ơn!

    Lệnh Pe (pedit) làm được việc này (nếu mình nhớ không nhầm)

    không thì dùng lệnh reverse - lệnh này đảo chiều cả pline và spline

    • Vote tăng 1

  9. Sao bạn không viết thế này cho gọn:

    (action_tile "xxx" "(setq A (nth (atoi $value) ABC))")

    Để tiện cho việc copy - paste trong quá trình viết code điều khiển hộp thoại ý mà.

    giả sử hộp thoại của mình phức tạp 1 chút, có vài cái list và việc chọn 1 phần tử ở list này sẽ kéo theo sự thay đổi tự động của list khác. khi đó buộc phải dùng cách của mình nếu muốn lấy giá trị của key khác. và cách viết của mình cũng tiện để copy cho những trường hợp này. hề hề

    • Vote tăng 1

  10. Tiếp theo cho đệ hỏi thêm vấn đề này

     

    Biểu diễn LIST (danh sách sổ xuống)

    DCL code:

    ...

    :popup_list {

    key = "abc";

    label = "database";

    fixed_width_font = true;

    }

    ...

     

    LISP code:

    ...

    (setq ABC (list "1" "2" "3" "4" "5"))

    (start_list "abc" 3)

    (end_list)

    ...

     

    Mong các huynh đài giúp đệ viết dùm liên kết: người dùng --> Dialog --> LISP, sao cho:

    Khi người dùng chọn giá trị tại List sổ xuống database của Dialog (ví dụ bằng 2 chẳng hạn (hoặc bằng 1; 3; 4; 5)) => Gán giá trị này (ABC=2) cho một biến A (ví dụ vậy) để sử dụng cho các mục đích tiếp theo!!!

     

    Đệ xin đa tạ!

    Giả sử List_box hoặc popup_list của bạn có key là "XXX". muốn lấy giá trị của 1 phần tử bất kỳ trong list ABC khi nguời dùng kích chuột vào List_box bạn dùng hàm action_tile

    (action_tile "xxx" "(setq A (nth (fix (atof (get_tile "xxx")))ABC))")

    Hậu tạ mình đi :leluoi:


  11. Chào bạn khaosat2009,

    Bạn không đọc các bài póst trước hay sao??? Như đã nói với mtext do có nhiều kiểu định dạng khác nhau nên rất khó để làm một lisp cho mọi trường hợp, chỉ có thể làm cho một trường hợp cụ thể rồi từ đó các bạn tự hiệu chỉnh cho nó phù hợp với cái font, kiểu,,,, mtext mà các bạn sử dụng. Bạn muốn làm thì phải post một cái bản vẽ cụ thể lên chứ, nói chung chung vậy thì chịu chết. Nhớ là phải post đúng cái bạn đang cần để đỡ mất công chỉnh sửa lại lisp và ít nhất bạn cũng có cái dùng và có thời gian để ngâm cứu chỉnh sửa sau.

    Mình nhắc lại là việc chỉnh sửa về sau thì tự các bạn phải cố gắng chứ đừng ỷ lại vì mọi người trên diễn đàn không phải lúc nào cũng giúp các bạn được ngay đâu, mà công việc của các bạn thì không ai làm hộ được. Nếu có gì khó khăn trong lúc chỉnh sửa hãy post lên mọi người có thể góp ý thôi, rồi các bạn tự làm, Có vậy các bạn mới chủ động được trong công việc của mình và mới đáp ứng được yêu cầu của công việc. Mong các bạn hãy cố gắng hơn.

    Bác nhắc lại với ông Khaosat2009 này làm chi cho mệt bác ơi. Từ hồi em chân uớt chân khô đến diễn đàn này đã đuợc gần 2 năm rồi mà ông ấy vẫn vậy. Vẫn cái thói ỷ lại ấy, vẫn những yêu cầu nghe nhiều đến fát nhàm ấy, cũng đã làm khối người mất hết kiên nhẫn rùi <_<

    • Vote tăng 1

  12. Thank bạn! Nhưng với nhiều đối tượng phức tạp thì dùng command để tạo đối tượng mình thấy ngắn hơn. Với lại các thông số dxf để tạo đối tượng cần bao nhiêu thì đủ và dùng những mã nào mình cũng không nắm rõ. Ví dụ như tạo text mình dùng các mã 0, 1, 10, 40, 72 để taok mà nó không ra.

    Vẽ đối tượng bằng hàm command luôn phải chịu ảnh hưởng rất nhiều từ các biến hệ thống. Biến osmode là ví dụ điển hình. thêm nữa là hàm command tạo đối tượng tương đối chậm, và nếu với 1 lisp tạo ra 1 số lượng lớn đối tượng từ hàm command, khi undo lại thì ngồi chờ cổ dài bằng hươu luôn. <_<

    Với text thì bạn sử dụng hàm này.

    (defun MakeText (point string Height Ang justify Style Layer Color xdata / Lst)
    (setq Lst (list '(0 . "TEXT")
    								(cons 8 (if Layer Layer (getvar "Clayer")))
    								(cons 62 (if Color Color 256))
    								(cons 10 point)
    								(cons 40 Height)
    								(cons 1 string)
    								(cons 50 (if Ang (* pi (/ Ang 180)) 0))
    								(cons 7 (if Style Style (getvar "Textstyle")))
    								(cons -3 (if xdata (list xdata) nil)))
    			justify (strcase justify))
    (cond ((= 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)))))
    			((= justify "TL") (setq Lst (append Lst (list (cons 72 0) (cons 11 point) (cons 73 3)))))
    			((= justify "TC") (setq Lst (append Lst (list (cons 72 1) (cons 11 point) (cons 73 3)))))
    			((= justify "TR") (setq Lst (append Lst (list (cons 72 2) (cons 11 point) (cons 73 3)))))	
    			((= justify "ML") (setq Lst (append Lst (list (cons 72 0) (cons 11 point) (cons 73 2)))))
    			((= justify "MC") (setq Lst (append Lst (list (cons 72 1) (cons 11 point) (cons 73 2)))))
    			((= justify "MR") (setq Lst (append Lst (list (cons 72 2) (cons 11 point) (cons 73 2)))))
    			((= justify "BL") (setq Lst (append Lst (list (cons 72 0) (cons 11 point) (cons 73 1)))))
    			((= justify "BC") (setq Lst (append Lst (list (cons 72 1) (cons 11 point) (cons 73 1)))))
    			((= justify "BR") (setq Lst (append Lst (list (cons 72 2) (cons 11 point) (cons 73 1))))))
    (entmake Lst)
    (entlast))

    PS: ngắn hay dài, điều đó tùy vào nhu cầu và thói quen của từng người khi viết code thôi. chẳng hạn với code trên, với nhu cầu thông thường thì có thể rút ngắn số lượng biến của nó còn lại 3 biến: point, string, và height

    • Vote tăng 2

  13. Một số hàm con của mình yêu cầu số lượng tham số tương đối lớn (khoảng 7-10 tham số) nên việc nhớ được thứ tự của từng tham số, định dạng của từng tham số là rất khó. vì thế mỗi lần dùng đến lại phải mở file thư viện ra để tra.

    thay vì phải làm như thế mình muốn đưa các thông báo lỗi kèm theo hướng dẫn khai báo tham số khi khai báo tham số sai vào hàm thông báo lỗi *error* của cad, nhưng chưa biết phải làm cách nào

    các bác chạy thử hàm này khi không khai báo tham số và xem thông báo trả về sẽ hiểu đc ý của mình: (ACET-SS-DRAG-MOVE)


  14. Xin lỗi bạn còn thiếu cái "thep" (command "layer" "n" "thep" "lw" "0.5" "thep" "c" "1" "thep" "L" "Continuous" "thep" ""))

    Các bạn nên xây dựng các hàm tạo đối tuợng như thế này để tránh những rắc rối mà hàm command tạo ra.

    (defun MakeLayer (name color linetype lineWeight plot xdata)
    (entmake (list '(0 . "LAYER")
    	 (cons 100 "AcDbSymbolTableRecord")
    	 (cons 100 "AcDbLayerTableRecord")
    	 (cons 2 name)
    	 (cons 70 0)
    	 (cons 62 (if color color 7))
    	 (cons 6 (if linetype linetype "Continuous"))
    	 (cons 290 (if plot 1 0))
    	 (cons 370 (if lineWeight (fix (* 100 lineWeight)) -3))
    	 (cons -3 (if xdata (list xdata) nil))))
    (tblobjname "layer" name))

    • Vote tăng 1

  15. Đúng là đơn giản, nhưng việc thực hiện undo cũng phức tạp lắm bác Thaistreetz à, vì mình phải ngắt đoạn chương trình, undo ở các đoạn chương trình phải thêm hàm điều kiện undo. Sau đó lại phải xoá các biến lôi các biến từ đoạn trước ghép vào. Mình nghĩ tới đó là rối cả đầu rồi. Mà muốn undo tới đoạn đầu của chương trình thì số lượng biến phải xoá rất nhiều. Để thực hiện được phải xắp xếp lsp 1 cách hợp lý mới xử lý được hết. Khi nào bạn thực hiện được post 1 đoạn lên cho mình tham khảo với nhé. THANKS

    Thao tác undo trong quá trình chạy lisp tuỳ thuộc vào tính chất và cách làm việc của mỗi lisp. khi đó ta dựa vào các thao tác mà lisp tuơng tác với nguời dùng mà đặt các điểm undo mark cho hợp lý và dễ sử dụng thôi.

    Đây là đoạn code để thực hiện việc undo trong quá trình pick lần luợt các điểm. khi pick sai ta gõ u để pick lại điểm đó.

    (setq k 0)

    (while

    (progn

    (initget 128 "u")

    (setq TD0 (getpoint (strcat"\n Pick diem thu "(rtos (setq k (1+ k)) 2 0) " : "))))

    (if (= TD0 "u") (vl-cmdf "undo" "Back") TD0)

    );progn

    (if (/= TD0 "u")

    (progn

    (vl-cmdf "undo" "mark")

    ...... Các hàm cần thực hiện.....

    );progn

    (progn

    (setq k (- k 2)

    ..... Trả lại giá trị các biến nếu có tại vòng lặp trước .....

    );progn

    );if

    );while

    Chú ý là đầu lisp nên khai báo điểm undo begin và cuối lisp điểm undo end để sau khi chạy lệnh xong các điểm undo mark được loại bỏ.

    • Vote tăng 1

  16. Chào buổi sáng :leluoi:

    (defun c:cbs(/ p);Chao buoi sang
     (initget 1 "c")
     (setq p (getpoint "Pick point or Press C to say good morning :"))
     (if (= p "c")
       (alert "Chao buoi sang - Good morning") ;user press C
       (alert (vl-princ-to-string p));user pick point
     )
    )
    

    Haha, Chào buổi sáng anh Tue_NV. Thật là đơn giản đến bất ngờ :cheers:

    Truớc đến giờ em cứ nghĩ initget chỉ kiểm soát các hàm getreal, getint và getstring thôi. giờ đọc lại mới biết


  17. Đánh vật với nó cả buổi tối mà không ra. Có lẽ không thể xây dựng được 1 cách giải quyết tổng quát cho mọi trường hợp.

    Giờ mình đưa ra bài toán cụ thể hơn. Nhờ các bác xây dựng giúp mình 1 hàm con có chức năng lấy tọa độ 1 điểm với điều kiện rẽ nhánh: Nếu pick chuột để chọn điểm hàm sẽ trả về tọa độ của điểm đó, nếu thay vì pick chuột ta gõ 1 phím nào đó thì hàm thực hiện 1 công việc khác. (cụ thể ở đây nếu gõ phím U hàm sẽ thực hiện lệnh Undo)

    Mình đã thử dùng hàm grread cho trường hợp này nhưng thất bại vì hàm grread không cho bắt điểm. Rất nhiều lệnh của cad cho phép làm điều này nên mình tin chắc là có thể làm được với lisp bằng cách nào đó. :leluoi: :cheers: :s_big:


  18. Mình thấy đa số các lệnh của cad đều cho phép undo lại 1 buớc nào đó ngay trong quá trình chạy lệnh, nghĩa là lệnh vẫn chưa kết thúc.

    Ví dụ khi vẽ 1 pline, nếu ta pick sai 1 điểm nào đó thì có thể undo để loại bỏ điểm vừa pick và lệnh vẫn tiếp tục đuợc thực hiện

    Làm cách nào để thực hiện đuợc điều này? ĐK là không dùng hàm grread nhé, hàm này tạo ra những bất tiện nhất định khi áp dụng cho truờng hợp này


  19. Các bác ơi giờ muốn đóng gói đống lisp với menu và DCL thành một file cài đặt (ko biết diễn đạt đúng ko?) thì làm thế nào được ah. Em thấy nhìn cho nó có vẻ Pro hơn thôi ah

    ah, mà cái phần viết DCL của Visual lisp Editor của Cad nó ko tự căn chỉnh như khi viết Lisp phải ko ah?

    Muốn đóng gói LSP và DCL thì làm đuợc bằng cách gói chung chúng lại thành VLX. Hoặc có thể viết luôn code DCL vào chung 1 file LSP. Còn menu thì chẳng bao giờ mình dùng đến nó cả nên không bít <_<

    Visual lisp Editor có hỗ trợ code DCL. khi tạo new file bạn hãy save nó với định dạng DCL trước khi viết code. Ngoài ra nó còn hỗ trợ xem preview các thành phàn của hộp thoại. Vào Tool -> Interface tool

    • Vote tăng 1

  20. Ừm mình định viết 1 chương trình nhỏ sử dụng nhiều biến nhưng biến không thể bị triệt tiêu, và sợ khi đang dùng chương trình thì sử dụng lsp khác dẫn đến thêm biến bất hợp lý ghi đè vào làm cho chương trình mình chạy là sai. Mình cũng nghĩ sẽ ghi nháp ra file txt nhưng có một vấn đề đối với các biến đơn thì việc đó rất hiệu quả nhưng đối với các biến là list thì mình vẫn nghĩ chưa thông.

    VD file txt có dạng tên biến giá trị

    a 12

    b h15

    c là list thì mình vẫn chưa nghĩ ra cách ghi và gọi lại biến này.

    Mong các bạn chỉ thêm cho mình hiểu rõ hơn.

    @Thaistreets mình đang dùng vlide để viết mà, cảm ơn bạn góp ý.

    Giả sử mình muốn lưu các biến A giá trị là (list X Y..) vào 1 file tạm nào đó tên là tempfile.xxx chẳng hạn.

    - Đầu tiên ta xác định luôn là nó sẽ đc ghi vào 1 thư mục support nào đó của cad để dễ dàng sử dụng nó. ở đây mình lấy thư mục có chứa file acad.dcl nhé

    (setq tempfile (open (strcat (acet-filename-directory (findfile "acad.dcl")) "tempfile.xxx") "W") i 0)

    - giờ ta sẽ ghi vào tempfile.xxx nội dung như sau: (setq A (list X Y ...))

    (princ "(setq A (list \n" tempfile)

    (repeat (length A)

    (write-line (strcat "\""(nth i A)"\"") tempfile)

    (setq i (1+ i)))

    (close tempfile)

    - OK, đã xong cái file tạm. giờ chỉ việc load nội dung của nó vào lisp. vì file này đã được tạo ra trong thư mục support của cad lên bạn chỉ cần sử dụng 1 câu thần chú đơn giản là bạn đã có cái bạn cần

    (if (setq tempfile.xxx (findfile "tempfile.xxx")) (load tempfile.xxx) (prompt "Khong tim thay file tempfile.xxx"))

    • Vote tăng 1

  21. Mình muốn tạo một file nháp các biến của 1 lsp, để tránh các lsp chạy chồng chéo sẽ bị đè biến của nhau, không biết bạn nào biết chỉ dùm mình một chút.

    VD: Mình có 1 lsp sử dụng biến a b c d

    và 1 lsp nào đó cũng sử dụng chung biến a nhưng không triệt tiêu khi kết thúc lsp. Nên như thế khi chạy sẽ gây ra lỗi chương trình.

    Giờ mình muốn tạo 1 file nháp của lsp. Tức khi chạy lisp nó sẽ nháp trong file đấy và các biến không triệt tiêu sau khi kết thúc lệnh chỉ triệt tiêu khi thoát khỏi Cad thôi.

    Liệu có được không các bạn?

    Thì cứ làm như những gì bạn đã nghĩ vậy. Các biến sẽ đuợc lưu vào 1 file text nào đó trước khi kết thúc lệnh. tất nhiên bạn vẫn fải giải phóng biến ra khỏi bộ nhớ khi kết thúc lệnh. khi gọi lệnh hãy thêm đoạn code đọc nội dung của file text này. cách này có thể giữ được giá trị của biến cho các phiên làm việc sau mỗi khi bật cad

    VD biến a của bạn. có thể viết 1 file text có nội dung (setq a x b Y d Z....) vào 1 file text nào đó rồi đọc file này mỗi khi lệnh đc goi

    Cách khác: bạn có thể gộp chung tất cả các biến cần cần thiết của 1 lệnh vào 1 list

    VD: (setq Lst (list a b c d)) và định nghĩa duy nhất biến Lst là biến toàn cục và giải phóng các biến a b c d. lấy giá trị a từ lst như thế nào thì chắc bạn biết rồi

    Cách khác nữa: Hãy viết code làm sao để tránh việc tự đưa mình vào thế khù khoằm như trên (Vlide cung cấp cho bạn công cụ project rất hữu dụng để quản lý các lisp của bạn) :iluvyousmiley:

    • Vote tăng 1

  22. hoaletrang có sử dụng lệnh CTK (copy các đối tượng theo trắc ngang) trong nova chưa? Mình nghĩ nên viết lisp này theo cách mà nova làm. Việc thao tác với các đối tượng nova nên tận dụng cơ sở dữ liệu mở rộng của chúng, sẽ dễ lập trình hơn nhiều bạn ạ

×