Đến nội dung


Hình ảnh
- - - - -

[Nhờ chỉnh sửa] Lisp lấy tọa độ của các đỉnh của 1 polyline của bác ssg


  • Please log in to reply
10 replies to this topic

#1 dauquangminh

dauquangminh

    biết vẽ arc

  • Members
  • PipPip
  • 41 Bài viết
Điểm đánh giá: 36 (tàm tạm)

Đã gửi 03 August 2011 - 09:53 AM

Lisp cũ lấy tọa độ của một hình khép kín xuất ra bảng của bác ssg:
Hình đã gửi

;; 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 (* 6 h))
p3 (polar p2 0 (* 8 h))
p4 (polar p3 0 (* 8 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 (* 8 h))
(linepx (polar p0 (* 1.5 pi) (* 3 h)) (* 20 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 (* 20 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))
)
(wtxtMC num (polar pv 0 h) h)
(setq j (1+ j))
)

;;;FINISH
(setvar "osmode" oldos)
(princ)
)
;;;-------------------------------------------------------------------------------

Nay em muốn sửa thành lisp mới như sau:
- lấy tọa độ của tất cả các đỉnh của 1 polyline xuất ra bảng
- lisp sẽ hỏi có đánh số theo chiều thuận không? ( chọn y là có, tức sẽ đánh số từ trái sang phải, chọn n là chiều ngược lại)
- text đánh số đưa về layer defpoints, bảng tọa độ thuộc layer hiện hành
Hình đã gửi
Cảm ơn các bác.
  • 0

#2 thanhduan2407

thanhduan2407

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 993 Bài viết
Điểm đánh giá: 223 (khá)

Đã gửi 03 August 2011 - 10:45 AM

Bạn dùng lisp đảo chiều Polyline để thực hiện. Biết đâu là chiều thuận mà bạn chọn. Với lại bước thực hiện nhỏ lẻ như việc đưa nó thành layer gì gì đó thì cũng chả cần lisp gì cho mệt ra.
Còn đây là lisp đảo chiều PLine
http://www.cadviet.c...pic=10341&st=20
  • 1



Tôi là con kiến bò trên sa mạc kiến thức bao la. Biển học thật rộng lớn







#3 dauquangminh

dauquangminh

    biết vẽ arc

  • Members
  • PipPip
  • 41 Bài viết
Điểm đánh giá: 36 (tàm tạm)

Đã gửi 03 August 2011 - 04:25 PM

Bạn dùng lisp đảo chiều Polyline để thực hiện. Biết đâu là chiều thuận mà bạn chọn. Với lại bước thực hiện nhỏ lẻ như việc đưa nó thành layer gì gì đó thì cũng chả cần lisp gì cho mệt ra.
Còn đây là lisp đảo chiều PLine
http://www.cadviet.c...pic=10341&st=20

Bạn ơi. Mình đâu muốn đảo chiều gì đâu. Mình chỉ muốn sửa cái lisp lấy tọa độ các đỉnh trong một hình kín thành lisp lấy tọa độ các đỉnh của 1 polyline thui.
Như ở trên mình đã nói í.
  • 0

#4 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 03 August 2011 - 04:41 PM

dauquangminh lại không tính kỹ rồi :
- Chiều thuận tức như thế nào được định nghĩa là thuận ??? Theo chiều trái -> phải? , trên xuống dưới? xuôi kim đồng hồ ? chiều vẽ Pline ??...
Ví dụ như hình này bạn sẽ đánh thế nào ??

Hình đã gửi

Đây mới chỉ vòng lại 1 lần, nếu nó loằng ngoằng hoặc tự cắt chính nó, thì việc lấy list tọa độ để sắp xếp theo chiều X tăng dần và đánh số, thì nó sẽ lộn xộn lắm đó
  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#5 thanhduan2407

thanhduan2407

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 993 Bài viết
Điểm đánh giá: 223 (khá)

Đã gửi 03 August 2011 - 05:42 PM

Bạn ơi. Mình đâu muốn đảo chiều gì đâu. Mình chỉ muốn sửa cái lisp lấy tọa độ các đỉnh trong một hình kín thành lisp lấy tọa độ các đỉnh của 1 polyline thui.
Như ở trên mình đã nói í.

Bạn không hiểu ý của mình chăng? Sử dụng lisp đảo chiều rồi dùng lisp của bác ssg là xong. Bạn diễn đạt thì cho thành 2 hình để phân biệt cho dễ trước và sau.
  • 0



Tôi là con kiến bò trên sa mạc kiến thức bao la. Biển học thật rộng lớn







#6 dauquangminh

dauquangminh

    biết vẽ arc

  • Members
  • PipPip
  • 41 Bài viết
Điểm đánh giá: 36 (tàm tạm)

Đã gửi 03 August 2011 - 09:18 PM

