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

#1541 haiduong2105

haiduong2105

    biết zoom

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

Đã gửi 11 February 2009 - 09:53 PM

Rất cám ơn bác Tue Nv, qua đoạn lisp này mình thấy hay hơn cái cách của mình rất nhiều. Nó không cần phải tạo khung pline cho text nữa. Và do đó cũng không cần phải xóa khung bao này.
Xin phép bác Tue Nv, mình giải thích thêm một chút cho những người mới làm quen với lisp.
Ở đoạn lisp này, bác Tue Nv đã thay đổi cách tạo lệnh hatch , thay vì chọn các đỉnh của khung pline kín như lisp bác đã post lần trước thì bác ấy đã chọn vào chính pline đó bằng tham số "L" nghĩa là đối tượng cuối cùng lisp vừa tạo (Last entity) trên bản vẽ.
Hai cách sử dụng lệnh Hatch này có khác nhau và các bạn mới học lisp nên lưu ý về cú pháp của nó.
Lệnh ssget ở đây cho phép chọn nhiều đối tượng text nhưng người dùng phải lưu ý các text này đều phải nằm trong khung pline mới được. Nếu không hatch sẽ không chạy được.


Trên các gợi ý của các bạn minh đã sửa lai như thế này (nhưng hơi chuối 1 chút)
(command "text" "j" "M" "104.65,0" "1" "0" "1.S")
(command "pline" "100,-4.5" "100,4.5" "109.3,4.5" "109.3,-4.5" "c")
(command "hatch" "ansi31" "2" "0" "L" "104.65,0" "103.65,-1" "")
hoặc
(command "pline" "100,-4.5" "100,4.5" "109.3,4.5" "109.3,-4.5" "c")
(command "text" "j" "M" "104.65,0" "1" "0" "1.S")
(command "hatch" "ansi31" "2" "0" "L" "100,-4.5" "")

cách 2 có vẻ hay hơn vì chỉ cần cấp toạ độ chuẩn của đối tượng là được, còn text do đặt kiểu mid nên phải chọn 2 điểm nên rễ bị nhầm
nhưng với cách 2 đối tượng bao phải là đối tượng yêu tiên nhất (vẽ mới nhất) (vì nếu có một đố tượng khác chùng toạ độ mới được vẽ thí nó nhân nhầm là đối ttượng đo )
Các bạn cho mình hỏi L (Last entity) là lệnh chọn đối tượng vừa tạo thì có lệnh nào có thể chọn được đối tượng tạo trước đối tượng vùa tạo không
  • 0

#1542 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 12 February 2009 - 08:29 AM

Các bạn cho mình hỏi L (Last entity) là lệnh chọn đối tượng vừa tạo thì có lệnh nào có thể chọn được đối tượng tạo trước đối tượng vùa tạo không

Bạn có thể chọn đối tượng trước đối tượng vừa tạo, thậm chí trước, trước, trước nữa cũng được bằng cách sử dụng lệnh gán kết hợp với hàm ssget và thông số "L"
(setq ss (ssget "L"))
Ví dụ của bạn nhé :
(command "text" "j" "M" "104.65,0" "1" "0" "1.S")
(command "text" "j" "M" "103.65,-1" "1" "0" "2.S")
(command "pline" "100,-4.5" "100,4.5" "109.3,4.5" "109.3,-4.5" "c")
(command "hatch" "ansi31" "2" "0" "L" "104.65,0" "103.65,-1" "")
Dòng 1 và dòng 2 bạn tạo nên đfối tượng Text
Dòng thứ 3 bạn tạo nên đối tượng Pline
Dòng thứ 4 là dòng tạo hatch với cách chọn là đối tượng 3, tiếp theo là chọn các đối tượng Text

Mình viết lại như thế này bạn tìm hiểu cách chọn nhé :
(command "text" "j" "M" "104.65,0" "1" "0" "1.S")
(setq te1 (ssget "L"))
(command "text" "j" "M" "103.65,-1" "1" "0" "2.S")
(setq te2 (ssget "L"))
(command "pline" "100,-4.5" "100,4.5" "109.3,4.5" "109.3,-4.5" "c")
(command "hatch" "ansi31" "2" "0" "L" te1 te2 "")
  • 0

