Đến nội dung


Hình ảnh
- - - - -

[Nhờ giúp đỡ] lisp tọa độ vc


  • Please log in to reply
4 replies to this topic

#1 031113

031113

    biết zoom

  • Members
  • Pip
  • 12 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 28 February 2013 - 10:09 PM

Em có down lisp xuất tọa độ vc trên diễn đàn nhưng em gặp 1 số vướng mắc mong các anh giúp em

hình file bản vẽ cuae em như thế này ạ

em muốn chỉnh file lisp để cho cái khung xuất tọa độ chiều ngang nó tăng lên vì như bản vẽ thì tọa độ nó bị chùm cả ra ngoài. và cái vị trí thứ tự 1,2,3,4 số 4,3 bị dính vào hình em muốn nó dịch sang bên trái với khoảng cách như số 1,2 ạ. Mong các anh giúp em. Em cảm ơn trước ạ

đây là file bản vẽ

http://www.mediafire...xih9xd2os48gixg

còn đây là file lisp 

http://www.mediafire...rleu61gkzhse69s


  • 0

#2 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6009 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 01 March 2013 - 12:14 PM

Em có down lisp xuất tọa độ vc trên diễn đàn nhưng em gặp 1 số vướng mắc mong các anh giúp em

hình file bản vẽ cuae em như thế này ạ

 

em muốn chỉnh file lisp để cho cái khung xuất tọa độ chiều ngang nó tăng lên vì như bản vẽ thì tọa độ nó bị chùm cả ra ngoài. và cái vị trí thứ tự 1,2,3,4 số 4,3 bị dính vào hình em muốn nó dịch sang bên trái với khoảng cách như số 1,2 ạ. Mong các anh giúp em. Em cảm ơn trước ạ

đây là file bản vẽ

http://www.mediafire...xih9xd2os48gixg

còn đây là file lisp 

http://www.mediafire...rleu61gkzhse69s

Hề hề hề,

Yêu cầu của bạn không dễ làm bởi chỉ có giời mới biết theo bạn thế nào là đẹp. Bạn nên tìm hiểu về lisp để có thể tự mình chỉnh sửa lisp sẵn có theo yêu cầu của bạn. Tất cả các lisp có sẵn đều đã được viết theo những yêu cầu cụ thể của mỗi người sử dụng và nó chỉ có tính chất tham khảo với người sử dụng khác. Chín người thì mười ý kiến khác nhau nên việc có một lisp dùng cho tất cả mọi người là rất khó bạn ạ. Mọi người có thể chỉnh sữa cho bạn lần này với cái hình cụ thể bạn đã post, còn những lần khác thì sao, khi hình bạn post không phải là một hình chữ nhật và không chỉ có 4 đỉnh. Khi đó cái chỉnh sửa lần này sẽ trở thành vô nghĩa và bạn sẽ lại ối giời ơi nữa ư???

Với yêu cầu thứ nhất, vấn đề của bạn là do số lượng các chữ số dùng ghi tọa độ lớn quá nên độ rộng khung ấn định của líp trở nên chật chội. Bạn chỉ cần chỉnh sửa kích thước của khung là Ok. Kích thước rộng ấn định của khung theo lisp là 8 lần chiều cao text trong khi số lượng chữ số bạn dùng tới 10 kí tự. Bạn chỉ cần nâng giá trị này thành 10 lần chiều cao text là sẽ ngon ngay. Tuy nhiên như vậy nếu với những bản vẽ khác, số lượng chữ số này thay đổi thì cái khung của bạn sẽ lại trở nên quá chật hay quá rộng ngay và lại mất đẹp liền. Mình sửa lần này cho bạn và bạn hãy so sánh với lisp  nguyên gốc để thấy chỗ khác nhau. Từ đó suy ra cách sửa cho những lần sau.

