Đến nội dung


Hình ảnh
* * * - - 2 Bình chọn

Viết Lisp theo yêu cầu


  • Chủ đề bị khóa Chủ đề bị khóa
2780 replies to this topic

#1601 Phiphi-

Phiphi-

    biết lệnh minsert

  • Members
  • PipPipPipPipPipPip
  • 434 Bài viết
Điểm đánh giá: 175 (tàm tạm)

Đã gửi 24 February 2009 - 09:38 AM

Chào bác Phiphi,
Trong lisp mình viết, sử dụng việc chọn chuẩn là chọn hai điểm có tọa độ là các text mà bác muốn. Như vậy việc nội suy sẽ đơn giản hơn.

Nếu chọn text như bác đề nghị, mình thấy sẽ phức tạp hơn vì nó phụ thuộc vào người thiết lập bản vẽ trước đó rất nhiều. Text mà bác chọn là một đối tượng hoàn toàn độc lập với cái điểm bác định chọn. Người thiết kế có thể tùy tiện đặt cái text đó vào bất cứ đâu trên bản vẽ mà không cần có ràng buộc gì với điểm bác định chọn làm cơ sở nội suy. Ngay cả khi bác có đặt mối ràng buộc nào đó để giúp bác dễ nội suy thì người lập trình cũng không có cơ sở để tìm ra mối ràng buộc đó vì họ không hiểu cách ràng buộc của bác. Cũng có thể do mình còn non nớt về lisp nên chưa biết chăng????
Do vậy để có thể làm được theo ý bác, bác có thể cung cấp cho mình biết cái mối liên quan giữa cái text của bác với cái điểm chuẩn để nội suy thì mình có thể làm được. Trong trường hợp này, tốt nhất bác cho mình biết mối tương quan giữa điểm chèn text và điểm chọn bác ạ.
Ví dụ như trong cái lisp mình đã gửi bác thì mối tương quan đó được thể hiện ở tọa độ điểm chèn text là '( (car p4) (+ 5 (cadr p4))) với p4 là điểm chọn.

Theo bản vẽ bác đã post thì mình thấy việc chọn điểm chuẩn sẽ tốt hơn là việc chọn text biểu diễn điểm chuẩn bác ạ. Vì trên bản vẽ bác đã sử dụng pdmode = 3 nên việc xác định điểm sẽ rất chính xác chứ không tù mù như khi dùng pdmode = 0 bác ạ. Bác chỉ cần chọn điểm tương ứng với cái text bác muốn là lisp chạy vi vu ngay bác ạ.

Rất mong bác hiểu và thông cảm cho khả năng có hạn của mình. Chúc bác vui.

Lisp Bác viết dùng để thiết kế từ bước đầu, còn Lisp của bác Tdvn dùng để nhập thêm data được nội suy từ các số do người thiết kế đã thực hiện trước.
Cả hai Lisp đểu sử dụng tốt cả. Xin cảm ơn hai Bác nhé. PP.
  • 0

#1602 tdvn

tdvn

    biết lệnh rotate

  • Members
  • PipPipPip
  • 134 Bài viết
Điểm đánh giá: 53 (tàm tạm)

Đã gửi 24 February 2009 - 09:56 AM

Wow, đúng là cái PP muốn.
Bác có thể sửa thêm để cho phép User chọn được nhiều điểm nội suy sau khi chỉ cần pick 2 số đầu tiên mà thôi.
Phần text thì copy đúng như 2 số đã cho hoặc cho phép User input tuỳ theo sở thích.
Cám ơn Bác rất nhiều