#1543 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 12 February 2009 - 09:48 AM

Bạn có thể chọn đối tượng trước đối tượng vừa tạo, thậm chí trước, trước, trước nữa cũng được bằng cách sử dụng lệnh gán kết hợp với hàm ssget và thông số "L"
(setq ss (ssget "L"))
Ví dụ của bạn nhé :
(command "text" "j" "M" "104.65,0" "1" "0" "1.S")
(command "text" "j" "M" "103.65,-1" "1" "0" "2.S")
(command "pline" "100,-4.5" "100,4.5" "109.3,4.5" "109.3,-4.5" "c")
(command "hatch" "ansi31" "2" "0" "L" "104.65,0" "103.65,-1" "")
Dòng 1 và dòng 2 bạn tạo nên đfối tượng Text
Dòng thứ 3 bạn tạo nên đối tượng Pline
Dòng thứ 4 là dòng tạo hatch với cách chọn là đối tượng 3, tiếp theo là chọn các đối tượng Text

Mình viết lại như thế này bạn tìm hiểu cách chọn nhé :
(command "text" "j" "M" "104.65,0" "1" "0" "1.S")
(setq te1 (ssget "L"))
(command "text" "j" "M" "103.65,-1" "1" "0" "2.S")
(setq te2 (ssget "L"))
(command "pline" "100,-4.5" "100,4.5" "109.3,4.5" "109.3,-4.5" "c")
(command "hatch" "ansi31" "2" "0" "L" te1 te2 "")