Với yêu cầu 2: Việc đánh số các đỉnh này chỉ có tác dụng giúp bạn nhận biết vị trí các đỉnh tường ứng với bảng tọa độ. Vị trí ghi các con số đánh dấu này thực khó để nói thế nào là đẹp, là đúng vì nó phụ thuộc vào quan điểm của cá nhân. Do không thể xác định trước vị trí ghi nào là đẹp trên bản vẽ nên người viết lisp cứ làm cả loạt theo một quy tắc chung là lệch phải so với vị trí cần đánh dấu một khoảng bằng chiều cao text. nếu bạn thấy chưa vừa mắt có thể tự move nó đi tới vị trí mà bạn cho là OK. Đơn giản vậy thôi. Còn nếu bắt lisp phải tự chọn chỗ đẹp cho cái vị trí đánh số này thì quả thực là rất khó bởi việc xác định vị trí đánh số đầu tiên hoàn toàn là ngẫu nhiên không dễ để xác định đâu. Với trường hợp cụ thể này của bạn, mình có thể sửa nhưng không đảm bảo được là nó sẽ chạy đúng với các hình khác, nhất là khi số đỉnh tăng lên hay hình chữ nhật này bị xoay đi một góc.

Bạn hãy so sánh lisp đã sửa này với lisp gốc để biết được chỗ mình đã sửa và học lấy cách sửa để có thể tự sửa theo những yêu cầu khác nhau của bạn.

Nó đây:

 

;; free lisp from cadviet.com
 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
;;;Chuong trinh danh so va lap bang toa do ho so thua dat dia chinh
;;;Bang toa do tao thanh block, duoc dat ten theo so thu tu 1, 2, 3...
;;;Chap nhan cac doi tuong la Region, Polyline, Line va Arc khep kin
;;;Written by Ssg - September 2008 - www.cadviet.com
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
 
;;;PUBLIC FUNCTIONS
;;;-------------------------------------------------------------------------------
(Defun DTR(x) (/ (* x pi) 180) ) ;;;change degree to radian, return REAL
;;;-------------------------------------------------------------------------------
(defun lineP (p0 a r / p1) ;;;Line polar: point, degree angle, radius
    (setq p1 (polar p0 (dtr a) r))
    (command "line" p0 p1 "")
)
;;;-------------------------------------------------------------------------------
(defun linePX (p0 x) (lineP p0 0 x)) ;;;Horizontal line: length x, from p0
;;;-------------------------------------------------------------------------------
(defun linePY (p0 y) (lineP p0 90 y)) ;;;Vertical line: length y, from p0
;;;-------------------------------------------------------------------------------
(defun getVert (e / i L) ;;;Return list of all vertex from pline e
(setq i 0 L nil)
(vl-load-com)
(repeat (fix (+ (vlax-curve-getEndParam e) 1))
    (setq L (append L (list (vlax-curve-getPointAtParam e i))))
    (setq i (1+ i))
)
L
)
;;;-------------------------------------------------------------------------------
(defun wtxtMC (txt p h) ;;;Write text Middle Center, specify text, point, height
(entmake (list (cons 0  "TEXT") (cons 7 (getvar "textstyle"))
    (cons 1 txt) (cons 10 p) (cons 11 p) (cons 40 h) (cons 72 1) (cons 73  2)))
)
;;;-------------------------------------------------------------------------------
(defun Collect(e / e2 SS) ;;;Selection set from e to entlast
(setq SS (ssadd))
(ssadd e SS)
(while (setq e2 (entnext e)) (ssadd e2 SS) (setq e e2))
SS
)
;;;-------------------------------------------------------------------------------
(defun Collect1(e / ss)
;;;Selection set after e to entlast. If e nil, select all from fist entity of drawing.
(if (= e nil) (setq ss (collect (entnext)))
    (progn (setq ss (collect e)) (ssdel e ss))
)
)
;;;-------------------------------------------------------------------------------
 