Câu "Phần text thì copy đúng như 2 số đã cho hoặc cho phép User input tuỳ theo sở thích" mình chưa hiểu lắm. Phần bổ sung như sau:
(defun C:NOISUY( / n1 n2 p p1 p2 pt h h1 h2 ht st1 st2)
(defun dxf( name n)
(cdr (assoc n (entget name)))
)
(defun gocam( goc)
(if (< goc 0.0) (+ 360.0 goc) goc)
)
(defun pvi( p1 p2)
(/ (* 180 (angle p1 p2)) pi)
)
(defun ra( g)
(/ (* g pi) 180)
)
(defun diemvuonggoc( p1 p2 p / p0)
(setq p0 (polar p (ra (+ 90.0 (gocam (pvi p1 p2)))) 10.0))
(inters p1 p2 p p0 nil)
)
(while (and (setq n1 (entsel "\nChon text 1")) (setq n2 (entsel "\nChon text 2")))
(setq n1 (car n1) n2 (car n2))
(while (setq p (getpoint "\nChon diem noi suy"))
(setq p1 (dxf n1 10) p2 (dxf n2 10) st1 (dxf n1 1) st2 (dxf n2 1))
(setq h1 (atof st1) h2 (atof st2))
(if (> h1 h2) (setq pt p2 p2 p1 p1 pt ht h2 h2 h1 h1 ht))
(setq p (diemvuonggoc p1 p2 p))
(if (and (> (distance p p2) (distance p p1)) (> (distance p p2) (distance p2 p1)))
(setq h (- h1 (/ (* (- h2 h1) (distance p p1)) (distance p1 p2))))
(setq h (+ h1 (/ (* (- h2 h1) (distance p p1)) (distance p1 p2))))
)
(command "_.text" p 0.5 0.0 (rtos h 2 3))
)
)
)
  • 0

#1603 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 24 February 2009 - 10:48 AM

Câu "Phần text thì copy đúng như 2 số đã cho hoặc cho phép User input tuỳ theo sở thích" mình chưa hiểu lắm. Phần bổ sung như sau:
(defun C:NOISUY( / n1 n2 p p1 p2 pt h h1 h2 ht st1 st2)
(defun dxf( name n)
(cdr (assoc n (entget name)))
)
(defun gocam( goc)
(if (< goc 0.0) (+ 360.0 goc) goc)
)
(defun pvi( p1 p2)
(/ (* 180 (angle p1 p2)) pi)
)
(defun ra( g)
(/ (* g pi) 180)
)
(defun diemvuonggoc( p1 p2 p / p0)
(setq p0 (polar p (ra (+ 90.0 (gocam (pvi p1 p2)))) 10.0))
(inters p1 p2 p p0 nil)
)
(while (and (setq n1 (entsel "\nChon text 1")) (setq n2 (entsel "\nChon text 2")))
(setq n1 (car n1) n2 (car n2))
(while (setq p (getpoint "\nChon diem noi suy"))
(setq p1 (dxf n1 10) p2 (dxf n2 10) st1 (dxf n1 1) st2 (dxf n2 1))
(setq h1 (atof st1) h2 (atof st2))
(if (> h1 h2) (setq pt p2 p2 p1 p1 pt ht h2 h2 h1 h1 ht))
(setq p (diemvuonggoc p1 p2 p))
(if (and (> (distance p p2) (distance p p1)) (> (distance p p2) (distance p2 p1)))
(setq h (- h1 (/ (* (- h2 h1) (distance p p1)) (distance p1 p2))))
(setq h (+ h1 (/ (* (- h2 h1) (distance p p1)) (distance p1 p2))))
)
(command "_.text" p 0.5 0.0 (rtos h 2 3))
)
)
)

Chào bác tdvn,
Lisp bác viết giúp mình được khá nhiều về việc đơn giản hóa cái logic của người lập trình. Cái bác Phiphi cần theo mình hiểu là bác cho bác ấy thêm một biến làm giá trị của độ chính xác hiển thị chuỗi của hàm rtos ấy mà. Biến này yêu cầu người dùng nhập vào khi chạy lisp bác ạ.
Ví dụ:
Bác thêm dòng code này:
(setq a (getint "\n Nhap do chinh xac hien thi: ")) vào trước dòng (command "_.text" .........) hoặc trước cả dòng code (While ........) tùy theo ý của bác.
Đổi dòng code viết text trên thành ( Command "_.text" p 0.5 0.0 (rtos h 2 a))

Mình đoán vậy, không biết có đúng ý của bác Phiphi không, mong bác đừng giận.
Chúc bác 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.

#1604 cuongtk2

cuongtk2

    biết vẽ ellipse

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

