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

toiyeuvietnam

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

    76
  • Đã tham gia

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

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


  1. nhờ các anh giúp em làm thế nào để nhập tọa độ 1 điểm có x,y trên cad 2007 với ạ.

    cad 2004 thì em nhập bằng cách gõ Line nhập tọa độ x...., y.... là được,

    nhưng cad 2007 thì nhập xong x khi đánh dấu (,) để nhập y thì nó hiểu là enter (kết thúc lệnh). làm thế nào để khắc phục nhập giống như cad 2004 nhỉ?


  2.  

    bạn thử dùng cái này có được không:

    (DEFUN C:DT1(/ A)
      (SETQ A (GETPOINT "CHON DIEM : "))
      (COMMAND "BOUNDARY" A "")
      (COMMAND "AREA" "O" (SSGET "L"))
      (COMMAND "ERASE" (SSGET "L") "")
     (command "-style" "text" "Times New Roman" 2.5 "1" "0" "n" "n") ;;;;Muon sua Text to hay nho 2.5 ...
      (command "-layer" "m" "Text""c" "White" "" "")
    (setq e_lst (entget (tblobjname "style" (getvar 'textstyle))))
    (entmod (subst (cons 50 0.261799) (setq old (assoc 50 e_lst)) e_lst))
      (command "text" "j" "tl" A "" (strcat "DT: " (rtos (/ (* (GETVAR "AREA") 10) 10) 2 2) " m²"))
    (entmod (subst old (assoc 50 e_lst) e_lst))
      (PRINC "\nDIEN TICH LA : ")(PRINC  (/ (* (GETVAR "AREA") 10) 10))(PRINC" m²")(prompt "\nDA TINH XONG DIEN TICH!")(princ))
    

    Nhờ các bác coi giúp em lỗi em sửa dòng (COMMAND "BOUNDARY" A "") thành (COMMAND "BOUNDARY"  "A" "I" "N" "" "" PAUSE ""  )  để nó bỏ qua không boundary đối tượng là Mtext và Dim, nhưng nó lại phải pick 2 lần mới ra diện tích, em muốn pick chuột 1 cái vào ô cần tính diện tích là hiện diện tích luôn mà không biết lỗi chỗ nào, cảm ơn các bác


  3. Bạn có thể tham khảo hai lệnh sau : lệnh DT1 dừng lại cho bạn xem đường bao, lệnh DT2 không dừng lại.

    Đây là lệnh tạo đường bao theo cơ chế của AutoCAD. Các đối tượng tạo đường bao phải nằm trọn trong màn hình và tương đối đơn giản.

    Đối với hình phức tạp hay nằm ngoài màn hình như tuyến thủy hệ, giao thông chằng chịt, lệnh này không tốt lắm.

     

    ;Ham tinh dien tich bang lenh bpoly

    (defun tinhdtich( p / name)

    (setq name (entlast))

    (command "Bpoly" p "\\");

    (if (null (equal name (entlast)))

    (progn

    (command "area" "O" "l")

    (command "_.erase" "l" "")

    (getvar "area")

    )

    (PROGN

    (alert "Khong khep")

    NIL

    )

    )

    )

    (defun C:DT1()

    (SETQ P (GETPOINT "\nPICK"))

    (IF P (TINHDTICH P))

    )

    (defun C:DT2( / old)

    (setq old (getvar "osmode"))

    (bpoly (getpoint "\nPick"))

    (setvar "osmode" old)

    (command "_area" "o" "l")

    (entdel (entlast))

    (rtos (getvar "area") 2 1)

    )

    - Nhờ các bác sửa giúp em cho đường bao khu vực cần tính diện tích có màu xanh.

    - sửa lỗi để không tạo đường bao quanh với đối tượng là Mtext và Dim (vì nó cứ để lại đường bao sau khi tính xong và lại phải xóa đi mất công quá)


  4. các anh ơi, nhò các anh giúp sủa doạn đoạn code Layoff dưới đây, dể pick đối tượng Layer nào thì đối tượng đó tắt ngay mà không phải Enter sau khi chon đối tượng giống như Freeze đấy! 


    ;;; ============================ Layer OFF =================================
    (DEFUN LAYOFF (/ SSET SSL ENT LAY I MODE)
    (setvar "cmdecho" 0)
    (prompt "\nTuan Giap hay chon doi tuong tren layer(s) muon OFF: ")
    (SETQ SSET (SSGET))
    (IF (/= NIL SSET) (PROGN (SETQ SSL (SSLENGTH SSET)) (SETQ LAY "") (SETQ I 0) (SETQ MODE 0)
    (WHILE (< I SSL) (SETQ ENT (ENTGET (SSNAME SSET I)))
    (IF (= (CDR (ASSOC '8 ENT)) (GETVAR "CLAYER")) (SETQ MODE 1) )
    (SETQ LAY (STRCAT LAY "," (CDR (ASSOC '8 ENT)) )) (SETQ I (+ I 1)))
    (COMMAND "LAYER" "OFF" LAY "")
    (IF (= MODE 1) (COMMAND ""))))
    (setq Loff6 Loff5) (setq Loff5 Loff4) (setq Loff4 Loff3) (setq Loff3 Loff2) (setq Loff2 Loff1) (setq Loff1 LAY)
    (princ (strcat "\n Layer : " LAY " da OFF.")) (setvar "cmdecho" 1) (princ))(defun c:LAYOFF () (layoff))
    (defun c:LO () (layoff))

  5.  

    Bạn dùng cái này. Sau khi copy xong nếu bạn dùng lệnh khác mà có select objects thì có thể đánh chữ "P" để lấy các đối tượng cuối cùng.

     

    (defun c:cpy(/ ss pt hg os el en)
      (prompt "\nChon cac doi tuong de copy:")
      (setq ss (ssget) 
    pt (getpoint "\nDiem goc:")
    hg (getangle pt "\nTheo huong:")
    os (getvar 'osmode))
      (setvar 'osmode 0)
      (while (setq kc (getreal "\nKhoang cach:"))
        (setq el (entlast))
        (command "copy" ss "" pt (polar pt hg kc))
        (setq ss (ssadd))
        (while (setq en (entnext el))
          (ssadd en ss)
          (setq el en))
      ) 
      (command "select" ss "")
      (setvar 'osmode os) (princ)
    )
    

    Tot77 ơi, cái này bạn có thể thêm chức năng lưu biến khoảng cách được không? cảm ỏn nhiều


  6. &nbsp;

    Đây nè, cho các bác bộ mã nguồn luôn

    Về nghiên cứu thêm nhé

     

     

    (defun c:batter	()  (setvar "CMDECHO" 0)  (setq osmode (getvar "osmode"))  (setvar "osmode" 0)  (setvar "unitmode" 0)  (setvar "dimzin" 0)  (setvar "blipmode" 0)  (setvar "aunits" 0)  (setvar "angbase" (/ pi 2))  (setvar "angdir" 1)  (if (not lint)    (setq lint 10.0)  )  (setq int (getdist (strcat "\nInterval &lt;" (rtos lint 2 3) "&gt;: ")))  (if int    (setq lint int)    (setq int lint)  )  (command "line" (list 0.0 0.0) (list 0.0 0.0001) "")  (if (tblsearch "block" "tadtick")    (command "block" "tadtick" "y" (list 0.0 0.0) (entlast) "")    (command "block" "tadtick" (list 0.0 0.0) (entlast) "")  )  (while (setq refent (entsel "\nSelect reference line: "))    (command "undo" "group")    (redraw (car refent) 3)    (initget 1 "Cut Fill")    (setq reply (getkword "\n[C]ut or [F]ill batter: "))    (setq s (ssget))    (command "measure" refent "b" "tadtick" "y" int)    (setq p  (ssget "p")	  cn 0    )    (if	s      (progn	(while (&lt; cn (sslength p))(setq en (entget (ssname p cn))p0 (cdr (assoc 10 en))pt1 p0pt2 nilb (cdr (assoc 50 en)))(entdel (ssname p cn))(setq p1 (polar p0 (+ (/ pi 2) b )  0.0001))	  (command "line" p0 p1 "")	  (command "extend" s "" (list (entlast) p1) "")	  (setq xent (entget (entlast)))	  (setq	xdist		 (distance (cdr (assoc 10 xent)) (cdr (assoc 11 xent)))	  )	  (if (not (equal xdist 0.0001 0.0001))	    (setq pt2 (cdr (assoc 11 xent)))	    (progn	      (command "extend" s "" (list (entlast) p0) "")	      (setq xent (entget (entlast)))	      (setq xdist (distance (cdr (assoc 10 xent))				    (cdr (assoc 11 xent))			  )	      )	      (if (not (equal xdist 0.0001 0.0001))		(setq pt2 (cdr (assoc 10 xent)))	      )	    )	  )	  (entdel (entlast))	  (if pt2	    (if	(= reply "Fill")	      (if (= (rem cn 2) 0)		(command "line" pt1 pt2 "")		(command		  "line"		  pt1		  (polar pt1 (angle pt1 pt2) (/ (distance pt1 pt2) 2))		  ""		)	      )	      (if (= (rem cn 2) 0)		(command "line" pt2 pt1 "")		(command		  "line"		  pt2		  (polar pt2 (angle pt2 pt1) (/ (distance pt2 pt1) 2))		  ""		)	      )	    )	  )	  (setq cn (1+ cn))	)      )    )    (command "undo" "en")  )  (setvar "blipmode" 1)  (setvar "osmode" osmode)  (princ))
    &nbsp;

     

    ==========================================

    Nhờ các bác giúp em sửa cái lisp này với:

    Yêu cầu:

    - gõ BATTER

    - chọn đối tượng cần vẽ Taluy (có thể chọn nhiều đối tượng vẽ Taluy 1 lúc)

    - pick phía cần dải Taluy

    - chọn đối tượng chân Taluy

    - xong!


  7. cảm ơn anh Ket, gõ lệnh đó như vậy đúng là ổn rồi. em gộp cái CELTSCALE vào trong cái DUONG thì nó báo lỗi ; error: no function definition: C:CELTSCALE (không có định nghĩa chức năng: C: CELTSCALE). em gộp như vậy sai chỗ nào ảnh nhỉ?

     

     (defun C:LDD()
    (c:CELTSCALE )
    (c:DUONG)
    )
    (defun c:DUONG (/ *error* old_lay) 
    (defun *error* (msg)
       (setvar "clayer" old_lay) (princ))
      (setq old_lay (getvar "clayer"))
      (command "_.layer"  "_m" "DUONG DI" "_c" "1" "" "L" "Hidden" "" "LW" "0.3" "" "") 

    (setvar "osmode" (+ 1 2 8 32 128))

    (command "_.LINE") (princ))

    

    

     

     

     

     


  8. Thực ra là em cũng chỉ sửa chữa trên những thứ có sẵn để phù hợp với công việc của mình, nếu tạo được như vậy thì sau này không cần quan tâm đến layer đã có hay chưa và không cần phải quét đối tượng đưa về layer nữa mà chỉ cần dùng lệnh là vẽ luôn.

    thực ra em vẫn đang dùng cái code dưới đây để chuyển, trong đó nó có khoảng cách nét do mình đặt, nhưng mà mình phải MA.

    (DEFUN C:DG10(/ cnt enam ent pnt s1 tot v1 val)
    (setvar "CMDECHO" 0.000)
    (prompt "\nCHON CAC DUONG MUON CHUYEN: ")
       (COMMAND "-LAYER" "m" "DUONG" "color" 1 "" "")(PRINC)  
       (SETQ A (SSGET))
       (COMMAND "CHPROP" A PAUSE "c" "RED" "LA" "DUONG" "lt" "Hidden" "s" "5" "")(princ)
    )
    

     còn cái dưới đây dùng 2 lệnh RD và DG1 là ổn rồi, chỉ có điều khoảng cách hở của nét Hidden trong DG1 (Đường) mình không làm được (có cách nào để có thể thêm khoảng cách không ạ?). mong anh và các chuyên gia giúp em với, cảm ơn các anh rất nhiều!

     

     (defun c:DG1 (/ *error* old_lay) 
    (defun *error* (msg)
       (setvar "clayer" old_lay) (princ))
      (setq old_lay (getvar "clayer"))
      (command "_.layer"  "_m" "DUONG DI" "_c" "1" "" "L" "Hidden" "S"  "5" "LW" "0.3" "" "") ;;;"S" "5" không dùng được?
    (setvar "osmode" (+ 1 2 8 32 128)) 
    (command "_.LINE") (princ))
    ------------------------
    (defun c:RD (/ *error* old_lay) 
    (defun *error* (msg)
       (setvar "clayer" old_lay) (princ))
      (setq old_lay (getvar "clayer"))
      (command "_.layer"  "_m" "RANH DAT" "_c" "5" "" "L" "" "" "LW" "0.5" "" "")
    (setvar "osmode" (+ 1 2 8 32 128)) 
    (command "_.LINE") (princ))
     
×