;;;PRIVATE FUNCTIONS
;;;-------------------------------------------------------------------------------
(defun txt1(txtL / p1 p2 p3 p4 pL i) ;;;Write texts in 1 row
(setq
    p1 (list (+ (car p0) (* 2 h)) (- (cadr p0) (* 1.5 h)))
    p2 (polar p1 0 (* 7 h))
    p3 (polar p2 0 (* 10 h))
    p4 (polar p3 0 (* 10 h))
    pL (list p1 p2 p3 p4)
    i 0
)
(repeat 3
    (wtxtMC (nth i txtL) (nth i pL) h)
    (setq i (1+ i))
)
)
;;;-------------------------------------------------------------------------------
(defun mesh1() ;;;Make 1 mesh unit
(linepy p0 (* -3 h))
(command "copy" "L" "" p0 (list (+ (car p0) (* 4 h)) (cadr p0)))
(command "array" "L" "" "r" 1 3 (* 10 h))
(linepx (polar p0 (* 1.5 pi) (* 3 h)) (* 24 h))
)
;;;-------------------------------------------------------------------------------
 
 
;;;MAIN PROGRAM
;;;-------------------------------------------------------------------------------
(defun C:VC( / h p et p0 p00 pvL oldos j pv num txtL ss bn)
;;;Vertex Co-ordinate
 
;;;GET TEXT HEIGHT
(if (not h0) (setq h0 1))
(setq h (getreal (strcat "\nChon chieu cao text <" (rtos h0) ">:")))
(if (not h) (setq h h0) (setq h0 h))
(setvar "osmode" 0)
 
;;;PICK & BASE POINT
(setq p (getpoint "\nPick 1 diem giua mien kin:"))
(command "boundary" p "")
(setq et (entlast))
(redraw et 3)
(setq
    p00 (getpoint "\nDiem chuan bang toa do (phia tren ben trai):")
    p0 p00
    pvL (reverse (getvert et))
    oldos (getvar "osmode")
)
 
;;;HEADER
(linepx p0 (* 24 h))
(mesh1)
(txt1 (list "TT" "X" "Y"))
(setq p0 (polar p0 (* 1.5 pi) (* 3 h)))
 
;;;MAKE RECORDS
(setq j 0)
(repeat (1- (length pvL))
    (mesh1)
    (setq
        pv (nth j pvL)
        num (itoa (1+ j))
        txtL (list num (rtos (car pv)) (rtos (cadr pv)) )
    )
    (txt1 txtL)
    ;(wtxtMC num (polar pv 0 h) h)
    (setq p0 (polar p0 (* 1.5 pi) (* 3 h)))
    (setq j (1+ j))
)
 
;;;MAKE BLOCK
(setq ss (collect1 et))
(command "erase" et "")
(setq bn "1")
(while (tblsearch "block" bn) (setq bn (itoa (1+ (atoi bn)))))
(command "block" bn p00 ss "")
(command "insert" bn p00 "" "" "")
 
;;;WRITE POINT NAME
(setq j 0)
(repeat (1- (length pvL))
    (setq
        pv (nth j pvL)
        num (itoa (1+ j))
    )
    (if (< (atoi num) 3)
        (wtxtMC num (polar pv 0 h) h)
        (wtxtMC num (polar pv pi h) h)
    )
    (setq j (1+ j))
)
 
;;;FINISH
(setvar "osmode" oldos)
(princ)
)
;;;-------------------------------------------------------------------------------
 
Chúc bạn vui.

  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#3 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 01 March 2013 - 03:33 PM

 

Hề hề hề,

.......

Với yêu cầu thứ nhất, vấn đề của bạn là do số lượng các chữ số dùng ghi tọa độ lớn quá nên độ rộng khung ấn định của líp trở nên chật chội. Bạn chỉ cần chỉnh sửa kích thước của khung là Ok. Kích thước rộng ấn định của khung theo lisp là 8 lần chiều cao text trong khi số lượng chữ số bạn dùng tới 10 kí tự. Bạn chỉ cần nâng giá trị này thành 10 lần chiều cao text là sẽ ngon ngay. Tuy nhiên như vậy nếu với những bản vẽ khác, số lượng chữ số này thay đổi thì cái khung của bạn sẽ lại trở nên quá chật hay quá rộng ngay và lại mất đẹp liền. Mình sửa lần này cho bạn và bạn hãy so sánh với lisp  nguyên gốc để thấy chỗ khác nhau. Từ đó suy ra cách sửa cho những lần sau.