Đã gửi 24 February 2009 - 11:57 AM

Bác thử cái này xem đúng ý bác không
(defun C:NOISUY( / n1 n2 p p1 p2 pt h h1 h2 ht st1 st2)
(defun dxf( name n)
(cdr (assoc n (entget name)))
)
(defun gocam( goc)
(if (< goc 0.0) (+ 360.0 goc) goc)
)
(defun pvi( p1 p2)
(/ (* 180 (angle p1 p2)) pi)
)
(defun ra( g)
(/ (* g pi) 180)
)
(defun diemvuonggoc( p1 p2 p / p0)
(setq p0 (polar p (ra (+ 90.0 (gocam (pvi p1 p2)))) 10.0))
(inters p1 p2 p p0 nil)
)
(while (and (setq n1 (entsel "Chon text 1")) (setq n2 (entsel "Chon text 2")) (setq p (getpoint "\nChon diem noi suy")))
(setq n1 (car n1) n2 (car n2))
(setq p1 (dxf n1 10) p2 (dxf n2 10) st1 (dxf n1 1) st2 (dxf n2 1))
(setq h1 (atof st1) h2 (atof st2))
(if (> h1 h2) (setq pt p2 p2 p1 p1 pt ht h2 h2 h1 h1 ht))
(setq p (diemvuonggoc p1 p2 p))
(if (and (> (distance p p2) (distance p p1)) (> (distance p p2) (distance p2 p1)))
(setq h (- h1 (/ (* (- h2 h1) (distance p p1)) (distance p1 p2))))
(setq h (+ h1 (/ (* (- h2 h1) (distance p p1)) (distance p1 p2))))
)
(command "_.text" p 0.5 0.0 (rtos h 2 3))
)
)


Theo mình nghĩ bạn nên để n1 và n2 ra ngoài vòng lặp while, chỉ để lại p để chỉ phải chọn text 1 lần sau đó pick điểm p liên tiếp tuỳ ý.
Mọi thứ còn lại của bạn là ổn rồi
  • 0

#1605 tdvn

tdvn

    biết lệnh rotate

  • Members
  • PipPipPip
  • 134 Bài viết
Điểm đánh giá: 53 (tàm tạm)

Đã gửi 24 February 2009 - 12:23 PM

Theo mình nghĩ bạn nên để n1 và n2 ra ngoài vòng lặp while, chỉ để lại p để chỉ phải chọn text 1 lần sau đó pick điểm p liên tiếp tuỳ ý.
Mọi thứ còn lại của bạn là ổn rồi

Chào bạn. ý của bác mình đã cập nhật vào bản mới rồi đó (bản ngày hôm nay).

Chào bác tdvn,
Lisp bác viết giúp mình được khá nhiều về việc đơn giản hóa cái logic của người lập trình. Cái bác Phiphi cần theo mình hiểu là bác cho bác ấy thêm một biến làm giá trị của độ chính xác hiển thị chuỗi của hàm rtos ấy mà. Biến này yêu cầu người dùng nhập vào khi chạy lisp bác ạ.
Ví dụ:
Bác thêm dòng code này:
(setq a (getint "\n Nhap do chinh xac hien thi: ")) vào trước dòng (command "_.text" .........) hoặc trước cả dòng code (While ........) tùy theo ý của bác.
Đổi dòng code viết text trên thành ( Command "_.text" p 0.5 0.0 (rtos h 2 a))

Mình đoán vậy, không biết có đúng ý của bác Phiphi không, mong bác đừng giận.
Chúc bác vui.

Mình nghỉ những vấn đề như độ cao textt, font hay đcx ... tức là những cái khá đơn giản quen thuộc để bác PP tự cập nhật theo ý thích của bác ấy. Mình cũng là dân viết lisp đã lâu nhưng trên diễn đàn này nhiều cái mình cũng bí nên tham gia viết cho vui, để vận dụng đầu óc và học hỏi.
  • 0

#1606 Phiphi-

Phiphi-

    biết lệnh minsert

  • Members
  • PipPipPipPipPipPip
  • 434 Bài viết
Điểm đánh giá: 175 (tàm tạm)