Chào bác Tue_Nv,
Đoạn code trên của bác mình đã thấm, tuy nhiên mình nghĩ có lẽ cái bạn Haiduong2105 muốn hình như có khác bác ạ. Theo mình hiểu thì bạn ấy muốn là bạn ấy có tập các đối tượng ss rồi, trong đó chưa xác định được thằng nào anh thằng nào em sất cả. Thế là bạn ấy muốn tìm cách xác định cái thằng áp út là thằng nào cơ bác ạ.
Nếu mình hiểu đúng thì không rõ đoạn code sau đây có làm được không bác Tue_NV nhỉ:
(setq ss (ssget "X" (list (cons 0 "text")))
(setq n (sslength ss))
(setq e (ssname ss 1))

Lúc này e là tên của thằng áp út chứ không phải bản thân nó bác ạ.
Sở dĩ mình làm thế này là do đọc bài post của bác SSG nói rằng khi dùng hàm ssget nếu có các tham số thì nó sẽ chọn các đối tượng theo thứ tự ngược với khi khởi tạo. Tuy nhiên mình vẫn không yên tâm lắm vì như bác ssg nói cái thằng ssget này nó hay chơi khăm mình lắm. Nếu bác có cao kiến gì về việc này thì cho mình biết ý kiến với.
Cám ơn bác trước nha.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#1544 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 12 February 2009 - 10:48 AM

Chào bác Tue_Nv,
Đoạn code trên của bác mình đã thấm, tuy nhiên mình nghĩ có lẽ cái bạn Haiduong2105 muốn hình như có khác bác ạ. Theo mình hiểu thì bạn ấy muốn là bạn ấy có tập các đối tượng ss rồi, trong đó chưa xác định được thằng nào anh thằng nào em sất cả. Thế là bạn ấy muốn tìm cách xác định cái thằng áp út là thằng nào cơ bác ạ.
Nếu mình hiểu đúng thì không rõ đoạn code sau đây có làm được không bác Tue_NV nhỉ:
(setq ss (ssget "X" (list (cons 0 "text")))
(setq n (sslength ss))
(setq e (ssname ss 1))

Lúc này e là tên của thằng áp út chứ không phải bản thân nó bác ạ.
Sở dĩ mình làm thế này là do đọc bài post của bác SSG nói rằng khi dùng hàm ssget nếu có các tham số thì nó sẽ chọn các đối tượng theo thứ tự ngược với khi khởi tạo. Tuy nhiên mình vẫn không yên tâm lắm vì như bác ssg nói cái thằng ssget này nó hay chơi khăm mình lắm. Nếu bác có cao kiến gì về việc này thì cho mình biết ý kiến với.
Cám ơn bác trước nha.

Cảm ơn ban phamthanhBinh
Không phải ý bạn Haiduong2105 là đi xác định thằng áp út là thằng nào đâu.

còn text do đặt kiểu mid nên phải chọn 2 điểm nên rễ bị nhầm

Ý của bạn ấy là xác định cho được Text mà thôi.
Và khi sử dụng lệnh hatch thì đâu cần có phải xác định thằng nào anh hay thằng nào em làm gì?
Bạn hãy làm một ví dụ là hatch 1 hình chữ nhật bên trong có Text thì bạn hãy chọn text trước sau đó chọn hình chữ nhật sau thì kết quả sẽ như thế nào?
Kết quả sẽ chẳng khác gì khi hatch ta chọn hình chữ nhật trước và chọn các text sau

Mình tìm hoài không thấy bài của bác SSG nói rằng khi dùng hàm ssget nếu có các tham số thì nó sẽ chọn các đối tượng theo thứ tự ngược với khi khởi tạo. Bạn có thể Link bài viết đó về đây được không?
Cảm ơn bạn.
  • 1

#1545 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 12 February 2009 - 10:49 AM

Trên các gợi ý của các bạn minh đã sửa lai như thế này (nhưng hơi chuối 1 chút)
(command "text" "j" "M" "104.65,0" "1" "0" "1.S")
(command "pline" "100,-4.5" "100,4.5" "109.3,4.5" "109.3,-4.5" "c")
(command "hatch" "ansi31" "2" "0" "L" "104.65,0" "103.65,-1" "")
hoặc
(command "pline" "100,-4.5" "100,4.5" "109.3,4.5" "109.3,-4.5" "c")
(command "text" "j" "M" "104.65,0" "1" "0" "1.S")
(command "hatch" "ansi31" "2" "0" "L" "100,-4.5" "")

cách 2 có vẻ hay hơn vì chỉ cần cấp toạ độ chuẩn của đối tượng là được, còn text do đặt kiểu mid nên phải chọn 2 điểm nên rễ bị nhầm
nhưng với cách 2 đối tượng bao phải là đối tượng yêu tiên nhất (vẽ mới nhất) (vì nếu có một đố tượng khác chùng toạ độ mới được vẽ thí nó nhân nhầm là đối ttượng đo )
Các bạn cho mình hỏi L (Last entity) là lệnh chọn đối tượng vừa tạo thì có lệnh nào có thể chọn được đối tượng tạo trước đối tượng vùa tạo không


Chào bạn Haiduong2105,
Về câu hỏi cuối của bạn, bạn có thể tham khảo phần trả lời của bác Tue_NV và của mình ở bài pót trả lời bác ấy. Qua đó bạn lựa chọn cái thích ứng với yêu cầu của bạn.

Về hai đoạn lisp của bạn mình góp ý như sau:
Để tránh cái việc lisp chọn nhầm đối tượng do việc lấy các tọa độ điểm như bạn đã thấy, đơn giản là bạn hãy chọn các đối tượng này theo ename của nó là OK.
Muốn vậy bạn có thể dùng hàm entlast sau mỗi lần xài các lệnh vẽ đối tượng để đặt tên cho các đối tượng này là được.
Ví dụ:
(command "pline" "100,-4.5" "100,4.5" "109.3,4.5" "109.3,-4.5" "c")
(setq e1 (entlast))
(command "text" "j" "M" "104.65,0" "1" "0" "1.S")
(setq e2 (entlast))
(command "hatch" "ansi31" "2" "0" e1 e2 "")

Có lẽ bạn nên xem lại cái quan niệm này :" text do đặt kiểu mid nên phải chọn 2 điểm nên rễ bị nhầm" . Thực ra bạn chỉ cần chọn một điểm bất kỳ thuộc đối tượng text là OK rồi. Có thể do bạn chọn kiểu justtify là mid nên điểm chọn ban đầu đặt text '(104.65 0) sẽ không còn nằm trên text nữa mà thôi. Rất may cho bạn là trong hai điểm bạn chọn ' (104.65 0) và '(103.65 -1) ít nhất có một điểm nằm trên text. Nhưng nếu bạn thay đổi nội dung text thì có thể cả hai điểm này đều rơi ra ngoài text và khi đó lisp của bạn sẽ cho kết quả không như ý. (nghĩa là hatch sẽ đè lên text)
Là người lập trình bạn nên loại trừ những lỗi ăn may kiểu này bạn ạ. Phải đảm bảo chương trình của mình chỉ cho ra một kết quả duy nhất trong mọi tình huống chứ không thể để chương trình chạy phập phù lúc được lúc không do người sử dụng lỡ tay sờ nhầm được.

Chúc bạn 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.

#1546 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 12 February 2009 - 11:00 AM

Cảm ơn ban phamthanhBinh
Không phải ý bạn Haiduong2105 là đi xác định thằng áp út là thằng nào đâu.

Ý của bạn ấy là xác định cho được Text mà thôi.
Và khi sử dụng lệnh hatch thì đâu cần có phải xác định thằng nào anh hay thằng nào em làm gì?
Bạn hãy làm một ví dụ là hatch 1 hình chữ nhật bên trong có Text thì bạn hãy chọn text trước sau đó chọn hình chữ nhật sau thì kết quả sẽ như thế nào?
Kết quả sẽ chẳng khác gì khi hatch ta chọn hình chữ nhật trước và chọn các text sau

Mình tìm hoài không thấy bài của bác SSG nói rằng khi dùng hàm ssget nếu có các tham số thì nó sẽ chọn các đối tượng theo thứ tự ngược với khi khởi tạo. Bạn có thể Link bài viết đó về đây được không?
Cảm ơn bạn.


Chào bác Tue_NV,
Bài viết của bác SSG đây ạ.
http://www.cadviet.c...o...=371&st=180
Trong trang này có cả bài của bác Vn.....dos nói về vấn đề xác định trình tự của các đối tượng được chọn bằng hàm ssget. Tuy nhiên mình chưa hiểu hết nên cũng chưa áp dụng được, bác xem thử và cho ý kiến nhé.

Còn vấn đề của bạn Haiduong đúng như bác đã nói là chọn text trước hay sau không quan trọng khi hatch. Nhưng bạn ấy đang sợ rằng khi có nhiều đối tượng có trùng điểm chèn thì khi chọn theo điểm sẽ dễ bị nhầm bác ạ.

Mình đã có bài trả lời bạn ấy, bác tham khảo nhé.
Cám ơn bác nhiều.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#1547 tranleanhtuan

tranleanhtuan

    Chưa sử dụng CAD

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

Đã gửi 12 February 2009 - 02:13 PM

Mình muốn hỏi về lisp chia đoạn line, pline thàng những đoạn nhỏ bằng nhau có kích thước xác định. Bạn nào biết thì giúp mình với nha, thanks nhiều! MÌnh đang cần gấp lắm.
  • 0

#1548 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 12 February 2009 - 02:28 PM

Mình muốn hỏi về lisp chia đoạn line, pline thàng những đoạn nhỏ bằng nhau có kích thước xác định. Bạn nào biết thì giúp mình với nha, thanks nhiều! MÌnh đang cần gấp lắm.

Dùng các LISP được PP post ở đây:
http://www.cadviet.c...?showtopic=9019
  • 0

#1549 tranleanhtuan

tranleanhtuan

    Chưa sử dụng CAD

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

Đã gửi 12 February 2009 - 02:34 PM

Thanks PhiPhi nhiều.
  • 0

#1550 haiduong2105

haiduong2105

    biết zoom

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

Đã gửi 12 February 2009 - 08:50 PM

Chào bạn Haiduong2105,
Về câu hỏi cuối của bạn, bạn có thể tham khảo phần trả lời của bác Tue_NV và của mình ở bài pót trả lời bác ấy. Qua đó bạn lựa chọn cái thích ứng với yêu cầu của bạn.

Về hai đoạn lisp của bạn mình góp ý như sau:
Để tránh cái việc lisp chọn nhầm đối tượng do việc lấy các tọa độ điểm như bạn đã thấy, đơn giản là bạn hãy chọn các đối tượng này theo ename của nó là OK.
Muốn vậy bạn có thể dùng hàm entlast sau mỗi lần xài các lệnh vẽ đối tượng để đặt tên cho các đối tượng này là được.
Ví dụ:
(command "pline" "100,-4.5" "100,4.5" "109.3,4.5" "109.3,-4.5" "c")
(setq e1 (entlast))
(command "text" "j" "M" "104.65,0" "1" "0" "1.S")
(setq e2 (entlast))
(command "hatch" "ansi31" "2" "0" e1 e2 "")

Có lẽ bạn nên xem lại cái quan niệm này :" text do đặt kiểu mid nên phải chọn 2 điểm nên rễ bị nhầm" . Thực ra bạn chỉ cần chọn một điểm bất kỳ thuộc đối tượng text là OK rồi. Có thể do bạn chọn kiểu justtify là mid nên điểm chọn ban đầu đặt text '(104.65 0) sẽ không còn nằm trên text nữa mà thôi. Rất may cho bạn là trong hai điểm bạn chọn ' (104.65 0) và '(103.65 -1) ít nhất có một điểm nằm trên text. Nhưng nếu bạn thay đổi nội dung text thì có thể cả hai điểm này đều rơi ra ngoài text và khi đó lisp của bạn sẽ cho kết quả không như ý. (nghĩa là hatch sẽ đè lên text)
Là người lập trình bạn nên loại trừ những lỗi ăn may kiểu này bạn ạ. Phải đảm bảo chương trình của mình chỉ cho ra một kết quả duy nhất trong mọi tình huống chứ không thể để chương trình chạy phập phù lúc được lúc không do người sử dụng lỡ tay sờ nhầm được.

Chúc bạn thành công.


Chào 2 bác rất, rất cám ơn hai bác chi bảo vình mình mới làm thử lisp mà chưa có thời gian đọc sách nền về cơ bản là "Mo" . mình viết lisp theo kiểu (command ....) là xem ở 1 phần mền thiết kế đường nó xuất TN, TD theo kiểu lisp nên bát trước viết để phục vụ cho thông kê các vị trị hỏng trên mặt đường(có tới 1000 vị trí vẽ tay thì vở mặt) do vậy mấy cái lệnh không giông lệnh vẽ là mình không hiểu lắm, nhưng bầy giờ hiểu được lệnh ssget thi bài toán của mình được giải ngẩy. Mục tiêu ở đây của mình là cho tự động Hacth hình trong đó có text (tên của vị trí) do vậy cần xác định được đối tương này để hacth không đè nên chữ.
Bài toán này xem như mình đã giả quết triệt để bằng phương pháp của bác Tue_NV.
Tiện đầy muốn cầu kiến 2 bác như sau:
Mình lập cái này trên excel: đã lập cho nó 1 nút lệnh nhấp vào là xuất ra file.lsp và vào cad đê load, Nhưng mình có ý tưởng khí nhấp vào nút đó nó sẽ tự động gọi cad và load.
Mong các bác giúp đỡ
  • 0

#1551 dacvien2007

dacvien2007

    biết vẽ polygon

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

Đã gửi 12 February 2009 - 09:08 PM

Nhờ Anh viết cho lisp để chọn Hatch, kiểu đường, chèn block
1. lisp chọn hatch có tên trong thư mục ở support hoặc trong file.pat, ví dụ như : Hatch betong lệnh HBETONG thì chương trình yêu cầu chọn vùng , chọn tỉ lệ hatch, màu hatch.
2. Lisp chọn loại đường để vẽ, ví như lệnh vẽ đường sắt DSAT thì chọn kiểu đừơng, màu, dộ dài.
3. Lisp chọn block trong một thư mục , như lệnh chèn , thì lisp chọn tên của block bản vẽ đó ra.
Vì trình độ có hạn, mong đươc các anh giúp và hướng dẫn cho cách viết để học tập về sau .
  • 0

#1552 haiduong2105

haiduong2105

    biết zoom

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

Đã gửi 13 February 2009 - 11:04 PM

Cảm ơn ban phamthanhBinh
Không phải ý bạn Haiduong2105 là đi xác định thằng áp út là thằng nào đâu.

Ý của bạn ấy là xác định cho được Text mà thôi.
Và khi sử dụng lệnh hatch thì đâu cần có phải xác định thằng nào anh hay thằng nào em làm gì?
Bạn hãy làm một ví dụ là hatch 1 hình chữ nhật bên trong có Text thì bạn hãy chọn text trước sau đó chọn hình chữ nhật sau thì kết quả sẽ như thế nào?
Kết quả sẽ chẳng khác gì khi hatch ta chọn hình chữ nhật trước và chọn các text sau

Mình tìm hoài không thấy bài của bác SSG nói rằng khi dùng hàm ssget nếu có các tham số thì nó sẽ chọn các đối tượng theo thứ tự ngược với khi khởi tạo. Bạn có thể Link bài viết đó về đây được không?
Cảm ơn bạn.


Đúng như lời của Phanthanhbinh đấy cái hàm ssget chậy kkhông ổn định minh tlàm thử được 30-40 vị trí là loạn cả nên theo kiểu bị tràn nil. dùng hàm step thi không bị lỗi này
  • 0

#1553 haiduong2105

haiduong2105

    biết zoom

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

Đã gửi 15 February 2009 - 11:45 PM

Nhờ các bác sửa giúp

(defun c:NH()
(prompt "\n Nhap 2 toa do la 2 goc doi dien cua hinh chu nhat :")
(setq dc1 (getpoint "\nNhap diem thu nhat :"))
(setq dc2 (getpoint dc1"\nNhap diem thu 2 :"))
(step nha (getstring “\nNhap kieu nha :”))
(setq dc3 (list(car dc2) (cadr dc1)))
(setq dc4 (list(car dc1) (cadr dc2)))
(command "pline" dc1 dc3 dc2 dc4 "c")
(command "text" "j" "M" (list (/ (+ (car dc1) (car dc2)) 2) (/ (+ (cadr dc1) (cadr dc2)) 2)) "1.5" "0" nha "")
(princ)
)

Khi cho thêm dòng gán getstring vào nó không chậy các vị trí nỗi hình như la các vị tri được tô đậm.
Và nhờ các bác hướng dẫn sử dụng hàm load trong lisp (có ví dụ càng tốt)
  • 0

#1554 ui_troi_2005

ui_troi_2005

    biết vẽ arc

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

Đã gửi 16 February 2009 - 01:37 PM

Chào các bác.

Em muốn nhờ các bác viết hộ em cái lisp như thế này ạ:

Nó có thể scale như một đoạn lisp có lệnh tắt là scc, và còn thêm các loại đường nghi kích (cả phần chữ số ghi giá trị của kích thước ) thước cũng phải scale theo tỉ lệ ta chọn.

Em xin cảm ơn!
  • 0
Úi Trời!!!!!!!!!!!!!!!

#1555 cmengenie

cmengenie

    biết zoom

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

Đã gửi 16 February 2009 - 01:54 PM

Các bác trong diễn đàn bỏ chút ít thời gian giúp em làm một việc nhỏ thế này nhé: em cần lisp tính diện tích tổng của các đường polyline kín có sẵn, kết quả không cần xuất ramàn hình mà chỉ cần hiện trên dòng command line: tổng diện tich các vùng polyline kín là:...
Em đã search thử trước khi hỏi nhưng chỉ thấy lisp tính dt của 1 hình kín, sau đó xuất kq ra màn hình.Cái này lại không thích hợp với việc em đang làm vì Property của vung kín có dt rồi, em cần dt tổng của một đống các polyline kín cơ các bác ạ.
Các bác giúp em nhé, em xin cảm ơn trước. :cheers:
  • 0

#1556 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 16 February 2009 - 02:45 PM

Chào các bác.

Em muốn nhờ các bác viết hộ em cái lisp như thế này ạ:

Nó có thể scale như một đoạn lisp có lệnh tắt là scc, và còn thêm các loại đường nghi kích (cả phần chữ số ghi giá trị của kích thước ) thước cũng phải scale theo tỉ lệ ta chọn.

Em xin cảm ơn!

Chào bạn Ui_troi_2005,
Bạn thử xài cái này xem nhé.
(defun c: scc ()
(setq ss (ssget "x"))
(command "scale" ss "" '(0 0) 0.5)
)
Đoạn lisp trên sẽ scale tất cả các đối tượng có trên bản vẽ của bạn với tâm scale là 0,0 và tỉ lệ scale là 0.5.
Nếu bạn muốn scale không phải tất cả các đối tượng trên bản vẽ thì có thể sử dụng hàm ssget với các tham số khác nhau của nó tùy theo ý bạn.
Nếu muốn chọn tâm scale khác bạn sử dụng hàm '( x y) với x ,y là tọa độ điểm bạn muốn hoặc sử dụng hàm (getpoint) để nhập điểm bạn muốn.
Nếu muốn thay đổi tỷ lệ scale, bạn nhập tỷ lệ đó vào vị trí của số 0.5 trong lisp.

Chúc bạn 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.

#1557 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 16 February 2009 - 03:09 PM

Các bác trong diễn đàn bỏ chút ít thời gian giúp em làm một việc nhỏ thế này nhé: em cần lisp tính diện tích tổng của các đường polyline kín có sẵn, kết quả không cần xuất ramàn hình mà chỉ cần hiện trên dòng command line: tổng diện tich các vùng polyline kín là:...
Em đã search thử trước khi hỏi nhưng chỉ thấy lisp tính dt của 1 hình kín, sau đó xuất kq ra màn hình.Cái này lại không thích hợp với việc em đang làm vì Property của vung kín có dt rồi, em cần dt tổng của một đống các polyline kín cơ các bác ạ.
Các bác giúp em nhé, em xin cảm ơn trước. :cheers:

Chào bạn cmengnie,
Nếu mình nhớ không nhầm thì trên diễn đàn đã có líp này rồi, bạn chịu khó tìm lại.
Nếu bạn ngại tìm hãy post lại cái lisp tính diện tích của một polyline kín mà bạn đã biết lên, mình sẽ giúp bạn làm tiếp bởi vì cái khó là thuật toán tính diện tích chứ không phải là cái lấy tổng. Vì mình chưa rành lắm về lisp mà lại lười tìm kiếm nên mong bạn thông cảm.
Nếu bạn đã có chút vốn liếng về lisp thì mình gợi ý cách làm tiếp như sau nhé:
1/- Tạo một bộ chọn các đối tượng bạn cần tính diện tích bằng hàm ssget.
2/- tạo một biến tdt chứa tổng diện tích bạn cần tìm (setq tdt 0)
3/- Tạo một vòng lặp qua tất cả các phần tử của tập đối tượng bạn chọn và dùng hàm lấy diện tích của một polyline đơn mà bạn có để có được từng diện tích đơn là dtd và dùng hàm (setq tdt (+ dtd tdt)) để có tổng diện tích mới sau mỗi bước lặp.
Bạn xóa phần hiển thị ra màn hình giá trị dtd trong hàm xác định diện tích đơn của bạn đi.
4/- Kết thúc vòng lặp và dùng hàm (princ tdt) sẽ có được giá trị tổng diện tích trên dòng nhắc lệnh của CAD
5/- Dùng hàm (princ) để thoát êm
6/- Đóng defun.
Chúc bạn 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.

#1558 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 16 February 2009 - 03:20 PM

Nhờ các bác sửa giúp

(defun c:NH()
(prompt "\n Nhap 2 toa do la 2 goc doi dien cua hinh chu nhat :")
(setq dc1 (getpoint "\nNhap diem thu nhat :"))
(setq dc2 (getpoint dc1"\nNhap diem thu 2 :"))
(step nha (getstring “\nNhap kieu nha :”))
(setq dc3 (list(car dc2) (cadr dc1)))
(setq dc4 (list(car dc1) (cadr dc2)))
(command "pline" dc1 dc3 dc2 dc4 "c")
(command "text" "j" "M" (list (/ (+ (car dc1) (car dc2)) 2) (/ (+ (cadr dc1) (cadr dc2)) 2)) "1.5" "0" nha "")
(princ)
)

Khi cho thêm dòng gán getstring vào nó không chậy các vị trí nỗi hình như la các vị tri được tô đậm.
Và nhờ các bác hướng dẫn sử dụng hàm load trong lisp (có ví dụ càng tốt)

Chào bạn haiduong2105,
Mình tìm trong help của Cad không thấy có hàm (step ) bạn ạ. Vì thế mình không hiểu được cái mục đích của hàm này nên không thể giúp gì được cho bạn.
Nếu có thể, bạn hãy giải thích giùm mình về cái hàm (step ) này nhé. Cả cú pháp và cách sử dụng của nó.
Bạn cũng có thể nói cái ý định của bạn khi xài hàm này để mình xem có thể dùng hàm nào khác thông dụng hơn thay thế nó hay không?
Cám ơn bạn trướ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.

#1559 haiduong2105

haiduong2105

    biết zoom

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

Đã gửi 16 February 2009 - 06:18 PM

Chào bạn haiduong2105,
Mình tìm trong help của Cad không thấy có hàm (step ) bạn ạ. Vì thế mình không hiểu được cái mục đích của hàm này nên không thể giúp gì được cho bạn.
Nếu có thể, bạn hãy giải thích giùm mình về cái hàm (step ) này nhé. Cả cú pháp và cách sử dụng của nó.
Bạn cũng có thể nói cái ý định của bạn khi xài hàm này để mình xem có thể dùng hàm nào khác thông dụng hơn thay thế nó hay không?
Cám ơn bạn trước.


Mình đọc tron sách hường dẫn thi hàm Step là hàm gán giá trị cho 1 biến ví dụ
cú pháp: (setq b1 gt1 [ok 1234] ...) ý nghĩa b1 gán giá trị là ok, gt1 gán giá trị là 1234 (hạm này còn sử dụng cùng với các hàm get... như getpoint)
mục đích của mình là là vẽ 1 hình và chèn vào tâm của nó 1 text theo ý của người nhập do đó mình dùng hàm getstring để gán cho biến 1 chuối do người nhập và vẽ chuỗi đó vào tâm của hình nhưng khi thêm cái lênh (step nha (getstring “\nNhap kieu nha :”)) vào thi bị lỗi.
Nếu mình ấn định 1 text thi nó chậy ngon lành. nhưng như thế thì bài toán không khó học vì với mỗi text mình lại phải lập 1 lệnh gán text riêng và không linh hoạt.

ở đây mình nhờ các bạn giải thích cho mình ham Load và cho ví dụ (mình đọc sách có nói đến mà làm không được)
  • 0

#1560 haiduong2105

haiduong2105

    biết zoom

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

Đã gửi 16 February 2009 - 06:39 PM

Chào bạn haiduong2105,
Mình tìm trong help của Cad không thấy có hàm (step ) bạn ạ. Vì thế mình không hiểu được cái mục đích của hàm này nên không thể giúp gì được cho bạn.
Nếu có thể, bạn hãy giải thích giùm mình về cái hàm (step ) này nhé. Cả cú pháp và cách sử dụng của nó.
Bạn cũng có thể nói cái ý định của bạn khi xài hàm này để mình xem có thể dùng hàm nào khác thông dụng hơn thay thế nó hay không?
Cám ơn bạn trước.



Xin lôi bạn nhé mình nhầm ham setq thành step nên bị lỗi mình làm được rồi

(defun c:NH()
(prompt "\n Nhap 2 toa do la 2 goc doi dien cua nha :")
(setq dc1 (getpoint "\nNhap diem thu nhat :"))
(setq dc2 (getpoint dc1"\nNhap diem thu 2 :"))
(setq nha (strcase (getstring "\n Nhap loai nha : ")))
(setq dc3 (list(car dc2) (cadr dc1)))
(setq dc4 (list(car dc1) (cadr dc2)))
(command "layer" "n" "Nha" "s" "Nha" "c" "1" "" "")
(command "pline" dc1 dc3 dc2 dc4 "c")
(command "text" "j" "M" (list (/ (+ (car dc1) (car dc2)) 2) (/ (+ (cadr dc1) (cadr dc2)) 2)) "1.5" "0" nha "")
(command "layer" "s" "0" "")
(princ)
)
  • 0