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

Danh Cong

Moderator
  • Số lượng nội dung

    1387
  • Đã tham gia

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

  • Ngày trúng

    117

Bài đăng được đăng bởi Danh Cong


  1. 25 phút trước, TrNghia.Do đã nói:

    Hix...Bác nói nặng lời quá. Nếu biết viết thì mình đã chả dám phiền bạn ý giúp :(

    Có tinh thần học hỏi là tốt, diễn đàn rất khuyến khích điều này. Tuy nhiên thì bạn nên học 1 cách căn bản , chứ không nên "ăn xổi ở thì" không gốc cũng chẳng ngọn. Điều đó làm người trả lời mất nhiều thời gian , và không hứng thú trả lời cho lắm.

    Vậy căn bản học ở đâu?, Bạn sẽ cần 1 cuốn sách : Lên diễn đàn hoặc Google gõ :" Lập trình thiết kế với Auto Lisp và VisuaLisp " của  tác giả Nguyễn Hữu Lộc. Sách này hướng dẫn dễ hiểu và căn bản. 

    Mong bạn sẽ có những câu hỏi chọn lọc hơn.


  2. 1: Không phải Ctrl+F1, mà chỉ là Ctrl+1.

    2. Cad tôi dùng 2012 không có tính năng này, diễn đàn cũng có nói vấn đề này rồi. Bạn muốn thay đổi thì gõ OP ( Option) -->  Selection, rồi nghịch ngợm tí là ra ( Chỉnh chỗ Selection Mode hoặc Selection Methor ). Không rõ nữa thì Google dịch là được. 


  3. 17 giờ trước, doductiep đã nói:

    Cho em hỏi về hàm vlax-curve-getPointAtDist  (tìm điểm trên Cuver khi biết khoảng cách):

     

    Các bác hiểu như thế nào thế nhỉ ^^, em thì suy luận theo nội dung này của chủ thớt:

    (defun c:CONG ( / DIS DISOBJ OBJECT PARAM PT1 PT2)
      (vl-load-com)
      (setq object (car (entsel "\nPick Polyline: "))
        pt1 (getpoint "\nPick point:")
        dis (getreal "\nNhap khoang cach: "))
    
      (setq param (vlax-curve-getparamatpoint object pt1))
      (if     (= param 0)
            (progn     (setq pt2 (vlax-curve-getpointatdist object dis))
          );end progn 1
            (progn    (setq disobj (vlax-curve-getDistAtParam object (vlax-curve-getEndParam object))
                  pt2 (vlax-curve-getpointatdist object (- disobj dis)))
          );end progn 2
     )
      (command "point" "non" pt2)
      (princ))

    ( Mà các anh cho em hỏi, làm sao bài đăng của em nó có màu mè, dễ nhìn code như của các bác vậy ?, em đăng cả file .lsp mà nó có mỗi đường dẫn thôi. )

    Cong.lsp

    • Vote tăng 1

  4. 2 giờ trước, mmxiv07 đã nói:

    ko có mẫu virus mình đã tự tạo. CAD mặc định lưu macro thành các file riêng (lsp, fas, dvb,...) nhưng cũng có cho set lại để nhúng trực tiếp macro vào file DWG, bên trong file DWG cũng có nhiều chỗ để nhúng các malicious content (phải tự phân tích cấu trúc và xử lý ở cấp binary - cấp hacker biết lập trình với binary:).

     

    AutoDesk ko muốn hacker đụng chạm đến DWG nên mã hóa rất ác liệt và ko public tài liệu mô tả, mỗi thành phần trong file mã theo 1 kiểu - rồi cứ sau vài năm lại đổi file format structure! Hiện tại mình đã decode được các version từ 2004 đến 2018, ngoại trừ 2007 :)

     

    #mmxiv07,

    Mình ko tìm hiểu sâu trong cấu trúc dữ liệu Autocad, nên ko giúp gì cho bạn được.

    Bạn có thể liên hệ với các thành viên kỳ cựu trong lĩnh vực này ( Theo như mình biết, các bác này có kiến thức rất sâu trong mảng lập trình ). https://www.cadviet.com/forum/topmembers/

    Như bác NguyenHoanh, Tue NV,  PhamThanhBinh, Doan Van Ha, KetXu, GiaBach, DuongTrungHuy và nhiều thành viên khác ...., các bác ấy khá nhiệt tình, bạn thử liên hệ xem. :)))


  5. Vào lúc 20/12/2017 tại 15:36, DuongTrungHuy đã nói:

    Gửi bạn kienxd04

    Chỉ là một góc nhìn khác!

     

     

    (defun c:VeCN(/ d1 d2 td1 td2 goc1 goc2 td3 td4 td kieu dkb diem)
    (defun GrdrawDs1 (Dspolya nmau / i dsve d1 d2)
      (setq i 0 dsve '())
      (Repeat (1- (length Dspolya))
         (setq dsve (append dsve (list nmau) (list (nth i Dspolya)) (list (nth (1+ i) Dspolya)))
               i (1+ i)
         )
      )
      (grvecs dsve)
    )
      (setvar "Osmode" 0)(Setvar "orthomode" 0)
      (setq d1 (getpoint "\nCho diem dau: ") d2 (getpoint d1 "\nCho diem cuoi: ")
            ds2cu (list d1 d2) diem 2 goc1 (+ (angle d1 d2) (/ pi 2.0))
      )
      (While diem
        (setq kieu 3 dkb 5)
        (while (and (/= kieu 2)(/= dkb 3))
          (setq toado (grread 1) td (cadr toado) dkb (car toado))
          (If (or (= dkb 5) (= dkb 3))
          (Progn
            (setq td1 (Polar td goc1 100) td2 (inters d1 d2 td td1 F)
                  goc2 (angle td2 td) kc1 (distance td td2)
                  td3 (Polar d2 goc2 kc1) td4 (Polar d1 goc2 kc1)
            )
            (GrdrawDs1 ds2cu 0)(setq ds2 (list d1 d2 td3 td4 d1)) (GrdrawDs1 ds2 10)
          )
          )
          (If (= dkb 3)(setq oo (command "Pline" d1 d2 td3 td4 "c") diem nil))
          (setq ds2cu ds2)
        )
        (command "Redraw")
      )
    )

    Bác #DuongTrungHuy, lisp bác rất tuyệt. Nếu thêm nốt 1 tính năng bắt điểm khi pick điểm thứ 3 nữa là hoàn hảo. :)))

    • Like 1

  6. 15 phút trước, doductiep đã nói:

    Tiện thể các bác cho hỏi làm sao lấy khoảng cách giữa 2 điểm  theo trục ngang hoặc theo trục đứng?

    Thông thường với 2 điểm (x1 y1) , (x2 y2) mình phải làm thủ công là tách x và y của 2 điểm ra , nếu tính khoảng cách theo trục x thì cho y bằng 0, chỉ giữa lại x, sau đó dùng hàm :  : distance (x1 0) (x2 0)

    A (x1, y1); B (x2, y2);

    Code

    (setq kc_x (abs (- (car A) (car B)))

    (setq kc_y (abs (- (cdr A) (cdr B)))


  7. Yêu cầu có vẻ hơi lạm dụng lisp quá.

    + Tại sao bạn không dùng lệnh UCS để đổi trục theo ý muốn bất kỳ, sau đó rồi vẽ hình chữ nhật ?

    + 1 câu hỏi nữa: Để xoay 1 hình chữ nhật bạn mất bao nhiêu thao tác , các thao tác là như thế nào ( Kể cả cú pháp viết lệnh)  ( Câu hỏi mang tính kiểm tra trình độ sử dụng thành thạo Autocad của bạn)

    • Like 1

  8. Code thì có , còn ghi ra đâu là tùy bạn nhé: @@

     

    (defun C:LTD (/ dtpl point sset pt1)
    (setq dtpl (entsel "\nChon Polyline"))
    (setq Point (getpoint "\nPick Point"))

    (setq toadopl (reverse (laytoado dtpl)))
    (setq toadotrai '()
          toadophai '())
    (foreach pt1 toadopl
          (progn
              (if    (< (car pt1) (car Point))
                  (setq toadotrai (append toadotrai (list pt1)))
                  (setq toadophai (append toadophai (list pt1)))
              ); end if
        ); end progn
      ); end foreach

      (princ)
    )
    ;;;;***********************************************************************************************
    (defun laytoado (sset / hnd ent obj lsttd toado)
        (setq hnd (car sset))
        (setq ent (entget hnd))
        (setq obj (cdr (assoc 0 ent)))
                    (cond
                      ((= obj "LWPOLYLINE")
                        (foreach rec ent
                          (if (= (car rec) 10)
                            (progn
                              (setq pnt (cdr rec))
                              (setq toado (list (car pnt) (cadr pnt)))
                              (setq lsttd (cons toado lsttd))
                            )))))
        lsttd
    )

    • Like 1
×