Đã gửi 24 February 2009 - 03:54 PM

Câu "Phần text thì copy đúng như 2 số đã cho hoặc cho phép User input tuỳ theo sở thích" mình chưa hiểu lắm.
...

Vì nếu dùng Lisp áp dụng trong b/v thí dụ trên thì text nội suy ra không giống như 2 số (màu vàng) vừa pick.
Hình đã gửi
Hình đã gửi
Vì vậy User phải sửa lại đoạn code: (command "_.text" p 0.5 0.0 (rtos h 2 3)) thì mới có text giống như text trong thí dụ, nhưng nếu bác cho phép User input kích thước, angle của text thì chắc sẽ tiện lợi hơn.
Thank you.
  • 0

#1607 sucuph

sucuph

    biết zoom

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

Đã gửi 24 February 2009 - 04:48 PM

Nhờ mọi người viết dùm cái lisp đo hệ số mái dốc, khi cần chỉ cần pick vào đối tượng là cho biết hệ số mái.Mong mọi người giúp đỡ.Thanks!
  • 0

#1608 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 24 February 2009 - 05:07 PM

Vì nếu dùng Lisp áp dụng trong b/v thí dụ trên thì text nội suy ra không giống như 2 số (màu vàng) vừa pick.
Hình đã gửi
Hình đã gửi
Vì vậy User phải sửa lại đoạn code: (command "_.text" p 0.5 0.0 (rtos h 2 3)) thì mới có text giống như text trong thí dụ, nhưng nếu bác cho phép User input kích thước, angle của text thì chắc sẽ tiện lợi hơn.
Thank you.

Chào bác Phiphi,
Để làm điều bác muốn cũng đơn giản thôi. Bác hãy đặt biến cho các tham số mà bác muốn user tự nhập. Sau đó thay tên biến đó vào vị trí tương ứng trong dòng lệnh (command "-.text" .......) là được mà. Bác có thể tham khảo cách thay đổi độ chính xác thể hiện của giá trị tọa độ điểm nội suy mà mình đã trình bày trong bài post trả lời bác tdnv.
Chúc bác thành công.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#1609 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 24 February 2009 - 05:14 PM

Nhờ mọi người viết dùm cái lisp đo hệ số mái dốc, khi cần chỉ cần pick vào đối tượng là cho biết hệ số mái.Mong mọi người giúp đỡ.Thanks!

Bác sucuph ơi,
Hệ số mái dốc là gì bác nhỉ ? Là góc nghiêng hay tang của góc nghiêng đó, hay tỉ số giữa chênh lệch độ cao và khoảng cách giữa hình chiếu của hai điểm......
Đối tượng mà bác muốn lấy độ dốc là line, pline, hay spline ......
Bác có thể cho biết cụ thể hơn một chút về yêu cầu của bác không ạ.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#1610 cuongtk2

cuongtk2

    biết vẽ ellipse

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

Đã gửi 24 February 2009 - 05:32 PM

Vì nếu dùng Lisp áp dụng trong b/v thí dụ trên thì text nội suy ra không giống như 2 số (màu vàng) vừa pick.
Hình đã gửi
Hình đã gửi
Vì vậy User phải sửa lại đoạn code: (command "_.text" p 0.5 0.0 (rtos h 2 3)) thì mới có text giống như text trong thí dụ, nhưng nếu bác cho phép User input kích thước, angle của text thì chắc sẽ tiện lợi hơn.
Thank you.

Thực ra bạn không cần phải nhập vào góc nghiêng và chiều cao chữ. Lấy luôn code dxf của text mình chọn lúc đầu cho tiện.
Thay vì dùng hàm (command "text" .....)
thì bạn dùng
(setq n1 (subst (cons 10 p) (assoc 10 n1) n1)
n1 (subst (cons 40 (rtos h 2 3)) (assoc 40 n1) n1))
(entmake n1)

Như vậy text mới được tạo ra giống text mẹ lúc đầu , chỉ khác vị trí code-10 và nội dung code-40
  • 0

#1611 Phiphi-

Phiphi-

    biết lệnh minsert

  • Members
  • PipPipPipPipPipPip
  • 434 Bài viết
