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

thanhduan2407

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

    1175
  • Đã tham gia

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

  • Ngày trúng

    28

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


  1. Vào lúc 17/7/2019 tại 15:24, united đã nói:

    Không biết anh @thanhduan2407 còn ở đây không?

    Em xin được nhờ anh (hoặc bất kỳ anh nào) sửa giúp em 1 chút lisp VTL2 để "đối tượng thứ hai" không phải là 1 đường mà có thể là nhiều đường.

    Trên diễn đàn có 1 lisp làm được tương tự (lisp Batter) nhưng với các đối tượng dài (hoặc rải dày) thì nó làm việc rất chậm.

    Về tác dụng thì như hình: Chỉ cần chọn đối tượng thứ nhất (1) và chọn nhóm đối tượng thứ 2 (2&3) rồi Enter để ra được kết quả như hình. Còn với lisp VTL2 thì phải thực hiện rải 2 lần và xóa bớt đối tượng thừa, hoặc phải Break đối tượng (1) thành các đoạn nhỏ.

    PS: hình chỉ là minh họa chứ em thường rải nhiều đối tượng khá phức tạp nên rất mất thời gian.

    - Thêm 1 điều nữa là lisp này có nhược điểm là không chạy liên tục, mỗi lần rải lại phải thực hiện lệnh từ đầu, không như lisp #dưới em up.

    Capture.PNG

    Bạn nhờ người khác viết lisp tức là chiếm dụng thời gian. Bạn nên trả phí cho công việc này. Khởi điểm ra giá 300k.

    • Like 2

  2. Xin phép em viết lisp này! Không biết như vậy đã hoàn thiện chưa ạ! Mong các bác chỉ giáo!

    (vl-load-com)
    (defun C:DUAN (/ ELAST LOOP LTSOBJ  PT1 PT2 SSA)
      (defun *error* (msg)
        (if	Olmode
          (setvar 'osmode Olmode)
        )
        (if	(not (member msg '("*BREAK,*CANCEL*,*EXIT*")))
          (princ (strcat "\nError: " msg))
        )
        (princ)
      )
      (setq Olmode (getvar "OSMODE"))
      (setvar 'CMDECHO 0)
      (Prompt
        "\nQu\U+00E9t ch\U+1ECDn \U+0111\U+1ED1i t\U+01B0\U+1EE3ng \U+0111\U+1EC3 copy v\U+00E0 xoay:"
      )
      (setq ssa (ssget))
      (setq Loop T)
      (setq pt1 (getpoint "\nCh\U+1ECDn \U+0111i\U+1EC3m chu\U+1EA9n: "))
      (while Loop
        (setq pt2 (getpoint pt1 "\nCh\U+1ECDn \U+0111i\U+1EC3m \U+0111\U+1EB7t: "))
        (cond
          (T
           (if pt2
    	 (progn
    	   (setq Elast (entlast))
    	   (command "copy" ssa "" pt1 pt2 )
    	   (setq LtsObj (GetNewEnts Elast))
    	   (command "rotate" (CV:List-to-ss LtsObj) "" pt2 pause)
    	 )
    	 (setq Loop nil)
           )
          )
        )
      )
      (setvar 'OSMODE Olmode)
      (princ)
    )
    (defun CV:List-to-ss (lst / ss)
      (setq ss (ssadd))
      (foreach item	lst
        (or	(= (type item) 'Ename)
    	(setq item (vlax-vla-object->ename item))
        )
        (setq ss (ssadd item ss))
      )
      ss
    )
    
    (defun GetNewEnts (ename / new)
      (while (setq ename (entnext ename))
        (if	(entget ename)
          (setq new (cons ename new))
        )
      )
      new
    )
     ;|«Visual LISP© Format Options»
    (200 2 60 2 nil "end of " 80 9 0 0 0 T T T T)
    ;*** DO NOT add text below the comment! ***|;

     

    • Vote tăng 1

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

    Lỗi sao được mà lỗi Duan ơi.

    Thử thay dòng này vào dòng của ndtnv xem:

     

    • cadvietlisp.lsp
      lisp help
    •  
    
    
    (setq LtsZichZac ((eval (read(strcat "SortPoint_" style))) x y))
    
    

     

    Sorry bác Doan Van Ha. Cháu nhầm với phía trên khi biến chưa xác định. Lúc này là hàm đã xác định rồi.

    11 phút trước, ngokiet đã nói:

    Mình giải thích cho bạn 

    - Hàm eval trả về giá trị biến.

    - Hàm read đọc tên biến.

    Tuy nhiên mình cảm thấy nếu bác viết lại hàm sortpoint thành 1 hàm có các trường hợp thì hay hơn vì bác cũng phải làm 4 hàm tương tự nhau. Mình viết như vậy để bác có thể dùng hàm như biến, biến như hàm thì linh động hơn.

    Mình share cho bạn hàm sort 2 chiều theo 8 trường hợp luôn

    • cadvietlisp.lsp
      lisp help
    •  
    
    (defun sortx(s1 st / f1 f2 f3 f4)
      (mapcar 'set '(f1 f2 f3 f4)
    	  (mapcar 'eval
    		  (nth st '((cadr car > >)
    			    (cadr car > <)
    			    (cadr car < <)
    			    (cadr car < >)              
    			    (car cadr > >)
    			    (car cadr > <)
    			    (car cadr < <)
    			    (car cadr < >)))))
      (vl-sort s1 '(lambda(x y) (if (equal  (f1 x) (f1 y) 0.1)
    			      (f4 (f2 x) (f2 y))
    			      (f3 (f1 x) (f1 y))))))

    Bác có thể thay đổi theo ý mình và chỉnh sửa cũng dễ.

    St : Là style của bạn (Bạn có thể dùng là (vl-position style '("PTTD" "TPTD" ....))

    Mình nghĩ nên dùng style là số thì dễ hơn.

    Đây là mình sử dụng các biến fx là các hàm tương ứng khi sort.

    Cảm ơn bác! Em vội quá chưa test, cứ nghĩ ở câu hỏi hôm qua. Cảm ơn bác cho ví dụ dễ hiểu và dễ học hỏi.


  4. 37 phút trước, ndtnv đã nói:

    Dòng đó là của bạn ngokiet

    Theo cách của tôi là:

    (setq LtsZichZac (eval (read (strcat "(SortPoint_" style " LtsPoint kccum)" ))))

     

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

    1 ví dụ viết theo cách viết cho gọn của anh ndtnv để thanhduan dễ hiểu:

    
    
    (defun C:HA()
     (setq x 1 y 2)
     (initget "TDTP DTTP TPDT PTDT")
     (setq style (getkword "\nStyle [TDTP/DTTP/TPDT/PTDT]: "))
     (setq LstZickZac (eval (read (strcat "(SortPoint_" style " x y " ")")))))
    (defun SortPoint_TDTP(x y)
     (+ x y))
    (defun SortPoint_DTTP(x y)
     (- x y))
    (defun SortPoint_TPDT(x y)
     (* x y))
    (defun SortPoint_PTDT(x y)
     (/ x y))
    
    

    Cảm ơn anh @ndtnv và bác @Doan Van Ha nhiều! 

    Thiếu "(" và ")" là cái em/cháu vướng.


  5. 1 giờ} trướ}c, ndtnv đã nói:

    Bạn test xem

    (setq LtsZichZac ((read(strcat “SortPoint_” style)) LtsPoint kccum)) 

    có chạy được không?

    Cách lập trình của tôi là kết hợp 4 hàm SortPoint thay cho kết hợp 4 lệnh gọi,   trên đó chỉ là VD kết hợp 4 lệnh gọi

    Có thể có cách kết hợp khác hay hơn, nếu bạn nào biết xin chia sẻ.

    Cảm ơn bác đã quan tâm đến bài viết của em. Em test của bác không được bác ạ!

    Nó lỗi tại dòng của bác. 


  6. Cháu cảm ơn bác @Doan Van Ha! và bác @ngokiet!

    (cond
    	     ((= Style "TDTP")
    	      (setq LtsZichZac (SortPoint_TDTP LtsPoint kccum))
    	     )
    	     ((= Style "DTTP")
    	      (setq LtsZichZac (SortPoint_DTTP LtsPoint kccum))
    	     )
    	     ((= Style "TPDT")
    	      (setq LtsZichZac (SortPoint_TPDT LtsPoint kccum))
    	     )
    	     ((= Style "PTDT")
    	      (setq LtsZichZac (SortPoint_PTDT LtsPoint kccum))
    	     )
    	   )

    Đoạn này lặp lại 4 lần. Dài 1 chút nhưng giải quyết được vấn đề rồi ạ.


  7. 1 giờ} trướ}c, Botot đã nói:

    Không hiểu ý của bạn, đọc câu này mình hiểu là ai đó muốn viết lisp có phí trên CV phải xin phép bạn trước, và “kiếm tiền trên công sức của ngkhac là ko đc” tức là bạn bị ng khác lấy source của bạn đem bán hả?

    ps: tui không phải “bác quân”, chỉ thấy câu nói của bạn khá là lạ!

    Tức là lisp này mình viết và tặng anh em trên diễn đàn Trắc Địa, cả kho lisp của mình luôn. Mình biết bạn Quân lấy về và phát triển thêm rồi bán. Thậm chí còn đăng ký bản quyền. Có rất nhiều người đã phản ánh tới mình nhưng mình không bận tâm lắm.

    Tác giả viết và bán thì không sao nhưng không phải của mình thì đừng bán.

    • Like 1

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

    Nó!

     

    
    (defun C:AB()
     (initget "TDTP DTTP TPDT PTDT")
     (setq a (getkword (strcat "\nB\U+1EA1n mu\U+1ED1n \U+0111\U+00E1nh s\U+1ED1 hi\U+1EC7u theo ki\U+1EC3u n\U+00E0o?[TDTP - Tr\U+00EAn D\U+01B0\U+1EDBi - Tr\U+00E1i Ph\U+1EA3i /
                   DTTP - D\U+01B0\U+1EDBi Tr\U+00EAn - Tr\U+00E1i Ph\U+1EA3i /
                   TPDT - Tr\U+00E1i ?Ph\U+1EA?3i - D\U+01B0\U+1EDBi Tr\U+00EAn /
                   PTDT - Ph\U+1EA3i Tr\U+00E1i - ?D\U+01B0\U+1EDB?i Tr\U+00EAn]?")))
     (cond
      ((= a "TDTP") (Ham1 3 5))               
      ((= a "DTTP") (Ham2 3 5))               
      ((= a "TPDT") (Ham3 3 5))               
      ((= a "PTDT") (Ham4 3 5))))
    (defun Ham1 (x1 x2)
     (+ x1 x2))
    (defun Ham2 (x1 x2)
     (- x1 x2))
    
    

     

    Dạ, cái x1 và x2 chưa xác định bác ạ!

    Cháu đang muốn xác định hàm phù hợp với lựa chọn bác ạ! Cháu không muốn lặp lại hàm.

     


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

    Em hiện tại đang bị vấn đề này, mong cao nhân chỉ giáo giúp em. Em hơi yếu công nghệ, mong được chỉ giáo cụ thể ạ. Em cảm ơn nhiều nhiều.

    Bạn copy dòng này rồi Paste vào dòng Command. Back ngược lại tìm đến Folder "Plot Styles".  Ở trên có đường link download file monochrome.ctb rồi. Copy dán vào đó là dc.

    (startapp "explorer" (vl-filename-directory (getvar 'FONTMAP)))


  10. Các bác cho em hỏi 1 chút!

    Em có các hàm:

    defun ham1(x1 x2 / ); defun ham2(x1 x2 / ); defun ham3(x1 x2 / ); defun ham4(x1 x2 / ),....

    Em đang làm 1 cái tuỳ chọn.

      (if (null *Style*)
        (setq *Style* "TDTP")
      )
      (initget "TDTP DTTP TPDT PTDT")
      (if (setq Style (getkword
                   (strcat "\nB\U+1EA1n mu\U+1ED1n \U+0111\U+00E1nh s\U+1ED1 hi\U+1EC7u theo ki\U+1EC3u n\U+00E0o?
                   [TDTP - Tr\U+00EAn D\U+01B0\U+1EDBi - Tr\U+00E1i Ph\U+1EA3i /
                   DTTP - D\U+01B0\U+1EDBi Tr\U+00EAn - Tr\U+00E1i Ph\U+1EA3i /
                   TPDT - Tr\U+00E1i Ph\U+1EA3i - D\U+01B0\U+1EDBi Tr\U+00EAn /
                   PTDT - Ph\U+1EA3i Tr\U+00E1i - D\U+01B0\U+1EDBi Tr\U+00EAn]
                   <"
                       *Style*
                       ">: "
                   )
                 )
          )
        (setq *Style* Style)
      )

    Em muốn làm cái tuỳ chọn như này nhưng sẽ là sai. Nhờ các bác chỉ dẫn dùm với ạ

    (cond
        ((= Style "TDTP")
         (setq Choose Ham1)
        )
        ((= Style "DTTP")
         (setq Choose Ham2)
        )
        ((= Style "TPDT")
         (setq Choose Ham3)
        )
        ((= Style "PTDT")
         (setq Choose Ham4)
        )
      )


  11. 14 giờ trước, ngokiet đã nói:

    Hình như nó hỏi kiểu báo cho bạn biết có chương trình muốn sửa đổi file hay không?

    Cái này dùng để bảo vệ dữ liệu chống thay đổi trái phép của windows. Muốn ko hỏi thì phải tắt Uac đi.

    Tìm hiểu thêm về UAC trên Google nhé.

    Cảm ơn bác nhiều!

    Em sẽ nghiên cứu thêm ít nữa. Chưa thấy có tác dụng dù em làm thủ công nó vẫn hỏi.


  12. Các bác cho em hỏi 1 chút ạ!

    Em dùng Win 10, 64 bit. Em dùng lisp để rename hoặc copy ở Ổ C: mà các file không có động tĩnh gì?

    Về cấu trúc  vl-file-rename và vl-file-copy đều rất ổn. Phải chăng cần can thiệp về Permission cho phép tạo file hoặc đổi tên file?

    Bản thân em rename bằng tay, sau khi kết thúc thì máy tính cũng hỏi Yes or No.

    Mong nhờ các bác cho em sáng dạ thêm chút ạ. Hic hic

     

×