Đế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

#1581 ssg

ssg

    biết lệnh adcenter

  • Vip
  • PipPipPipPipPipPipPip
  • 1228 Bài viết
Điểm đánh giá: 1087 (rất tốt)

Đã gửi 18 February 2009 - 08:27 AM

Chào bác Duy782006,
Đúng như bác nói, tại mình lười check line mà thấy dùng cái dimaligned cho cả các đường ngang dọc đều được nên để như vậy. Vả lại lisp này mới chỉ để thử xem có đúng yêu cầu của bạn dacphuong hay không rồi mới hoàn chỉnh sau. Mình cũng thấy để hoàn chỉnh nó còn khá nhiều vấn đề như:
1/- Với các polyline, lwpolyline nữa thì chọn bộ chọn ss ra sao?
2/- Khi có nhiều line thì việc lựa chọn và bố trí đường kich thước sao cho hợp lý nhất là cả một bài toán khó xơi.
3/- Mình đang định thay đổi phương án lấy bộ lựa chọn ss để người dùng can thiệp vào quá trình lựa chọn nữa
4/- Với các đối tượng khác như arc, circle,... ghi kích thước ra sao?
5/- Cho người dùng tự chọn vị trí đặt đường kích thước hợp lý, muốn thế phải xác định được trật tự của các đối tượng trong bộ chọn.
Bác Duy và các bác khác xem góp ý với mình nhé.
Xin chân thành cám ơn nhiều.

Ssg cũng có ý kiến như bạn Duy: Autodim "khó chơi" lắm! Bạn "vọc" với SolidWorks thì biết rồi đó, user phải luôn luôn chỉnh sửa lại, không những vị trí đặt dim mà còn chuẩn kích thước, cân nhắc xem cái nào nên ghi cái nào không...
Nếu bạn thật sự có hứng thú, có thể tham khảo thêm một chút về cái lisp AD mà ssg đã post ở đây:

http://www.cadviet.c...o...205&st=1420

(ssg chỉ viết để đáp ứng một yêu cầu cụ thể chứ không có ý định phát triển nó).
  • 0

#1582 CUONG20051982

CUONG20051982

    biết lệnh extend

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

Đã gửi 18 February 2009 - 09:43 AM

Em muốn hoán đổi vị trí hai đối tượng(nhóm đối tượng)cho nhau khi có 2 điểm làm chuẩn . Bác nào viết giúp em cái lisp này với. THANK!!!!!!!!!!!!
  • 0

#1583 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 18 February 2009 - 05:15 PM

Chào bạn phamthanhbinh. Mình đã sửa lại lisp của bạn nhưng vẫn có lỗi: ; error: bad argument type: lselsetp nil. Bạn xem giúp lại mình nhé. Cám ơn nhiều.

Chào bạn dacphuong,
Quả thực là mình cũng không hiểu bạn ạ. Mình chạy trên cad2004 của mình thì không thấy vấn đề gì cả. Thậm chí mình đã vẽ hàng chục line cũng được mà. Chỉ tội hơi rối mắt vì cái vị trí của đường kích thước không như ý mình thôi.
Bạn có thể tham khảo bài viết của các bác Duy, SSG về vấn đề này sẽ hiểu rõ hơn cái lisp của mình.
Theo lỗi thông báo thì hình như là bạn đã vẽ các line bằng lệnh pline thì phải. Bạn kiểm tra lại nhé. Lisp của mình chỉ chạy được khi trên bản vẽ có các line vẽ bằng lệnh line thôi bạn ạ. Nếu với cả lwpolyline thì dùng lisp của bác SSg sẽ OK hơn. Mình cũng đang tham khảo lisp của bác ấy để hoàn thiện cái lisp của mình.
Chúc bạn vui và 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.

#1584 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1432 Bài viết
Điểm đánh giá: 1425 (rất tốt)

Đã gửi 19 February 2009 - 07:47 AM

Chào bạn dacphuong,
Bạn dùng thử đoạn code sau đây xem sao:

(defun c:dm ()
(setq ss (ssget "x" (list (cons 0 "line"))))
.............................................
(Command "dimaligned" fp ep (list (+ (car fp) 10) (+ (cadr fp) 10)) "")
)
(princ)
)
....................

Chào bạn Phamthanhbinh,
Mình có vài góp ý :
- dòng (setq ss (ssget "x" (list (cons 0 "line")))) sẽ chọn tất cả các đường thẳng trong bản vẽ. Nhu cầu thông thường của User là click chọn đối tượng trong cửa sổ và lệnh dimaligned chỉ cho phép chọn đối tượng trên TAB hiện hành -> mình đề nghị đổi thành :
(setq ss (ssget (list (cons 410 (getvar "ctab")) (cons 0 "line"))))
- dòng (Command "dimaligned" fp ep (list (+ (car fp) 10) (+ (cadr fp) 10)) "") không cần 2 dấu nháy cuối cùng
-> (Command "dimaligned" fp ep (list (+ (car fp) 10) (+ (cadr fp) 10)) )
Chúc sức khỏe.
  • 0

#1585 quanvuong

quanvuong

    Chưa sử dụng CAD

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

Đã gửi 19 February 2009 - 09:35 AM

Mình là dân Thủy Lợi, cứ mỗi lần vẽ Trắc dọc, trắc ngang kênh mương là mình lại thấy ớn. Vì cứ một cái kênh, một tuyến kè là có ít nhất 50 mặt cắt. Vẽ mấy rất mệt. Mình muốn nhờ gia đình Cadviet viết hộ mình một cái lisp mà chỉ cần nhập số thôi là nó sẽ tự động vẽ cho mình ở trên cad. Và mẫu được thể hiện ở file dưới đây:

http://www.cadviet.c...le_dinh_kem.dwg

Mình đã chuyển sang cad 2004 rồi. Ah, file trước mình gửi nhầm
Xin chân thành cảm ơn các bạn!
  • 0

#1586 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 19 February 2009 - 09:47 AM

Mình là dân Thủy Lợi, cứ mỗi lần vẽ Trắc dọc, trắc ngang kênh mương là mình lại thấy ớn. Vì cứ một cái kênh, một tuyến kè là có ít nhất 50 mặt cắt. Vẽ mấy rất mệt. Mình muốn nhờ gia đình Cadviet viết hộ mình một cái lisp mà chỉ cần nhập số thôi là nó sẽ tự động vẽ cho mình ở trên cad. Và mẫu được thể hiện ở file dưới đây:
http://www.cadviet.c...oc_Tuyen_Ke.dwg
Xin chân thành cảm ơn

Ới Bác Quanvuong ơi,
Cái file bác gửi em không mở được. Bác có thể chuyển nó về cad2004 được không? Cho em mót tí mà.
Cám ơn 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.

#1587 hatcatvodanh

hatcatvodanh

    Chưa sử dụng CAD

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

Đã gửi 19 February 2009 - 10:00 AM

anh Duy782006 anh có nic yahoo không cho em với.....
  • 0

#1588 duy782006

duy782006

    PHẠM QUỐC DUY

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 2155 Bài viết
Điểm đánh giá: 1360 (rất tốt)

Đã gửi 19 February 2009 - 10:06 AM

anh Duy782006 anh có nic yahoo không cho em với.....

Đây bạn: mat_biec_15
  • 0