Điểm đánh giá: 175 (tàm tạm)

Đã gửi 24 February 2009 - 06:19 PM

PP đang tìm 1 Lisp dùng để nội suy từ 2 số tượng trưng cho 2 cao độ, khi dùng chuột pick 1 điểm hay nhiều điểm nào đó dù bên trong hay/và 2 bên ngoài của 2 chử số trên (chỉ pick tương đối thẳng hàng với 2 số đã cho). Lisp sẽ dủng phương pháp tam giác đồng dạng để nội suy ra rồi vẽ thêm Points và đặt giá trị mới bên cạnh point.
Nhờ các Bác post lại hoặc viết giúp cho PP lisp mới. Xin cảm ơn.
Xin lưu ý, các chử số này chính là cao độ Z nằm bất kỳ vị trí nào trên bản vẽ, vị trí các số hoặc các Points chính là toạ độ X, Y.
Đây là hình và bản vẽ minh hoạ:
http://www.cadviet.c...w_numbers_1.zip
Hình đã gửi
Hình đã gửi

Phần nội suy rồi đặt kết quả ngay tại những điểm User chọn của LISP các Bác viết thì làm việc OK rồi, nhưng còn phần "vẽ thêm Points" thì chưa có.
Đây là đoạn code vẽ thêm Points bên cạnh các số, nhờ các Bác viết chung vào LISP trên nhé. Vì khi có các Points, chúng ta có thể dùng cho các việc khác nữa. Thanks you.
Tham khảo thêm ở topic này: http://www.cadviet.c...?showtopic=9019
(defun c:ins_point (/ ss i ent point curLayer)
(if (setq ss (ssget (list (cons 0 "TEXT"))))
(progn
(setq i 0
curLayer (getvar "clayer"))
(if (not (tblsearch "layer" "points"))
(command "-layer" "n" "points" "c" "1" "points" "") ) ; tao layer Point
(setvar "clayer" "points") ; Set layer Current
(repeat (sslength ss)
(setq ent (ssname ss i)
point (cdr (assoc 10 (entget ent)))
txt (atof(cdr (assoc 1 (entget ent))))
p (list (car point)(cadr point) txt)
i (1+ i)
)
(entmake (list (cons 0 "POINT") (cons 10 p)))
)
(setvar "clayer" curLayer)
)
)
(princ)
)

  • 0

#1612 sucuph

sucuph

    biết zoom

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

Đã gửi 24 February 2009 - 06:23 PM

Bác sucuph ơi,
Hệ số mái dốc là gì bác nhỉ ? Là góc nghiêng hay tang của góc nghiêng đó, hay tỉ số giữa chênh lệch độ cao và khoảng cách giữa hình chiếu của hai điểm......
Đối tượng mà bác muốn lấy độ dốc là line, pline, hay spline ......
Bác có thể cho biết cụ thể hơn một chút về yêu cầu của bác không ạ.

Hình đã gửi
trình bày cụ thể bằng hình, mong anh em giúp đỡ nha. Anh em quan tâm click xem hình đầy đủ mới thấy rõ, ảnh chất lượng kém quá.
  • 0

#1613 cuongtk2

cuongtk2

    biết vẽ ellipse

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

Đã gửi 24 February 2009 - 07:56 PM

Hình đã gửi
trình bày cụ thể bằng hình, mong anh em giúp đỡ nha. Anh em quan tâm click xem hình đầy đủ mới thấy rõ, ảnh chất lượng kém quá.

Hình như bạn nhầm H/L thành L/H, bình thường nói mái dốc 60% hoặc 15% tức là tan(anpha)=0.60 = H/L
Đoạn code này có thể giúp bạn, trong Lisp ko có hàm tan, thường dùng sin/cos=tan, nếu cần cotan thì chỉnh lại nhé.
(defun c:gocdoc ( / ent p1 cao_text sp ep ang dodoc thap_phan)
(vl-load-com)
(setq ent (entsel "\nChon mai doc:"))
(setq cao_text 0.5
thap_phan 2
p1 (cadr ent)
ent (car ent)
sp (vlax-curve-getStartPoint ent)
ep (vlax-curve-getEndPoint ent)
ang (angle sp ep)
dodoc (* (abs (/ (sin ang) (cos ang))) 100)
dodoc (strcat (rtos dodoc 2 thap_phan) "%"))
(command "_.text" p1 cao_text 0 dodoc)
)
  • 1