dauquangminh lại không tính kỹ rồi :
- Chiều thuận tức như thế nào được định nghĩa là thuận ??? Theo chiều trái -> phải? , trên xuống dưới? xuôi kim đồng hồ ? chiều vẽ Pline ??...
Ví dụ như hình này bạn sẽ đánh thế nào ??

Hình đã gửi

Đây mới chỉ vòng lại 1 lần, nếu nó loằng ngoằng hoặc tự cắt chính nó, thì việc lấy list tọa độ để sắp xếp theo chiều X tăng dần và đánh số, thì nó sẽ lộn xộn lắm đó

chiều thuận là chiều từ trái sang phải đó bác, như hình minh họa bác gửi cho em nè:
Hình đã gửi
Bác cứ yên tâm, những polyline em muốn lấy tọa độ không phức tạp như bác nghĩ đâu, không loằng ngoằng hay tự cắt chính nó gì cả, nó chỉ đơn giản như hình em minh họa lúc đầu thôi.
  • 0

#7 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 03 August 2011 - 10:23 PM

À, mình thì yên tâm rồi nhưng CAD nhiều lúc nó chẳng yên tâm, giải quyết bài toán thường tốt hơn nếu làm tổng quát :) Ví dụ, như hình trên, việc giải quyết cũng không đơn giản lắm. Theo mình hiểu, việc so sánh thuận nghịch trong ý bạn chỉ là so sánh vị trí point đầu và cuối Pline ?
Nếu đúng thì code có thể giống thế này :
(Chú ý : cách chọn hướng mình gợi ý bạn pick chọn 2 điểm, như thế thao tác sẽ dùng thuần chuột, nhanh hơn là pick, pick , tay trái chọn Y/N, tay phải nhấn Space )

Update :
- Fixed osmode
- Code chạy với cả Pline kín hoặc hở. Nếu kín : đánh theo chiều Pline được tạo
- Fixed lỗi collect đối tượng để tạo Block
- Bỏ 2 hàm collect e

;; by ssg, ketxu update
;; Danh so Pline

;;;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 ST:Check-close (lwp)(equal (car (getVert lwp)) (last (getVert lwp)) 1e-8))
;;;-------------------------------------------------------------------------------
(defun wtxtMC (txt p h) ;;;Write text Middle Center, specify text, point, height
(entmake (list (cons 0 "TEXT") (cons 7 (getvar "textstyle"))(cons 8 (if (tblsearch "Layer" "Defpoints") "Defpoints" (getvar "clayer")))
(cons 1 txt) (cons 10 p) (cons 11 p) (cons 40 h) (cons 72 1) (cons 73 2)))
)

;;;-------------------------------------------------------------------------------

;;;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 (* 6 h))
p3 (polar p2 0 (* 8 h))
p4 (polar p3 0 (* 8 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 (* 8 h))
(linepx (polar p0 (* 1.5 pi) (* 3 h)) (* 20 h))
)
;;;-------------------------------------------------------------------------------


;;;MAIN PROGRAM
;;;-------------------------------------------------------------------------------
(defun C:VC( / h p et p0 p00 pvL oldos j pv num txtL ss bn p1 p2 pvlT times ssDo)
;;;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))
;;;PICK & BASE POINT
(setq et (car (entsel)))
(setq
p1 (getpoint "\n Huong danh so")
p2 (getpoint p1 "\n Huong danh so")
p00 (getpoint "\nDiem chuan bang toa do (phia tren ben trai):")
p0 p00
pvLt (getvert et)
pvL
(cond ((>=(setq dau (*(-(car (car pvLt))(car (last pvlT)))(- (car p1)(car p2)))) 0) pvLt)
((< dau 0) (reverse pvlT)))
oldos (getvar "osmode")
elast (entlast)
ssDo (ssadd)
)
(setvar "osmode" 0)
;;;HEADER
(linepx p0 (* 20 h))
(mesh1)
(txt1 (list "TT" "X" "Y"))
(setq p0 (polar p0 (* 1.5 pi) (* 3 h)))