.......

 

Chào bác Bình!

Em chỉ có góp ý nhỏ:

Để khắc phục tình trạng khung bảng quá hẹp hay quá rộng ta sử dụng đối tượng Table để tạo bảng thay vì kẻ khung

Với Table, bảng tự co, dãn theo text trong khung, dài giãn theo dài, ngắn thì tự co lại, vậy là sẽ đẹp ngay 

muốn bảng tự co, hay giãn theo hợp ý  thì chỉ cần chọn table và kéo thôi bác ạ

smile.png


  • 1

#4 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6009 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 13 March 2013 - 10:48 AM

Chào bác Bình!

Em chỉ có góp ý nhỏ:

Để khắc phục tình trạng khung bảng quá hẹp hay quá rộng ta sử dụng đối tượng Table để tạo bảng thay vì kẻ khung

Với Table, bảng tự co, dãn theo text trong khung, dài giãn theo dài, ngắn thì tự co lại, vậy là sẽ đẹp ngay 

muốn bảng tự co, hay giãn theo hợp ý  thì chỉ cần chọn table và kéo thôi bác ạ

smile.png

Hề hề hề,

Cám ơn bác Tue_NV đã hướng dẫn, Nhưng do mình chưa rành về table (do quen dùng CAD2004) nên chưa dám áp dụng. Mình chỉ sửa lại một chút cái lisp cũ của bác SSG chứ không phải viết mới bác ạ.


  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#5 anhbkhcm

anhbkhcm

    biết vẽ circle

  • Members
  • PipPip
  • 39 Bài viết
Điểm đánh giá: 5 (bình thường)

Đã gửi 13 March 2013 - 10:27 PM

Em có down lisp xuất tọa độ vc trên diễn đàn nhưng em gặp 1 số vướng mắc mong các anh giúp em

hình file bản vẽ cuae em như thế này ạ

Untitled_zps0cdb390e.png

em
muốn chỉnh file lisp để cho cái khung xuất tọa độ chiều ngang nó tăng
lên vì như bản vẽ thì tọa độ nó bị chùm cả ra ngoài. và cái vị trí thứ
tự 1,2,3,4 số 4,3 bị dính vào hình em muốn nó dịch sang bên trái với
khoảng cách như số 1,2 ạ. Mong các anh giúp em. Em cảm ơn trước ạ

đây là file bản vẽ

http://www.mediafire...xih9xd2os48gixg

còn đây là file lisp 

http://www.mediafire...rleu61gkzhse69s

Của Bạn Đây. nhưng bạn muốn đẹp thì tạo text style chọn font theo ý bạ trước. lệnh (st) để tạo trước.

