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

Toan.CP

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

    6
  • Đã tham gia

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

Bài đăng được đăng bởi Toan.CP


  1. E đã tìm các chủ đề tương tự và thấy 2 lisp của Bác Phạm Quốc Duy rất hay. Nhưng do không biết về lisp nên nhờ các cao thủ viết nhập 2 lisp này hộ em ạ. Cái em cần là vẽ đường pline liên tiếp như lisp 2 nhưng lại có cách biểu hiện số đo khoảng cách như lisp 1. Và Cố gắng làm số đo kích thước hiện bên trên đường line hoặc bên trái đường line với ạ. Cảm ơn các bác cao nhân.( Lisp LKT và PLkt)

    http://www.cadviet.com/forum/topic/57439-yeu-cau-viet-lisp-ve-1-duong-line-co-ghi-luon-kich-thuoc-cua-line-do/

     

    (defun c:lkt ( )
     
    (command "undo" "be")
     
      (command "-style" "ktdt" "VNI-HELVE" "0" "1" "0" "n" "n")
     
      (if (null dolora)(setq dolora "4"))
     
    (Setq temp T)
     
    (While temp
     
    (setq a (strcat "\nD lon text hien hanh la (" dolora ") /<Diem dau tien>: "))
     
    (Initget "d D")
     
    (setq str (getpoint a))
     
    (Cond
     
      ((= str "d") (setq dolora (getstring ("\nDo lon text <" dolora "> :"))))
     
      ((= str "D") (setq dolora (getstring ("\nDo lon text <" dolora "> :"))))
     
       (Progn
     
      (Setq a str)
     
       (setq temp nil)
     
      )
     
    )
     
    )
     
     
     
    (setq b (getpoint "\nChon diem tiep theo: "))
     
    (setq luubatdiem (getvar "osmode"))
     
      (setvar "osmode" 0)
     
    (setq doclora (atof dolora))
     
    (setq gocxeo(angle a B))
     
    (setq daiab (distance a B))
     
    (setq c (polar a gocxeo (/ daiab 2)))
     
    (setq d (polar c (+ gocxeo (/ pi 2)) (/ doclora 4)))
     
     
     
    (command ".line" a b "")
     
    (command "text" "j" "c" c doclora b (rtos daiab 2 2) "")
     
    (command ".move" "last" "" c d)
     
    (cond
     
    ((> gocxeo (/ pi 2)) (command ".rotate" "last" "" c 180))
     
    )
     
    (setvar "osmode" luubatdiem)
     
    (command "undo" "end")
     
    (Princ)
     
    )
     
     
     
     
     
     
    (defun c:plkt ( )
     
    (command "undo" "be")
     
      (if (null dolora)(setq dolora "4"))
     
    (Setq temp T)
     
    (While temp
     
    (setq a (strcat "\nKhoang cach dim hien hanh la (" dolora ") /<Diem dau tien>: "))
     
    (Initget "k K")
     
    (setq str (getpoint a))
     
    (Cond
     
      ((= str "k") (setq dolora (getstring ("\nKhoang cach dim voi line <" dolora "> :"))))
     
      ((= str "K") (setq dolora (getstring ("\nKhoang cach dim voi line <" dolora "> :"))))
     
       (Progn
     
      (Setq a str)
     
       (setq temp nil)
     
      )
     
    )
     
    )
     
     
     
    (setq b (getpoint "\nChon diem tiep theo: "))
     
    (setq luubatdiem (getvar "osmode"))
     
      (setvar "osmode" 0)
     
    (setq doclora (atof dolora))
     
    (setq gocxeo(angle a B))
     
    (setq daiab (distance a B))
     
    (setq c (polar a gocxeo (/ daiab 2)))
     
    (setq d (polar c (+ gocxeo (/ pi 2)) doclora))
     
     
     
    (command ".pline" a b "")
     
    (setq plhoinay (entlast))
     
    (command "DIMALIGNED" a b d)
     
    (cond
     
    ((> gocxeo (/ pi 2)) (command ".rotate" "last" "" c 180))
     
    )
     
    (setq a B)
     
    (setvar "osmode" luubatdiem)
     
    (While (setq b (getpoint "\nChon diem tiep theo: <Enter de ket thuc> "))
     
    (setq luubatdiem (getvar "osmode"))
     
      (setvar "osmode" 0)
     
    (setq doclora (atof dolora))
     
    (setq gocxeo(angle a B))
     
    (setq daiab (distance a B))
     
    (setq c (polar a gocxeo (/ daiab 2)))
     
    (setq d (polar c (+ gocxeo (/ pi 2)) doclora))
     
     
     
    (command ".pline" a b "")
     
    (command "pedit" "m" "L" plhoinay "" "j" "0" "")
     
    (setq plhoinay (entlast))
     
    (command "DIMALIGNED" a b d)
     
    (cond
     
    ((> gocxeo (/ pi 2)) (command ".rotate" "last" "" c 180))
     
    )
     
    (setq a B)
     
    (setvar "osmode" luubatdiem)
     
    )
     
    (command "undo" "end")
     
    (Princ)
     
    )
     
     
     
    • Vote giảm 1

  2. Cái này thì sao.

    Lệnh: PLKT

    (defun c:plkt ( )(command "undo" "be")  (if (null dolora)(setq dolora "4"))(Setq temp T)(While temp(setq a (strcat "\nKhoang cach dim hien hanh la (" dolora ") /<Diem dau tien>: "))(Initget "k K")(setq str (getpoint a))(Cond  ((= str "k") (setq dolora (getstring (strcat"\nKhoang cach dim voi line <" dolora "> :"))))  ((= str "K") (setq dolora (getstring (strcat"\nKhoang cach dim voi line <" dolora "> :"))))   (Progn  (Setq a str)   (setq temp nil)  ))) (setq b (getpoint a"\nChon diem tiep theo: "))(setq luubatdiem (getvar "osmode"))  (setvar "osmode" 0)	(setq doclora (atof dolora))	(setq gocxeo(angle a 
    B))

    (setq daiab (distance a B))

    (setq c (polar a gocxeo (/ daiab 2)))

    (setq d (polar c (+ gocxeo (/ pi 2)) doclora))

     

    (command ".pline" a b "")

    (setq plhoinay (entlast))

    (command "DIMALIGNED" a b d)

    (cond

    ((> gocxeo (/ pi 2)) (command ".rotate" "last" "" c 180))

    )

    (setq a B)

    (setvar "osmode" luubatdiem)

    (While (setq b (getpoint a"\nChon diem tiep theo: <Enter de ket thuc> "))

    (setq luubatdiem (getvar "osmode"))

    (setvar "osmode" 0)

    (setq doclora (atof dolora))

    (setq gocxeo(angle a B))

    (setq daiab (distance a B))

    (setq c (polar a gocxeo (/ daiab 2)))

    (setq d (polar c (+ gocxeo (/ pi 2)) doclora))

     

    (command ".pline" a b "")

    (command "pedit" "m" "L" plhoinay "" "j" "0" "")

    (setq plhoinay (entlast))

    (command "DIMALIGNED" a b d)

    (cond

    ((> gocxeo (/ pi 2)) (command ".rotate" "last" "" c 180))

    )

    (setq a B)

    (setvar "osmode" luubatdiem)

    )

    (command "undo" "end")

    (Princ)

    )

     

    Bác Duy ơi. Bác còn đây ko. Bác hoạc Pro nào đó có thể sửa lại cái Lisp LKT bên trên của bác Duy thành dạng poline như cái lisp này và khi đo thì chữ luôn nằm phía trên của Line hoặc bên trái Line được không ạ


  3.  

    Quick code, số 2 vẫn là số e phải sửa. 

    A để những đối tượng này vào một group, nếu muốn liền hoặc rời thì sử dụng tổ hợp phím Ctrl + Shift + A để bật/ tắt chế độ Group

    (defun c:p1(/ e e1 s)
    	(setq e (entlast) s (ssadd))
    	(command ".pline") (while (/= (getvar 'cmdactive) 0) (command pause))
    	(and
    		(setq e1 (entlast))
    		(not (equal e e1))
    		(mapcar '(lambda(x)(entmake (list (cons 0 "CIRCLE")(cons 40 2)(cons 10 (cdr x))))) (vl-remove-if-not '(lambda(a)(= (car a) 10)) (entget e1)))
    	)
    (while (setq e (entnext e))
    	(ssadd e s)
    )
    (command "-group" "_Create" "*" "" s "")
    )
    

    Cảm ơn Bác Nhiều nhiều lắm. Tuy không thể gán cao độ cho đường được. Nhưng nó gom chung đường tròn và Pl thành 1 đối tượng là em thấy thỏa mãn lắm lắm rồi. Hì hì Chúc bác và gia đình mạnh khỏe hạnh phúc!


  4. Rất tiếc, yêu cầu đó lisp k làm được, linetype định nghĩa bằng file LIN không làm được, chỉ có thể tạo ra bằng các ngôn ngữ tạo được custom object

    Vậy ạ. Em không biết về lisp nên nghĩ là có thể làm được. Hì hì Cảm ơn bác nhiều. Tại em hay phải copy các đường tròn đến các đầu nút pline rồi lại phải copy toàn bộ pl và các đường tròn vào các đối tượng khác. Vì vậy khi muốn chọn đối tượng này tách riêng ra rất khó khăn. Nên nếu làm được được như vậy thì sẽ giảm được nhiều công sức. Bác thử xem còn cách nào khác có thể làm được hộ em không ạ. E cảm ơn nhiều nhiều


  5. (defun c:p1(/ e e1)
    	(setq e (entlast))
    	(command ".pline") (while (/= (getvar 'cmdactive) 0) (command pause))
    	(and
    		(setq e1 (entlast))
    		(not (equal e e1))
    		(mapcar '(lambda(x)(entmake (list (cons 0 "CIRCLE")(cons 40 2)(cons 10 (cdr x))))) (vl-remove-if-not '(lambda(a)(= (car a) 10)) (entget e1)))
    	)
    ) 

    Quick code. Số 2 đằng sau số 40 là cái bạn cần chỉnh

     

    Cám ơn bác. Bác có thể chỉnh hộ em để đường tròn ấy và đường pline chỉ là 1 đối tượng được không ạ. Nó chỉ giống như chỉ là 1 dạng linetype thôi ấy. Để khi kích chọn đường và copy đi thi các đường tròn cũng đi theo luôn.


  6. Mình thường xuyên phải vẽ các đường bao bằng đường pline. Sau đó copy đường tròn đến từng điểm nút nên mất nhiều thời gian. Mong các cao nhân chỉ giúp lisp vẽ đường pline mà vẽ đến đâu thì điểm nút là đường tròn đến đó còn đường nối các điểm nút vẫn là đường thẳng. Các đường tròn là bằng nhau và có bán kính được xác định trước hoặc được xác định ngay đầu tiên khi bắt đầu lệnh.

                Mong các bác giúp với ạ!

×