#1614 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 24 February 2009 - 09:22 PM

Phần nội suy rồi đặt kết quả ngay tại những điểm User chọn của LISP các Bác viết thì làm việc OK rồi, nhưng còn phần "vẽ thêm Points" thì chưa có.

Trời ạ, bác Phiphi đã test cái lisp của mình chưa vậy,
Trong lisp đó đã có vẽ point rồi mà. Đọc lisp của bác tdnv đúng là chưa có vẽ point, nhưng tưởng bác không quan tâm đến nó nên mình không góp ý. Bác xem lại cái lisp của mình xem nhé.
Chúc bác 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.

#1615 tdvn

tdvn

    biết lệnh rotate

  • Members
  • PipPipPip
  • 134 Bài viết
Điểm đánh giá: 53 (tàm tạm)

Đã gửi 25 February 2009 - 12:28 AM

Trời ạ, bác Phiphi đã test cái lisp của mình chưa vậy,
Trong lisp đó đã có vẽ point rồi mà. Đọc lisp của bác tdnv đúng là chưa có vẽ point, nhưng tưởng bác không quan tâm đến nó nên mình không góp ý. Bác xem lại cái lisp của mình xem nhé.
Chúc bác vui.

Lấy font, độ cao hay góc nghiêng text và vẽ point
(defun C:NOISUY( / n1 n2 p p1 p2 pt h h1 h2 ht)
(defun dxf( name n)
(cdr (assoc n (entget name)))
)
(defun gocam( goc)
(if (< goc 0.0) (+ 360.0 goc) goc)
)
(defun pvi( p1 p2)
(/ (* 180 (angle p1 p2)) pi)
)
(defun ra( g)
(/ (* g pi) 180)
)
(defun deg( so)
(/ (* 180 so) pi)
)
(defun diemvuonggoc( p1 p2 p / p0)
(setq p0 (polar p (ra (+ 90.0 (gocam (pvi p1 p2)))) 10.0))
(inters p1 p2 p p0 nil)
)
(while (and (setq n1 (entsel "text 1")) (setq n2 (entsel "text 2")))
(setq n1 (car n1) n2 (car n2))
(while (setq p (getpoint "\nDiem"))
(setq p1 (dxf n1 10) p2 (dxf n2 10) st1 (dxf n1 1) st2 (dxf n2 1))
(setq h1 (atof st1) h2 (atof st2))
(if (> h1 h2) (setq pt p2 p2 p1 p1 pt ht h2 h2 h1 h1 ht))
(setq p (diemvuonggoc p1 p2 p))
(if (and (> (distance p p2) (distance p p1)) (> (distance p p2) (distance p2 p1)))
(setq h (- h1 (/ (* (- h2 h1) (distance p p1)) (distance p1 p2))))
(setq h (+ h1 (/ (* (- h2 h1) (distance p p1)) (distance p1 p2))))
)
(command "_.text" "s" (dxf n1 7) p (dxf n1 40) (deg (dxf n1 50)) (rtos h 2 3))
(entmake (list (cons 0 "POINT") (cons 8 "points") (cons 10 p)))
)
)
)
  • 0

#1616 Phiphi-

Phiphi-

    biết lệnh minsert

  • Members
  • PipPipPipPipPipPip
  • 434 Bài viết
Điểm đánh giá: 175 (tàm tạm)

Đã gửi 25 February 2009 - 05:24 AM

Lấy font, độ cao hay góc nghiêng text và vẽ point
...

Perfect ! Cám ơn bác TDVN.
Have a good day. PP.

@phamthanhbinh: Đúng là LISP Bác viết có vẽ được Points. Thank you.
  • 0

#1617 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 25 February 2009 - 10:08 AM

Perfect ! Cám ơn bác TDVN.
Have a good day. PP.