; free lisp from cadviet.com
;;; this lisp was downloaded from http://www.cadviet.c...showtopic=12225
;GHI TOA DO CAC DIEM VA THONG KE THANH BANG (tabel)
----------------------------------------------
(defun C:td (/ diem PT1 PT2 PT3 tapx tapy
           x y xx yy h n di kc ten
           C PT PTX PTY PTD PTC N
           p1 p2 p3 p4 p11 p22 p33 L1 L2 L11 L22)
(setvar "cmdecho" 0 )
(command "Undo" "Begin")  
  (setq om (getvar "osmode"))
  (setq tapx '()
    tapy '()
    stt '()
    k 0
    h (getreal "\nnhap chieu cao chu:")
    ten (getstring "\nNhap ten diem:"))

    
(while
  (setq diem (getpoint "\nchon cac vi tri co toa do can ghi:"))
  (progn
    (setq   PT1 (list(+ (* 3 h) (car diem))(+ (* 3 h) (cadr diem)))
        PT2 (list (car PT1) (- (cadr PT1)(+ 1 h) ) )
         x (rtos(car diem) 2 4)
             y (rtos (cadr diem) 2 4)
       tapx (append tapx (list x))
       tapy (append tapy (list y))
         k (+ 1 k)
         N (strcat ten (rtos k 2 0))
        stt (append stt (list N))
      );setq
  (setvar "osmode" 0)
  (command "text" "j" "BL" PT1 h 0 x)
  (setq TB (textbox (entget(entlast)))
    LC (car TB)
    RC (cadr TB)
    di (distance LC RC)
    PT3 (polar PT1 0 (+ di h))
    C  (polar PT3 0 (* 1.5 h))
   );setq
    (command "text" PT2 h 0 y
         "pline" diem PT1 PT3 ""
         "circle" (polar PT3 0 (* 1.8 h)) (* 1.8 h)
         "text" "m" (polar PT3 0 (* 1.8 h)) h 0 N )
    
    (setvar "osmode" om)
    );progn   
  );dong while
 
;tao bang thong ke
  (setq    kc (* 2 di)
        PT (getpoint"\nvi tri dat bang :")
    PTC (list (+ (* 2 kc) di (car PT)) (cadr PT))
      p1 (list (car PT) (+ (cadr PT)(* 2 h)))
      p2 (list (car PTC) (+ (cadr PTC)(* 2 h)))
          p3 (list (car p1) (+ (cadr p1)(* 2 h)))
      p4 (list (car p2) (+ (cadr p2)(* 2 h)))
    PTD (list (+ (/ di 2) (car PT))  (+ h (cadr PT)))
    PTX (list (+ di (/ di 2) (car PTD)) (cadr PTD))
    PTY (list (+ kc (car PTX)) (cadr PTX))
      p11 (list (+ (/ di 2) (car p1))  (+ h (cadr p1)))
      p22 (list (+ di (/ di 2) (car p11)) (cadr p11))
      p33 (list (+ kc (car p22)) (cadr p22))
      L1 (list (+ di (car p3))(cadr p3))
      L2 (list (+ kc (car L1))(cadr L1))
     n (length tapx)
     k 0
    );setq
(setvar "osmode" 0)
  (command "line" p1 p2 ""
       "text" "j" "m" p11 h 0 "STT"
       "text" "j" "m" p22 h 0 "Toa do X"
       "text" "j" "m" p33 h 0 "Toa do Y"
       "line" p3 p4 "")    

  (while (< k n)
    (setq xx (nth k tapx)
      yy (nth k tapy)
     tstt(nth k stt))
    (command "text" "j" "m" PTD h 0 tstt
             "text" "j" "m" PTX h 0 xx
         "text" "j" "m" PTY h 0 yy
         "line" PT PTC "")    
    (setq PT (list (car PT) (- (cadr PT)(* 2 h)))
         PTC (list (+ (* 2 kc) di (car PT)) (cadr PT))
     PTD (list (+ (/ di 2) (car PT))  (+ h (cadr PT)))
     PTX (list (+ di (/ di 2) (car PTD)) (cadr PTD))
     PTY (list (+ kc (car PTX)) (cadr PTX))
      k (+ 1 k));setq
  );while
  (if (= k n)
    (setq PT (list (car PT) (+ (cadr PT)(* 2 h)))
          PTC (list (+ (* 2 kc) di (car PT)) (cadr PT))
      L11 (list (+ di (car PT))(cadr PT))
      L22 (list (+ kc (car L11))(cadr L11))
      );setq
    );if
(command "line" p3 PT ""
          "line" p4 PTC ""
      "line" L1 L11 ""
      "line" L2 L22 "")
(setvar "osmode" om )
(setvar "cmdecho" 1)
(prompt"\nxong\n")
  (command "Undo" "End")
  (princ)
);DONG toado
(princ "Lenh td, tao text style truoc cho dep")


  • 1