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

namnhim

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

    71
  • Đã tham gia

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

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


  1. tỷ lệ bản đồ khi vẽ luôn ở tỷ lệ 1/1. khi in người ta mới tạo khung theo những tỷ lệ phù hợp với khổ giấy. vì vậy chỉ có phóng to hay thu nhỏ khung in thôi còn bản đồ thì tuyệt đối không đươc phóng to hay thu nhỏ (sẽ ảnh hưởng đến độ cao và tọa độ của nó). 

    - nếu phóng to khung hoặc đối tượng tỷ lệ 1/1000 nên 1/10000 (GẤP 10 LẦN) 

    -Command: SC     (Scale)  ==> Select objects: (CHỌN ĐỐI TƯỢNG) ==> Specify base point: (CHỌN ĐIỂM, VỊ TRÍ CỐ ĐỊNH) ==> Specify scale factor or [Copy/Reference] <10>: (NHẬP TỶ LỆ PHÓNG TO BAO NHIÊU LẦN. Ở ĐÂY NHẬP TĂNG 10 LẦN).


  2. Đây bạn ơi! Lisp chọn text cùng nội dung.

    (defun C:HA( / txt)
    (setq txt (cdr (assoc 1 (entget (car (entsel "\nChon Text mau: "))))))
    (princ "\nChon nhom Text...")
    (setq ss (ssget (list '(0 . "*TEXT") (cons 1 txt))))
    (sssetfirst nil ss))
    

    nhờ các bác giựa vào code loc text này giúp em chọn các Text có cùng nội dung trong các thửa đất liền kề và sau đó BOUNDARY các thửa đó thành 1 đường bao các thửa ngoài xung quanh các thửa đó với ạ! có bệnh vái tứ phương nhưng chưa có thuốc trị, nhờ các bác giúp em với!

    http://www.cadviet.com/upfiles/4/62465_khoanh_ve.dwg62465_20150228_071319.jpg


  3. Trước khi dùng:
    pedit_Truoc.gif

    Sau khi dùng:
    pedit_Sau.gif

    có thể dùng Lisp nào dùng để nối nó được không anh

    Cái này có thể dùng lisp này giải quyết đơn giản hơn không cần quan tâm đến không cách xa hay gần.

    (defun c:mcha ( / *error* mid AssocOn ss i ent p1 p2 lin linn lins flins ptlst1 pt1 pt11 ptlst2 pt2 pt22 chpts chamfers )
      (vl-load-com)  
      (defun *error* ( msg )
        (if chma (setvar 'chamfera chma))
        (if chmb (setvar 'chamferb chmb))
        (if chmm (setvar 'chammode chmm))
        (vla-endundomark (vla-get-activedocument (vlax-get-acad-object))))
      (defun mid ( p1 p2 )
        (mapcar '(lambda ( a b ) (/ (+ a b) 2.0)) p1 p2))
      (defun AssocOn ( SearchTerm Lst func fuzz )
        (car (vl-member-if (function
              (lambda (pair) (equal SearchTerm (apply func (list pair)) fuzz))) lst)))
      (vla-startundomark (vla-get-activedocument (vlax-get-acad-object)))
      (mapcar 'set '(chma chmb chmm) (mapcar 'getvar '(chamfera chamferb chammode)))
      (mapcar 'setvar '(chamfera chamferb chammode) '(0 0 0))
      (prompt "\nSelect line entities")
      (while (not (setq ss (ssget "_:L" '((0 . "LINE"))))))
      (setq i -1)
      (while (setq ent (ssname ss (setq i (1+ i))))
        (setq p1 (trans (vlax-curve-getstartpoint ent) 0 1))
        (setq p2 (trans (vlax-curve-getendpoint ent) 0 1))
        (setq lin (list p1 p2))
        (setq lins (cons lin lins)))
      (setq flins (apply 'append lins))
      (foreach lin lins
        (setq ptlst1 (vl-sort flins '(lambda ( a b ) (< (distance (car lin) a) (distance (car lin) b)))))
        (if (equal (cadr ptlst1) (cadr lin) 1e-8) (setq pt1 (caddr ptlst1)) (setq pt1 (cadr ptlst1)))
        (if (setq linn (assocon pt1 lins 'car 1e-8)) (setq pt11 (mid (car linn) (cadr linn))))
        (if (setq linn (assocon pt1 lins 'cadr 1e-8)) (setq pt11 (mid (car linn) (cadr linn))))
        (setq ptlst2 (vl-sort flins '(lambda ( a b ) (< (distance (cadr lin) a) (distance (cadr lin) b)))))
        (if (equal (cadr ptlst2) (car lin) 1e-8) (setq pt2 (caddr ptlst2)) (setq pt2 (cadr ptlst2)))
        (if (setq linn (assocon pt2 lins 'car 1e-8)) (setq pt22 (mid (car linn) (cadr linn))))
        (if (setq linn (assocon pt2 lins 'cadr 1e-8)) (setq pt22 (mid (car linn) (cadr linn))))
        (setq chpts (list pt11 (mid (car lin) (cadr lin))) chamfers (cons chpts chamfers) chpts (list pt22 (mid (car lin) (cadr lin))) chamfers (cons chpts chamfers)))
      (foreach chpts chamfers
        (command "_.chamfer" (car chpts) (cadr chpts)))
      (*error* nil) (princ))
    

  4. 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))
    

  5. Chắc em chưa biết cách diễn đat. Em có một đường Pline và một đường thẳng vuông góc với đường Pline đó, và một giá trị khoảng cách cho trước. Em muốn vẽ một đường thẳng mới : vuông góc với đường Pline, khoảng cách giữa chân hai đường vuông góc theo Pline là giá trị khỏa125447_cad1_1.pngng cách cho trước trên. Em xin cảm ơn

    Mình có cái này để vẽ được đường vuông góc với đối tượng mẫu là Line, bạn có thể nhờ các bác sửa giúp để có thể dùng được cả với Pline!  (oh, nhầm không nhìn kỹ hình  :) )

    (defun c:Per (/ #Obj #Point #Ang)
       (and (setq #Obj (entsel "\nSelect line: "))
            (eq "LINE" (cdr (assoc 0 (entget (car #Obj)))))
            (or (setq #Point (getpoint "\nSpecify first point <At Selection>: "))
                (setq #Point (vlax-curve-GetClosestPointTo (car #Obj) (cadr #Obj)))
            ) ;_ or
            (setq #Ang (angtos (+ (* 0.5 pi) (vla-get-angle (vlax-ename->vla-object (car #Obj)))) 0 4))
            (vl-cmdf "_.line" "_non" #Point (strcat "<" #Ang) PAUSE "")
       ) ;_ and
       (princ)
     ) ;_ defun 
    

  6. cái này chỉ để gọi cho 1 bve do bạn đặt tên trong Thư Viện, 

    (command "-insert" "C:\\Program Files\\AutoCAD 2004\\Thu Vien\\TENBVE.DWG" x ms ms "0")

    Nếu bạn muốn gọi từng chi tiết bằng bảng điều khiển thì hình như trên diễn đàn đã có rồi, bạn có thể tìm nó tối ưu hơn.

    hoặc bạn có thể dùng theo kiểu cùi bắp này là tạo những file chi tiết riêng rồi vất vào trong thư viện, sau đó sử dụng Lisp hiển thị bảng lệnh do anh anh Ketxu viết và gõ LC là hiện ra bảng có tên chi tiết cần gọi rồi chon chi tiết đó và nhấn OK là ra cái chi tiết đó.

    (defun c:lc(/ LM:ListBox str lstData ST:SendKeys)
    (setq lstData
        (acad_strlsort (list
    ;Viet tiep cac lenh vao duoi dong nay theo mau "Ten lenh Noi dung"
        "MCA MatcatAA.dwg"
        "MCB MatcatBB.dwg"
        "MCC MatcatCC.dwg"
        "CO Copy th\U+00F4ng minh"    
        ))
    )
    (defun ST:SendKeys (keys / ws)
      (vlax-invoke-method (setq ws (vlax-create-object "WScript.Shell"))  'sendkeys keys)
      (vlax-release-object ws)
      (princ)
    )
    (defun LM:ListBox ( title data multiple / file tmp dch return )
      (cond
    	(
      	(not
        	(and (setq file (open (setq tmp (vl-filename-mktemp nil nil ".dcl")) "w"))
          	(write-line
            	(strcat "listbox : dialog { label = \"" title
              "\"; spacer; : list_box { key = \"list\"; multiple_select = "
              	(if multiple "true" "false") "; } spacer; ok_cancel;}"
            	)
            	file
          	)
          	(not (close file)) (< 0 (setq dch (load_dialog tmp))) (new_dialog "listbox" dch)
        	)
      	)
    	)
    	(
      	t    
      	(start_list "list")
      	(mapcar 'add_list data) (end_list)
     
      	(setq return (set_tile "list" "0"))
      	(action_tile "list" "(setq return $value)")
     
      	(setq return
        	(if (= 1 (start_dialog))
          	(mapcar '(lambda ( x ) (nth x data)) (read (strcat "(" return ")")))
        	)
      	)          
    	)
      )
      (if (< 0 dch) (unload_dialog dch))
      (if (setq tmp (findfile tmp)) (vl-file-delete tmp))
      return
    )
    (cond (
            (setq str (LM:ListBox "Ghi ch\U+00FA l\U+1EC7nh - lisp CAD - @ketxu - 2/6/2012 :" lstData nil))
            (setq str (car str))
            (ST:SendKeys (strcat (substr str 1 (vl-string-position 32 str)) "\n"))
            )
    )
    (princ)
    )
    

  7. Anh có thể cho xuất ra text sẵn có và đổi thành màu đỏ được ko ạ?

    bạn có thể dùng cái này để đo và xuất luôn ra Dim có Layer và kích thước màu đỏ cũng được

    (defun C:DIMARC ( / pt1 pt2 cen a1 a2 D1 D2 p r oldOs)
     (setq oldOs (getvar "OSMODE"))
     (prompt "Pick 2 points on an arc - ")
     (setvar "OSMODE" 512)
       (COMMAND "-LAYER" "m" "Dim" "color" 1 "" "")(PRINC)
     (while (not cen)
      (setq   pt1 (getpoint "1st pt: ")
       cen (osnap pt1 "_CEN")
      )
      (if (not cen) (alert "Doesn't lie on an arc, retry")
          (setq pt2 (getpoint cen " 2nd pt: ")))
     );while
     (setvar "OSMODE" 0)
     (setq a1 (angle cen pt1) a2 (angle cen pt2) ad (abs (- a2 a1))
       r (distance pt1 cen)
       D1 (* r ad)
       D2 (* r (- (* 2 pi) ad)) )
     (prompt (strcat "\nArc length: " (rtos D1) ",   complementar arc: " (rtos D2))) 
     (command "_DIMANGULAR" "" cen pt1 pt2 "_T" (rtos D1) pause)
     (setvar "OSMODE" oldOs)
     (prin1))
    (princ "\nDIMARC command loaded.")
    (princ)
    

  8.  

    Mọi người ơi. có ai biết cách đo chiều dài đường cong giữa 2 điểm bất kỳ ko? giúp mình với.

    hình như là có lệnh DAR để đo thì phải nhưng mình ko biết dùng. ai biết chỉ giùm nhé.

    Hoặc là bạn có thể để cho nó hiện luôn ra Dim có Layer và kích thược màu đỏ cũng được.

    
    
    (defun C:DIMARC ( / pt1 pt2 cen a1 a2 D1 D2 p r oldOs)
     (setq oldOs (getvar "OSMODE"))
     (prompt "Pick 2 points on an arc - ")
     (setvar "OSMODE" 512)
       (COMMAND "-LAYER" "m" "Dim" "color" 1 "" "")(PRINC)
     (while (not cen)
      (setq   pt1 (getpoint "1st pt: ")
       cen (osnap pt1 "_CEN")
      )
      (if (not cen) (alert "Doesn't lie on an arc, retry")
          (setq pt2 (getpoint cen " 2nd pt: ")))
     );while
     (setvar "OSMODE" 0)
     (setq a1 (angle cen pt1) a2 (angle cen pt2) ad (abs (- a2 a1))
       r (distance pt1 cen)
       D1 (* r ad)
       D2 (* r (- (* 2 pi) ad)) )
     (prompt (strcat "\nArc length: " (rtos D1) ",   complementar arc: " (rtos D2))) 
     (command "_DIMANGULAR" "" cen pt1 pt2 "_T" (rtos D1) pause)
     (setvar "OSMODE" oldOs)
     (prin1))
    (princ "\nDIMARC command loaded.")
    (princ)

  9. Cam ơn bạn nguyenbd1 nhiều nha! mình làm được rồi. Là phải đem bản vẽ trong khung nhìn về góc tọa độ. Thanks bạn! 

    Với lại cho mình hỏi thêm tí nữa là: mình muốn dùng Lisp để gọi bản vẽ trong tiện ích ra mà không phải dùng chuột để chọn chúng trên toolbar thì được không vậy? 

    nếu muốn dùng lisp bạn có thể dùng đoạn code này:

    (DEFUN C:GBV() (prompt "\n DE GOI BVE TRONG THU VIEN")
    (setq ms 1) (setq x (getpoint "\nCHON GOC TRAI-DUOI BAN VE :"))
    (setenv "ACAD" (strcat (GETENV "ACAD") ";" "C:\\Program Files\\AutoCAD 2004\\Thu Vien"))
    (command "-insert" "C:\\Program Files\\AutoCAD 2004\\Thu Vien\\TENBVE.DWG" x ms ms "0") 
    (Command "explode" (ssget "L")) (Command "-purge" "b" "TENBVE" "y" "y") 
    (Command "zoom" "e")
    (prompt "\nDA GOI BVE RA")(princ))
    

    lưu ý là bve mẫu được lưu theo đường dẫn "C:\\Program Files\\AutoCAD 2004\\Thu Vien" là ok


  10. Mình dùng phím Ctrl C để copy chi tiết từ bản vẽ này sang bản vẽ khác, nhưng khi Ctrl V sang bản vẽ khác thì lại ra chi tiết khác.Chi tiết khác đó lại là những chi tiết đã copy từ những lần trước, sau 3, 4 lần thực hiện lặp đi lặp lại thì mình mới lôi được chi tiết cần copy về.Ai biết hiện tượng đó, hoặc có cách nào copy 1 phát được luôn hình mình cần copy ko thì bày cho mình nhé

    theo mình đoán có thể bạn copy chi tiết này được tạo từ Block có tên trùng với chi tiết bên bản vẽ bạn cần Paste sang, bởi vậy khi Paste qua thì nó vẫn hiểu là Block có tên đó cũ chứ không phải cái vừa copy.

    bạn thử Explode chi tiết đó ra rồi tạo lại Block đó và đặt 1 cái tên khác rồi copy sang bản vẽ bạn muốn xem có được không. 

    • Vote tăng 1

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

    (defun C:DIMARC ( / pt1 pt2 cen a1 a2 D1 D2 p r oldOs)
     (setq oldOs (getvar "OSMODE"))
     (prompt "Pick 2 points on an arc - ")
     (setvar "OSMODE" 512)
     (while (not cen)
      (setq   pt1 (getpoint "1st pt: ")
       cen (osnap pt1 "_CEN")
      )
      (if (not cen) (alert "Doesn't lie on an arc, retry")
          (setq pt2 (getpoint cen " 2nd pt: ")))
     );while
    
     (setvar "OSMODE" 0)
     (setq a1 (angle cen pt1) a2 (angle cen pt2) ad (abs (- a2 a1))
       r (distance pt1 cen)
       D1 (* r ad)
       D2 (* r (- (* 2 pi) ad))
     )
     (prompt (strcat "\nArc length: " (rtos D1) ",   complementar arc: " (rtos D2))) 
    
     (command "_DIMANGULAR" "" cen pt1 pt2 "_T" (rtos D1) pause)
    
     (setvar "OSMODE" oldOs)
     (prin1)
    )
    
    (princ "\nDIMARC command loaded.")
    (princ)
    
×