@phamthanhbinh: Đúng là LISP Bác viết có vẽ được Points. Thank you.

Chào bác Phiphi,
Bác chú ý là cái lisp của bác tdnv sẽ tạo ra text về kiểu, kích cỡ và góc nghiêng đúng với text đầu tiên mà bác chọn chứ không phải là tùy ý bác đâu nhé. Trong một số trường hợp cụ thể bác vẫn phải can thiệp vào lisp để có được text ưng ý đó.
Mặt khác cái điểm chuẩn mà bác tdnv chọn để nội suy không phải là điểm mang cao độ được ghi mà là điểm đặt của text ghi cao độ. Trong trường hợp các điểm đặt này được đặt tùy ý người thiết kế có thể dẫn tới kết quả nội suy không thực đúng như mong muốn. (ví dụ text1 đặt cao hơn điểm thực và text2 đặt thấp hơn điểm thực chẳng hạn)
Cách nội suy của bác tdnv khác với cách nội suy của mình. Bác tdnv nội suy theo hình chiếu vuông góc của điểm chọn trên đường nối hai điểm chuẩn. Còn mình nội suy theo hình chiếu song song với hướng trục đứng của điểm chọn trên đường nối hai điểm chuẩn.
Bác nên hiểu rõ điều này để chọn phương án nội suy phù hợp với yêu cầu của bác nhé.

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

#1618 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 25 February 2009 - 10:21 AM

Thực ra bạn không cần phải nhập vào góc nghiêng và chiều cao chữ. Lấy luôn code dxf của text mình chọn lúc đầu cho tiện.
Thay vì dùng hàm (command "text" .....)
thì bạn dùng
(setq n1 (subst (cons 10 p) (assoc 10 n1) n1)
n1 (subst (cons 40 (rtos h 2 3)) (assoc 40 n1) n1))
(entmake n1)

Như vậy text mới được tạo ra giống text mẹ lúc đầu , chỉ khác vị trí code-10 và nội dung code-40


Chào bác cuongtk2,
Rất cám ơn bác đã truyền cho một chiêu mới trong việc dùng lisp. Tuy nhiên hình như bác có sự quên hay sao ấy. Đoạn code (assoc 40 n1) sẽ cho giá trị chiều cao text chứ không phải nội dung text. Để có nội dung text phải là (assoc 1 n1) chứ bác nhỉ.
Bác xem lại hộ mình tí nhé.
Chúc bác luôn vui vẻ và hạnh phúc.
  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#1619 cuongtk2

cuongtk2

    biết vẽ ellipse

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

Đã gửi 25 February 2009 - 11:32 AM

Chào bác cuongtk2,
Rất cám ơn bác đã truyền cho một chiêu mới trong việc dùng lisp. Tuy nhiên hình như bác có sự quên hay sao ấy. Đoạn code (assoc 40 n1) sẽ cho giá trị chiều cao text chứ không phải nội dung text. Để có nội dung text phải là (assoc 1 n1) chứ bác nhỉ.
Bác xem lại hộ mình tí nhé.
Chúc bác luôn vui vẻ và hạnh phúc.

:cheers: Sorry, nhầm.
Tiện thể cho minh hỏi trong diễn đàn có ai biết về DoubleClick không vậy.
Ví dụ như mình DoubleClick vào text có nội dung "2%%C18" thì có thể dùng hàm lisp gì điều khiển chuỗi này để Edit nhạy ngữ cảnh.
  • 0

#1620 tuan_thietkedien

tuan_thietkedien

    biết lệnh mirror

  • Members
  • PipPipPip
  • 153 Bài viết
Điểm đánh giá: 15 (tàm tạm)

Đã gửi 25 February 2009 - 11:51 AM

Các bác pro ơi viết dùm em lísp khi click vào 2 điểm của hình chữ nhật bao quanh đối tượng cần tạo Block thì lísp sẽ tạo ra 1 Block có tên là tên file bản vẽ, điểm chèn là tâm của hình chữ nhật.

http://www.cadviet.c...iles/xe_hoi.dwg

Em xin cám ơn nhiều lắm.
  • 0