;;;MAKE RECORDS
(setq j 0)
(repeat
(setq times
(cond ((ST:Check-Close et)(1- (length pvL)))
(T (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
(while (setq elast (entnext elast)) (setq ssDo (ssadd elast ssDo)))
;(setq ss (collect1 et))
(setq bn "1")
(while (tblsearch "block" bn) (setq bn (itoa (1+ (atoi bn)))))
(command "block" bn p00 ssDo "")
(command "insert" bn p00 "" "" "")

;;;WRITE POINT NAME
(setq j 0)
(repeat times
(setq
pv (nth j pvL)
num (itoa (1+ j))
)
(wtxtMC num (polar pv 0 h) h)
(setq j (1+ j))
)

;;;FINISH
(setvar "osmode" oldos)
(princ)
)
;;;-------------------------------------------------------------------------------








  • 3

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#8 dauquangminh

dauquangminh

    biết vẽ arc

  • Members
  • PipPip
  • 41 Bài viết
Điểm đánh giá: 36 (tàm tạm)

Đã gửi 04 August 2011 - 08:20 AM

À, mình thì yên tâm rồi nhưng CAD nhiều lúc nó chẳng yên tâm, giải quyết bài toán thường tốt hơn nếu làm tổng quát :) Ví dụ, như hình trên, việc giải quyết cũng không đơn giản lắm. Theo mình hiểu, việc so sánh thuận nghịch trong ý bạn chỉ là so sánh vị trí point đầu và cuối Pline ?
Nếu đúng thì code có thể giống thế này :
(Chú ý : cách chọn hướng mình gợi ý bạn pick chọn 2 điểm, như thế thao tác sẽ dùng thuần chuột, nhanh hơn là pick, pick , tay trái chọn Y/N, tay phải nhấn Space )

;; by ssg, ketxu update
;; Danh so Pline

;;;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 8 (if (tblsearch "Layer" "Defpoints") "Defpoints" (getvar "clayer")))
(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 (* 6 h))
p3 (polar p2 0 (* 8 h))
p4 (polar p3 0 (* 8 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 (* 8 h))
(linepx (polar p0 (* 1.5 pi) (* 3 h)) (* 20 h))
)
;;;-------------------------------------------------------------------------------


;;;MAIN PROGRAM
;;;-------------------------------------------------------------------------------
(defun C:VC( / h p et p0 p00 pvL oldos j pv num txtL ss bn p1 p2 pvlT)
;;;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 et (car (entsel)))

(setq
p1 (getpoint "\n Huong danh so")
p2 (getpoint p1 "\n Huong danh so")
p00 (getpoint "\nDiem chuan bang toa do (phia tren ben trai):")
p0 p00
pvLt (getvert et)
pvL
(cond ((>(setq dau (*(-(car (car pvLt))(car (last pvlT)))(- (car p1)(car p2)))) 0) pvLt)
((< dau 0) (reverse pvlT)))
oldos (getvar "osmode")
)

;;;HEADER
(linepx p0 (* 20 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))

(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 (length pvL)
(setq
pv (nth j pvL)
num (itoa (1+ j))
)
(wtxtMC num (polar pv 0 h) h)
(setq j (1+ j))
)

;;;FINISH
(setvar "osmode" oldos)
(princ)
)
;;;-------------------------------------------------------------------------------

Mình không thấy lisp lấy tọa độ của điểm cuối cùng, ví dụ polyline có 4 đỉnh thì lisp chỉ lấy tọa độ từ đỉnh 1 đến đỉnh 3 thôi, lạ quá ketxu à. Một điểm nữa là mỗi khi dùng lisp thì tất cả Object snap bị tắt hết, mình phải bấm F3 rồi chọn select all thì mới pick điểm cho hướng đánh số được. :blink:
Hình đã gửi
Hình đã gửi
  • 0

#9 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5448 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 04 August 2011 - 08:46 AM

Mình không thấy lisp lấy tọa độ của điểm cuối cùng, ví dụ polyline có 4 đỉnh thì lisp chỉ lấy tọa độ từ đỉnh 1 đến đỉnh 3 thôi, lạ quá ketxu à... Một điểm nữa là mỗi khi dùng lisp thì tất cả Object snap bị tắt hết, mình phải bấm F3 rồi chọn select all thì mới pick điểm cho hướng đánh số được. :blink:

1). Osnap:
Có lẽ Ketxu code vội nên để nhầm vị trí các dòng. Bạn thay đổi như thế này là đươc:
Move dòng (setvar "osmode" 0) xuống nằm ngay phía trên dòng ;;;HEADER.
2). Thiếu điểm:
Bạn sửa dòng (repeat (1- (length pvL)) thành (repeat (length pvL) là được.
  • 1

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#10 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 04 August 2011 - 09:02 AM

Ồ, vụ osnap là nguyên của bác ssg, ket vẫn để nguyên chưa dám edit, bây giờ thì fix rồi ^^
@dauquangminh : code đã update lại bên trên nhé. Chú ý là lúc pick hướng đánh số, bạn cũng k cần osnap, chỉ cần tick bừa 2 điểm trên màn hình theo hướng trái sang phải hoặc ngược lại thôi.
Cái vụ chừa điểm cuối lại cũng là vì lisp cũ bác ssg cố tình loại điểm này đi, do với Pline kín thì tọa độ điểm đầu - cuối trùng nhau, ket đã fix lại bên trên để làm việc với cả 2 trường hợp. Chúc bạn vui
  • 1

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#11 dauquangminh

dauquangminh

    biết vẽ arc

  • Members
  • PipPip
  • 41 Bài viết
Điểm đánh giá: 36 (tàm tạm)

Đã gửi 04 August 2011 - 09:42 AM

Mình vui quá. Vậy là xong rồi, hết phải lăn tăn suy nghĩ nhức đầu. cảm ơn bác ketxu. :lol:
  • 0