Cứ ngỡ trần gian là cõi thật.Cho nên tất bật đến bây giờ.
Tạo hộp thoại bằng lisp My blog QUY ĐỊNH ĐẶT TÊN TOPIC TRONG CHUYÊN MỤC LISPD http://ktsduy.wordpress.com/
Để cám ơn chỉ cần nhấn rep_up.png
(Là nhấn vào nút đó phía bài viết của người ta í chứ đừng có nhè cái hình này mà nhấn miết đi nha :-D


#1589 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 19 February 2009 - 11:02 AM

Chào bạn Phamthanhbinh,
Mình có vài góp ý :
- dòng (setq ss (ssget "x" (list (cons 0 "line")))) sẽ chọn tất cả các đường thẳng trong bản vẽ. Nhu cầu thông thường của User là click chọn đối tượng trong cửa sổ và lệnh dimaligned chỉ cho phép chọn đối tượng trên TAB hiện hành -> mình đề nghị đổi thành :
(setq ss (ssget (list (cons 410 (getvar "ctab")) (cons 0 "line"))))
- dòng (Command "dimaligned" fp ep (list (+ (car fp) 10) (+ (cadr fp) 10)) "") không cần 2 dấu nháy cuối cùng
-> (Command "dimaligned" fp ep (list (+ (car fp) 10) (+ (cadr fp) 10)) )
Chúc sức khỏe.

Chào bác Giabach,
Rất cám ơn bác đã tận tình hướng dẫn tôi và mọi người những điều rất bổ ích về lisp trong thời gian vừa qua. Vì là người mới học và lại là học mót nữa, tôi còn đang trên cái bước chập chững để viết lisp nên sự hướng dẫn, chỉ bảo của những bậc tiền bối về lisp như bác và các bác khác trên diễn đàn là cực kỳ quan trọng để tránh được những sai lầm chết người do chủ quan của người viết lisp, cũng như do cái sự hiểu chưa đến nơi đến chốn của người viết lisp.
Rất mong bác luôn mạnh khỏe, yêu đời để tôi và các anh em khác còn có chỗ để mót.
Chào bác.
  • 2
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#1590 baodenhp

baodenhp

    biết vẽ arc

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

Đã gửi 20 February 2009 - 05:41 PM

Mình đang phải tính khối lượng nạo vét, bác nào có file lisp để lên mặt cắt co thể share mình được ko. Mình đang dùng phần mềm acad land desktop 2008 để lên mặt cắt nhưng mặt cắt xuất ra lại ko giống như trong các hố sơ tính toán nạo vét. Mình thấy bên ngoài dùng rất nhiều file Lisp để lên mặt cắt nhưng tiếc là mình ko có cái nào :cheers:
  • 0

#1591 nataca

nataca

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 712 Bài viết
Điểm đánh giá: 553 (tốt)

Đã gửi 20 February 2009 - 06:05 PM

Mình đang phải tính khối lượng nạo vét, bác nào có file lisp để lên mặt cắt co thể share mình được ko. Mình đang dùng phần mềm acad land desktop 2008 để lên mặt cắt nhưng mặt cắt xuất ra lại ko giống như trong các hố sơ tính toán nạo vét. Mình thấy bên ngoài dùng rất nhiều file Lisp để lên mặt cắt nhưng tiếc là mình ko có cái nào :cheers:

Bạn cho một file ví dụ cụ thể xem nào. Nói thực là mình không hiểu bạn đang mô tả cái gì và cái lisp mà bạn nói là "rất nhiều" nó làm như thế nào. Tốt nhất bạn cứ đưa file minh họa lên mọi người mới có thể hiểu và giúp bạn được
  • 0

#1592 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 20 February 2009 - 07:08 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
  • 0

#1593 duy782006

duy782006

    PHẠM QUỐC DUY

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 2155 Bài viết
Điểm đánh giá: 1360 (rất tốt)

Đã gửi 23 February 2009 - 07:15 AM

Em muốn hoán đổi vị trí hai đối tượng(nhóm đối tượng)cho nhau khi có 2 điểm làm chuẩn . Bác nào viết giúp em cái lisp này với. THANK!!!!!!!!!!!!

Đây bạn!
(defun c:dc ( )
(command "undo" "be")
(Prompt "\nChon nhom doi tuong thu nhat")
(Setq doituong1 (Ssget))
(Prompt "\nChon nhom doi tuong thu hai")
(Setq doituong2 (Ssget))
(setq a (getpoint "Chon diem chuan thu nhat: "))
(setq b (getpoint a"Chon diem chuan thu hai: "))
(setq luubatdiem (getvar "osmode"))
(setvar "osmode" 0)
(command ".move" doituong1 "" a b)
(command ".move" doituong2 "" b a)
(setvar "osmode" luubatdiem)
(command "undo" "end")
(Prin I))

  • 0

Cứ ngỡ trần gian là cõi thật.Cho nên tất bật đến bây giờ.
Tạo hộp thoại bằng lisp My blog QUY ĐỊNH ĐẶT TÊN TOPIC TRONG CHUYÊN MỤC LISPD http://ktsduy.wordpress.com/
Để cám ơn chỉ cần nhấn rep_up.png
(Là nhấn vào nút đó phía bài viết của người ta í chứ đừng có nhè cái hình này mà nhấn miết đi nha :-D


#1594 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 23 February 2009 - 01:13 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

Chào bác Phiphi,
Căn cứ vào bản vẽ bác post, mình thử viếp cái lisp này, không biết có đúng ý bác không. Bác xài thử rồi cho mình biết ý kiến để bổ sung nhé.
(defun c:vd ()
(setq olmode (getvar "pdmode"))
(setvar "pdmode" 3)
(setq p1 (getpoint "\n Chon diem chuan thu nhat: "))
(setq p2 (getpoint "\n Chon diem chuan thu hai: "))
(setq goc (angle p1 p2))
(setq a (/ (sin goc) (cos goc)))
(setq p3 (getpoint "\n Chon diem muon noi suy: "))
(setq p4 (list (car p3) (+ (cadr p1) (* a (- (car p3) (car p1))))))
(command "point" p4)
(setvar "pdmode" olmode)
(command "text" (list (car p4) (+ 5 (cadr p4))) "" 45 (cadr p4) "")
(princ)
)

Bác có thể thay đổi chiều cao text , góc nghiêng text cũng như điểm đặt của text tùy theo ý bác bằng cách sửa lại dòng code (command "text" (list (car p4) (+ 5 (cadr p4))) "" 45 (cadr p4) "")
Việc bác muốn chọn một lần nhiều điểm nội suy sẽ hơi phức tạp hơn. Ở lisp này chỉ cho bác nội suy mỗi lần một điểm. Nếu bác muốn làm nhiều điểm thì phải làm nhiều lần.
Do trình độ còn hạn chế nên chưa thể đáp ứng ngay yêu cầu của bác. Mong bác thông cảm và chờ thêm ít bữa nữa. Bác dùng thử và cho ý kiến nhé.

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

#1595 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 23 February 2009 - 01:38 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.

Chào bác Phiphi.
Cái lisp này có cải tạo một chút cho phép bác nhập một lần nhiều điểm cần nội suy, nhưng bác phải nhập số lượng điểm cần nội suy trước và sau đó thực hiện đủ số lần chọn các điểm này. Mỗi khi chọn điểm xong là lisp sẽ tự ghi kết quả cho điểm vừa chọn.
Rất mong nó hợp với ý bác.
(defun c:vd ()
(setq olmode (getvar "pdmode"))
(setvar "pdmode" 3)
(setq p1 (getpoint "\n Chon diem chuan thu nhat: "))
(setq p2 (getpoint "\n Chon diem chuan thu hai: "))
(setq goc (angle p1 p2))
(setq a (/ (sin goc) (cos goc)))
(setq n (getint "\n Nhap so luong diem can noi suy: "))
(setq i 0)

(while (< i n)
(setq p3 (getpoint "\n Chon diem muon noi suy: "))
(setq p4 (list (car p3) (+ (cadr p1) (* a (- (car p3) (car p1))))))
(command "point" p4)
(command "text" (list (car p4) (+ 5 (cadr p4))) "" 45 (cadr p4) "")
(setq i (1+ i))
)

(setvar "pdmode" olmode)
(princ)
)

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.

#1596 duy782006

duy782006

    PHẠM QUỐC DUY

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 2155 Bài viết
Điểm đánh giá: 1360 (rất tốt)

Đã gửi 23 February 2009 - 03:14 PM

Chào bác Phiphi.
Cái lisp này có cải tạo một chút cho phép bác nhập một lần nhiều điểm cần nội suy, nhưng bác phải nhập số lượng điểm cần nội suy trước và sau đó thực hiện đủ số lần chọn các điểm này. Mỗi khi chọn điểm xong là lisp sẽ tự ghi kết quả cho điểm vừa chọn.
Rất mong nó hợp với ý bác.

Chúc bác vui.

Anh Bình! việc bắt buộc người dùng nhập trước số điểm cần thực hiện trong lisp này là hơi gò bó ạn nghiên chứu hàm While với không đối số xem.

(while
(setq a (getpoint "\nChon diem : "))
đoạn thực hiện
)

Anh cho thực hiện đoạn đầu như của anh đến đoạn lặp anh làm như Duy phía trên có tác dụng nếu anh chọn 1 điểm thì nó gán cho a nếu anh enter thì nó kết thúc vòng lặp.
  • 0

Cứ ngỡ trần gian là cõi thật.Cho nên tất bật đến bây giờ.
Tạo hộp thoại bằng lisp My blog QUY ĐỊNH ĐẶT TÊN TOPIC TRONG CHUYÊN MỤC LISPD http://ktsduy.wordpress.com/
Để cám ơn chỉ cần nhấn rep_up.png
(Là nhấn vào nút đó phía bài viết của người ta í chứ đừng có nhè cái hình này mà nhấn miết đi nha :-D


#1597 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 23 February 2009 - 05:56 PM

Chào bác Phiphi.
Cái lisp này có cải tạo một chút cho phép bác nhập một lần nhiều điểm cần nội suy, nhưng bác phải nhập số lượng điểm cần nội suy trước và sau đó thực hiện đủ số lần chọn các điểm này. Mỗi khi chọn điểm xong là lisp sẽ tự ghi kết quả cho điểm vừa chọn.
Rất mong nó hợp với ý bác.
...
Chúc bác vui.

Thanks bác Phamthanhbinh rất nhiều.
Như trong b/v PP post, LISP sẽ yêu cầu pick 2 chữ số (13.627 và 20.329) trước, sau đó rê mouse vào 1 vị trí nào đó tương đối thẳng hàng với 2 chữ số vừa pick, Lisp sẽ tính toán và viết ra chữ số mới dựa theo phương pháp tam giác đồng dạng.
Nhờ Bác check lại giúp nhé. PP vừa thử nhưng LISP chưa cho ra đúng kết quả Bác ạ.
  • 0

#1598 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 - 02:16 AM

Thanks bác Phamthanhbinh rất nhiều.
Như trong b/v PP post, LISP sẽ yêu cầu pick 2 chữ số (13.627 và 20.329) trước, sau đó rê mouse vào 1 vị trí nào đó tương đối thẳng hàng với 2 chữ số vừa pick, Lisp sẽ tính toán và viết ra chữ số mới dựa theo phương pháp tam giác đồng dạng.
Nhờ Bác check lại giúp nhé. PP vừa thử nhưng LISP chưa cho ra đúng kết quả Bác ạ.

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))
)
)
  • 0

#1599 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 - 08:58 AM

Bác thử cái này xem đúng ý bác không
...

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
  • 0

#1600 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

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

Thanks bác Phamthanhbinh rất nhiều.
Như trong b/v PP post, LISP sẽ yêu cầu pick 2 chữ số (13.627 và 20.329) trước, sau đó rê mouse vào 1 vị trí nào đó tương đối thẳng hàng với 2 chữ số vừa pick, Lisp sẽ tính toán và viết ra chữ số mới dựa theo phương pháp tam giác đồng dạng.
Nhờ Bác check lại giúp nhé. PP vừa thử nhưng LISP chưa cho ra đúng kết quả Bác ạ.

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