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

thaihoa123

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

    9
  • Đã tham gia

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

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


  1. Code hàm tính đuờng bao của đối tuợng:

    (defun lstBound (ent / lst ll ur)
     (vla-GetBoundingBox (vlax-Ename->Vla-Object ent) 'll 'ur)
     (setq ll (safearray-value ll)
    ur (safearray-value ur)
    lst (list (list (car ll) (cadr ll))
    	  (list (car ll) (cadr ur))
    	  (list (car ur) (cadr ur))
    	  (list (car ur) (cadr ll)))))
    
    (defun C:test (/ ent lstRec)
     (setq ent (car (entsel "\nSelect object:"))
    lstRec (lstBound ent))
     (vla-put-Closed
       (vla-AddLightWeightPolyline (vla-get-modelspace (vla-get-ActiveDocument (vlax-get-Acad-Object)))
         (vlax-make-variant
    (vlax-safearray-fill
      (vlax-make-safearray vlax-vbDouble (cons 0 (1- (* 2 (length lstRec)))))
      (apply (function append) lstRec))))
       :vlax-true)
     (princ)  )

     

     

     

    nhờ anh Gia_bach xem hộ vì sao Block này khi lấy đường bao bằng hàm trên thì không đúng?

    (e định lấy block để làm khung in nhưng nó không nhận đúng vùng in)

    Link: http://www.mediafire.com/file/ivab1cqicayr76c/Tn.dwg


  2. Mình kg down đc cái file của bạn và trong đoạn lisp của bạn mình cũng kg quen cách dùng các hàm VL nên mình chỉ viết giúp bạn đoạn lisp tạo và sắp xếp các block theo hoành độ điểm chèn (ở đây mình nghĩ điểm chèn các block của bạn sẽ tăng dần theo hoành độ)

     

    (defun dxf( name n)

    (cdr (assoc n (entget name)))

    )

    (defun haminBlock( e)

    (prompt "\nBan dang in block")

    (print e)

    )

     

    (defun c:inBL( / ss n e p ListB dx)

    (setq ss (ssget '((0 . "INSERT"))))

    (setq n 0 listB nil)

    (while (< n (sslength ss))

    (setq e (ssname ss n))

    (setq p (dxf e 10) dx (car p))

    (setq listB (append listB (list (list dx e))))

    (setq n (1+ n))

    )

    (setq listB (vl-sort ListB (function (lambda (e1 e2) (< (car e1) (car e2))))))

    (foreach n ListB (haminBlock (cadr n)))

    )

     

    Bạn chỉ cần viết thêm hàm in block theo ename của nó thay vào hàm haminBlock là được

    e Đã thử theo hướng dẫn (không biết làm đã đúng chưa) nhưng chỉ in theo thứ tự chọn, nhờ bác xem giúp

    Link file LSP: http://www.cadviet.com/upfiles/3/in_1.lsp

    Link file Cad: http://www.cadviet.com/upfiles/3/in.dwg


  3. Bạn lập danh sách gồm hoành độ điểm chèn và ename của cái block. VD : '((30 ename1) (10 ename2) (20 ename3))

    sd hàm (vl-sort ((30 ename1) (10 ename2) (20 ename3)) (function (lambda (e1 e2) (< (car e1) (car e2))))) để sắp xếp theo phần tử thứ nhất bạn sẽ đc

    ((10 ename1) (20 ename2) (30 ename3)).

    Duyệt qua ds này để in ename1, ename2, ename3

     

    e đã làm theo cách này nhưng không được (vì làm mò và thử dần thôi), nếu được bác chèn luôn đoạn lệnh đó vào file giúp e nhé.

    (ví dụ file cần in: http://www.cadviet.com/upfiles/3/a.dwg)


  4. Hì. Hì bác không biết Nova 14 nên bác không biết được thiết kế mái taluy là đúng rồi. Cái bác vừa nói là rải taluy và cách rải của bác có thể làm nhanh hơn rất nhiều bằng lisp, hơn nữa chiều dài taluy ngắn và taluy dài có thể thay đổi đều chứ không chỉ cố định là 1 block.

    Tool zoom chuột giữa của cad14 đã có trên diễn đàn rồi.

     

    em vẫn dùng CAD14 nhưng tìm mãi cái tool zoom chuột giữa trên diễn đàn mà không thấy, các Bác có thể up lên diễn đàn được khỗng?


  5. Không tài được từ địa chỉ link trên , bạn có file này pos lên đây để anh em tài về thì tốt , mình đang cần cái này , giờ mình đang fải cài cả cad2008 chỉ để mỗi việc save as các file dwg xuống bàn cad thấp hơn rồi sử dụng nên mấy rùa lắm (hoặc gửi giúp mình về địa chị mail : 12bhla@gmail .com ), xin cảm ơn

×