Đến nội dung


Hình ảnh
5 stars - based on 24598 reviews
* * * - - 3 Bình chọn

Hướng dẫn lập trình Lisp


  • Please log in to reply
493 replies to this topic

#141 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 06 November 2009 - 10:38 AM

Mình muốn chọn tất cả đối tượng màu đỏ , rồi thực hiện một lệnh tiếp theo, giống như lệnh Filter vậy, nhưng sao cái lisp dưới chọn đối tượng xong là nó thoát luôn???

(defun c:1 ()
(command "select" (ssget "x" (list
(cons 0 "LINE,ARC,SPLINE,LWPOLYLINE,POLYLINE,CIRCLE,ELLIPSE,TEXT,MTEXT")
(cons 62 1)
))"")
(princ)
)
  • 0

#142 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 06 November 2009 - 10:51 AM

Mình muốn chọn tất cả đối tượng màu đỏ , rồi thực hiện một lệnh tiếp theo, giống như lệnh Filter vậy, nhưng sao cái lisp dưới chọn đối tượng xong là nó thoát luôn???
(defun c:1 ()
(command "select" (ssget "x" (list
(cons 0 "LINE,ARC,SPLINE,LWPOLYLINE,POLYLINE,CIRCLE,ELLIPSE,TEXT,MTEXT")
(cons 62 1)
))"")
(princ)
)

Đã chỉnh lại code. tuan_thietkedien' thử lại nhé :

(defun c:1 (/ ss)
(command "select"
(setq ss (ssget "x" (list
(cons 0 "*")
(cons 62 1)
)))"")
(if ss (sssetfirst ss ss)
(alert "\n doi tuong co the o mau Bylayer
\n\nHoac khong co doi tuong nao co mau do
\n\n Hoac khong co doi tuong nao duoc chon")
)
(princ)
)

  • 1

#143 dvdcad

dvdcad

    biết vẽ arc

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

Đã gửi 06 November 2009 - 01:22 PM

chào các bn. Nh các bn vit giúp mình lisp ly mã cua HDD và lu ra mt file txt. Cm n nhiu.
  • 0

#144 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 06 November 2009 - 03:20 PM

chào các bn. Nh các bn vit giúp mình lisp ly mã cua HDD và lu ra mt file txt. Cm n nhiu.

Hề hề,
Cái này mình nhớ trên diễn đàn đã có rồi mà, bạn chịu khó kiếm thử xem, nếu không nhầm thì ở trong topic Viết líp theo yêu cầu đó. Nếu thấy có gì chưa ổn thì lại pót lên bạn 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.

#145 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 06 November 2009 - 03:34 PM

Mình muốn chọn tất cả đối tượng màu đỏ , rồi thực hiện một lệnh tiếp theo, giống như lệnh Filter vậy, nhưng sao cái lisp dưới chọn đối tượng xong là nó thoát luôn???

(defun c:1 ()
(command "select" (ssget "x" (list
(cons 0 "LINE,ARC,SPLINE,LWPOLYLINE,POLYLINE,CIRCLE,ELLIPSE,TEXT,MTEXT")
(cons 62 1)
))"")
(princ)
)

Chào bạn Tuan_thietkedien,
Cái đoạn lisp trên đây của bạn thoát luôn là phải quá rồi. Bởi vì bạn đã kết thúc lisp bằng hàm (princ) là thoát êm mà không hiển thị lại giá trị của biến cuối cùng. Vả lại bạn chả đặt biến cho cái tập chọn nên bạn cũng chả có cơ sở nào để gọi lại nó.
Cái lisp của bác Tue_NV đã chữa cái lỗi này bằng cách đặt biến ss cho cái tập chọn của bạn. Đồng thời sau đó gọi lại biến này ở hàm (if ss ......) rồi mới thoát êm bằng (princ).
Với việc đặt tên biến ss này, giả sử bạn chưa sử lý gì nó thì bất cứ lúc nào bạn cần nó chỉ việc gõ !ss trên dòng command là nó trả ra cho bạn tên tập chọn liền bạn ạ. Cái chốt ở đây chính là việc đặt biến ss để dễ dàng sử lý sau này thôi.
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.

#146 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 06 November 2009 - 04:16 PM

Chào bạn Tuan_thietkedien,
Cái đoạn lisp trên đây của bạn thoát luôn là phải quá rồi. Bởi vì bạn đã kết thúc lisp bằng hàm (princ) là thoát êm mà không hiển thị lại giá trị của biến cuối cùng. Vả lại bạn chả đặt biến cho cái tập chọn nên bạn cũng chả có cơ sở nào để gọi lại nó.

Không đặt biến vẫn có thể gọi được nó.
Code sau không dùng biến vẫn có cơ sở để gọi tập chọn bình thường :
Bạn phamthanhBinh nói không có cơ sở thì hơi bị vô lý đấy :tongue2:

(defun c:1 ()
(if (/= (ssget "x" (list (cons 0 "*") (cons 62 1))) nil)
(sssetfirst (ssget "P") (ssget "P"))
(alert "\n doi tuong co the o mau Bylayer
\n\nHoac khong co doi tuong nao co mau do
\n\n Hoac khong co doi tuong nao duoc chon")
)
(princ)
)

  • 0

#147 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 06 November 2009 - 05:32 PM

Không đặt biến vẫn có thể gọi được nó.
Code sau không dùng biến vẫn có cơ sở để gọi tập chọn bình thường :
Bạn phamthanhBinh nói không có cơ sở thì hơi bị vô lý đấy :tongue2:

(defun c:1 ()
(if (/= (ssget "x" (list (cons 0 "*") (cons 62 1))) nil)
(sssetfirst (ssget "P") (ssget "P"))
(alert "\n doi tuong co the o mau Bylayer
\n\nHoac khong co doi tuong nao co mau do
\n\n Hoac khong co doi tuong nao duoc chon")
)
(princ)
)

Bác Tue_NV hiểu sai ý mình rồi,
Ở đây mình muốn nói là sau khi lisp đã chạy xong mà bác muốn gọi lại nó cơ, nhất là khi đã qua vài thao tác vẽ khác bác ạ. Miễn là bác không nhét biến SS vào nhóm biến cục bộ.
Hề hề....
Mình có chút ý kiến với bác như sau:
Vì bác muốn giúp đỡ mọi người nên nếu có thể khi bác sửa lỗi của các lisp do mọi người viết, bác nên phân tích cho mọi người thấy được cái lỗi ở chỗ nào thì tốt biết mấy. Khi đó người được sửa sẽ rất vui và cả những người đọc khác cũng học được cách sửa của bác , tránh được những lỗi tương tự khi viết lisp và bác cũng sẽ bớt vất vả hơn bác ạ.
Mong bác chớ giận nếu như mình nói sai. Hề hề....
Chúc bác khỏe và 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.

#148 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 06 November 2009 - 09:55 PM

Bác Tue_NV hiểu sai ý mình rồi,
Ở đây mình muốn nói là sau khi lisp đã chạy xong mà bác muốn gọi lại nó cơ, nhất là khi đã qua vài thao tác vẽ khác bác ạ. Miễn là bác không nhét biến SS vào nhóm biến cục bộ.
Hề hề....

Hề hề...
Bạn có chắc không?
Mình không sử dụng biến ss vào nhóm biến cục bộ, đại loại là không sử dụng biến ss để gọi đối tượng và sau khi lisp đã chạy xong ; qua vài thao tác vẽ khác vẫn có thể gọi lại tập hợp chọn đó 1 cách bình thường, chỉ cần sau khi chạy Lisp ta làm thêm 1 thao tác nhỏ nữa bằng CAD và AutoCAD có thể làm chuyện đó 1 cách đơn giản

Hề hề...Bạn hơi bị vô lý khi cho rằng : "Vả lại bạn chả đặt biến cho cái tập chọn nên bạn cũng chả có cơ sở nào để gọi lại nó." Hề hề :tongue2:
  • 1

#149 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 08 November 2009 - 07:26 PM

Hề hề...
Bạn có chắc không?
Mình không sử dụng biến ss vào nhóm biến cục bộ, đại loại là không sử dụng biến ss để gọi đối tượng và sau khi lisp đã chạy xong ; qua vài thao tác vẽ khác vẫn có thể gọi lại tập hợp chọn đó 1 cách bình thường, chỉ cần sau khi chạy Lisp ta làm thêm 1 thao tác nhỏ nữa bằng CAD và AutoCAD có thể làm chuyện đó 1 cách đơn giản

Hề hề...Bạn hơi bị vô lý khi cho rằng : "Vả lại bạn chả đặt biến cho cái tập chọn nên bạn cũng chả có cơ sở nào để gọi lại nó." Hề hề :tongue2:

Chào bác Tue_Nv,
Quả thật mình hơi vô lý khi cái lý đó mình chửa được biết. Vậy mong bác đừng giận nha. Cái nghề đi mót của mình chỉ có thể mót được những cái mà người khác cho mót, bằng không thì tịt mít bác ạ. Các cụ dạy không biết thì hổng có tội, vậy mong bác bỏ quá cho mình nha.
Chúc bác luôn vui vẻ và yêu đời. Hề hề hề....
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#150 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 08 November 2009 - 08:25 PM

Chào bác Tue_Nv,
Quả thật mình hơi vô lý khi cái lý đó mình chửa được biết. Vậy mong bác đừng giận nha. Cái nghề đi mót của mình chỉ có thể mót được những cái mà người khác cho mót, bằng không thì tịt mít bác ạ. Các cụ dạy không biết thì hổng có tội, vậy mong bác bỏ quá cho mình nha.
Chúc bác luôn vui vẻ và yêu đời. Hề hề hề....

Sau khi chạy Lisp xong. Bạn sử dụng lệnh Group -> Nhóm chúng lại về 1 nhóm thì lần sau gọi lại là được rồi.
Cụ thể như thế này :
Chạy Lisp :

(defun c:1 ()
(if (/= (ssget "x" (list (cons 0 "*") (cons 62 1))) nil)
(sssetfirst (ssget "P") (ssget "P"))
(alert "\n doi tuong co the o mau Bylayer
\n\nHoac khong co doi tuong nao co mau do
\n\n Hoac khong co doi tuong nao duoc chon")
)
(princ)
)


Sau khi chạy Lisp xong. Những đối tượng có màu đỏ(RED) -> sẽ được hiện sáng bằng Grid
-> ta sử dụng lệnh Group để nhóm chúng về 1 nhóm (group)

-> đánh lệnh G (group) vào Command -> hộp thoại Object grouping hiện lên -> ở chổ Group Name : ta đặt tên cho Group ví dụ tên RED -> Nhấn nút New (ở mục Creat Group) -> trả lại thanh command với dòng select object : -> ta nhấn chữ P(previous) vào dòng select object (tức là chọn những đối tượng màu đỏ trước đó sau khi chạy Lisp) -> Enter -> hiện lên hộp thoại Object grouping -> OK
Command: g
GROUP Select objects for grouping:
Select objects: p
634 found

Select objects: Enter

Như vậy các đối tượng có màu đỏ được nhóm lại thành 1 nhóm mang tên RED. Sau này ta muốn gọi lại nó thì ở dòng Select object của câu lệnh nào ta nhấn chữ G -> gõ tên Group -> lập tức tập hợp các đối tượng mang tên Group sẽ được chọn

Minh hoạ việc gọi lại tập hợp chọn Group bằng lệnh filter
-> gõ Filter -> hộp thoại Filter hiện lên -. Nhấn nút Apply trong filter -> Hiện lên dòng select object ở dòng Command -. gõ chữ G -> Enter group name : RED -> Gõ RED

Command: filter
Applying filter to selection.
Select object : G -> nhấn chữ G

Enter group name: RED
634 found

Select objects: Enter
Exiting filtered selection.

-> Nhấn OK trong hộp thoại filter -> Quan sát CAD, ta thấy tập hợp chọn đối tượng màu đỏ (RED) đã được chọn rồi.
  • 1

#151 thaiquyenck

thaiquyenck

    biết vẽ polygon

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

Đã gửi 09 November 2009 - 03:27 PM

Mấy anh ơi giải thích dòng lệnh này dùm em với:(nó nằm trong bài vẽ nhà của anh ssg đó, em về đọc nhưng chưa hiểu)
;;;Tinh toa do
p2 (polar p1 0.0 W)
p3 (polar p2 (/ pi 2) H1)
p4 (polar p3 pi W)
p5 (list (+ (car p4) (/ W 2)) (+ (cadr p4) H2))
em chỉ biết lệnh polar để tính toạ độ điểm, còn dùng nó thế nào thì chịu.Anh giải thích kĩ kĩ dùm em nha.
  • 0
...Tặng riêng những ai thật lòng


Đang còn hát yêu thương con người ...

#152 thaiquyenck

thaiquyenck

    biết vẽ polygon

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

Đã gửi 09 November 2009 - 03:29 PM

Còn dòng lệnh này nữa nè :
(command "-layer" "n" "dam" "1" "continuous" "dam" "c" 7 "dam" "")
dòng này để tạo layer.còn chức năng của từng đối tượng ( kế cả từng kí tự của nó) thì em chưa bít.Mấy anh giải thích hộ em cái nha.thanhk trước.
  • 0
...Tặng riêng những ai thật lòng


Đang còn hát yêu thương con người ...

#153 Thaistreetz

Thaistreetz

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 914 Bài viết
Điểm đánh giá: 515 (tốt)

Đã gửi 09 November 2009 - 04:00 PM

Về cấu trúc của các hàm thì tốt nhất là bạn đọc các tài liệu về auto lisp trong thư viện của diễn đàn thì sẽ tốt hơn.
còn về các ký tự trong hàm Command: đó là những ký tự tương ứng mà bạn phải nhập vào dòng command của cad khi gõ 1 lệnh nào đó. Autolisp thực hiện toàn bộ nó qua chuỗi ký tự như trên.
như ví dụ trên thì: đầu tiên -layer là bạn gọi hộp thoại layer. -> n là new để tạo layer mới -> dam là tên layer muốn tạo -> 1 là màu của layer.... mỗi dấu cách tương đương với một lần bạn nhấn enter.
các lệnh khác cũng tương tự.
  • 1

Hình đã gửi
IN HIM, I TRUST. THE TRUST IN MY GOD


#154 thaiquyenck

thaiquyenck

    biết vẽ polygon

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

Đã gửi 10 November 2009 - 09:19 AM

Về cấu trúc của các hàm thì tốt nhất là bạn đọc các tài liệu về auto lisp trong thư viện của diễn đàn thì sẽ tốt hơn.
còn về các ký tự trong hàm Command: đó là những ký tự tương ứng mà bạn phải nhập vào dòng command của cad khi gõ 1 lệnh nào đó. Autolisp thực hiện toàn bộ nó qua chuỗi ký tự như trên.
như ví dụ trên thì: đầu tiên -layer là bạn gọi hộp thoại layer. -> n là new để tạo layer mới -> dam là tên layer muốn tạo -> 1 là màu của layer.... mỗi dấu cách tương đương với một lần bạn nhấn enter.
các lệnh khác cũng tương tự.

Anh giải thích rõ hơn dùm em được không.Nếu tự đọc mà hiếu được thì em còn hỏi làm gì nữa.Trong lệnh tạo layer trên còn cả đoạn lệnh sau đó nữa.Chữ c nghĩa là sao ? các kí tự " có tác dụng gì ?Còn lệnh polar thì sao? hệ số pi dùng để làm gì ?
  • 0
...Tặng riêng những ai thật lòng


Đang còn hát yêu thương con người ...

#155 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 10 November 2009 - 09:47 AM

Còn dòng lệnh này nữa nè :
(command "-layer" "n" "dam" "1" "continuous" "dam" "c" 7 "dam" "")
dòng này để tạo layer.còn chức năng của từng đối tượng ( kế cả từng kí tự của nó) thì em chưa bít.Mấy anh giải thích hộ em cái nha.thanhk trước.

Dòng màu đỏ bạn viết chưa đúng. Tue_NV sửa lại :
(command "-layer" "n" "dam" "LT" "continuous" "dam" "c" 7 "dam" "")

Giải thích :
Đánh lệnh -LAYER vào dòng Command và quan sát nhé :

Command: -LAYER (1)
Current layer: "tue"
Enter an option
[?/Make/Set/New/ON/OFF/Color/Ltype/LWeight/Plot/Freeze/Thaw/LOck/Unlock/stAte]: n (2)

Enter name list for new layer(s): dam (3)
Enter an option
[?/Make/Set/New/ON/OFF/Color/Ltype /LWeight/Plot/Freeze/Thaw/LOck/Unlock/stAte]: Lt (4)

Enter loaded linetype name or [?] : continuous (5)

Enter name list of layer(s) for linetype "continuous" : dam (6)
Enter an option
[?/Make/Set/New/ON/OFF/Color/Ltype/LWeight/Plot/Freeze/Thaw/LOck/Unlock/stAte]:
C (7)

New color [Truecolor/COlorbook] <7 (white)>: 7 (8)

Enter name list of layer(s) for color 7 (white) : dam (9)
Enter an option
[?/Make/Set/New/ON/OFF/Color/Ltype/LWeight/Plot/Freeze/Thaw/LOck/Unlock/stAte]: (10)

(command "-layer" "n" "dam" "LT" "continuous" "dam" "c" 7 "dam" "")
chữ "-layer" : tương ứng dòng (1)
chữ "n" : : tương ứng dòng (2) (New)
chữ "dam" : tương ứng dòng (3)
chữ "Lt" : tương ứng dòng (4)
chữ "continuous" tương ứng dòng (5)
chữ "dam" : tương ứng dòng (6)
chữ "c" (color) : tương ứng dòng (7)
chữ "7" (màu của color) : tương ứng dòng (8)
chữ "dam" : tương ứng dòng (9)
chữ "" : tương ứng dòng (10) : tương ứng với phím Enter

Vài dòng giải thích. Hy vọng bạn hiểu.
  • 3

#156 duy782006

duy782006

    PHẠM QUỐC DUY

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

Đã gửi 10 November 2009 - 04:05 PM

Còn lệnh polar thì sao? hệ số pi dùng để làm gì ?

-Hàm Polar cú pháp như sau:
(setq c (polar a goc dodai))
xác định điểm c từ điểm a với goc và dodai.
-pi là giá trị góc tương đương 180 độ trong trường hợp này dùng để xào nấu cái giá trị góc.
+Ví dụ bạn có giá trị gocab
(setq gocab (angle a b))
là góc mà đoạn ab tạo với trục x
+Thì
(setq gocp (- gocab (/ pi 2)))
là góc vuông với góc ab
setq gocp (- gocab pi 2))
là góc ngược lại với góc ab
  • 3

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


#157 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 11 November 2009 - 12:01 PM

Mấy anh ơi giải thích dòng lệnh này dùm em với:(nó nằm trong bài vẽ nhà của anh ssg đó, em về đọc nhưng chưa hiểu)
;;;Tinh toa do
p2 (polar p1 0.0 W)
p3 (polar p2 (/ pi 2) H1)
p4 (polar p3 pi W)
p5 (list (+ (car p4) (/ W 2)) (+ (cadr p4) H2))
em chỉ biết lệnh polar để tính toạ độ điểm, còn dùng nó thế nào thì chịu.Anh giải thích kĩ kĩ dùm em nha.

Chào bạn Thaiquyenck,
Bác Duy đã giải thích khá rõ về hàm polar rồi. Mình chỉ bổ xung thêm một chút để bạn rõ hơn về cách xài hàm này.
Hàm polar được dùng để xác định một điểm theo tọa độ cực tương đối đối với một điểm đã biết.
Cú pháp thì như bạn đã thấy. (setq p2 (polar p1 0.0 W))
Ý nghĩa của từng tham số có thể giải thích như sau:
(setq ....) là hàm xác định biến. Ở đây đặt biến p2 là một điểm được xác định theo tọa độ độc cực tương đối đối với điểm cho trước là p1 :(polar p1 0.0 W)
Trong đó p1 là điểm đã xác định, 0.0 là góc của đoạng thẳng p1p2 so với trục hoành x được xác định theo radian., còn W là khoảng cách hay độ dài của đoạn p1p2.
Tương tự với hàm (setq p3 (polar p2 (/ pi 2) H1)), điểm p3 được xác định là điểm sao cho đoạn p2p3 tạo với trục x một góc là (/pi 2) tức là vuông góc với trục x và véc tơ p2p3 trùng phương chiều với trục y, đồng thời khoảng cách giữa p2 và p3 hay độ dài đoạn p2p3 là bằng H1.

Với hàm (setq p5 (list (+ (car p4) (/ W 2)) (+ (cadr p4) H2))) thì hơi khác. Đây là hàm xác định một điểm p5 theo tọa độ Đề các tương đối đối với một điểm p4 đã xác định trước.
Cụ thể điểm p5 ở đây được xác định là sẽ cách điểm p4 theo phương x một khoảng là (/ W 2) 1/2 chiều rộng W và theo phương y là chiều cao H2.

Để hiểu rõ về các hàm này bạn nên đọc tài liệu hướng dẫn hay đọc trong Help Developer của Cad sẽ rõ. Tất nhiên bước đầu sẽ có khó khăn một chút nhưng sau đó bạn sẽ quen dần và sẽ hiểu nhanh hơn rất nhiều. Dục tốc bất đạt, bạn hãy bình tĩnh tham khảo dần dần từng chút một và cố gắng học tới đâu thực hành tới đó. Khi ấy bạn sẽ thấy Lisp không quá khó chịu đâu bạn ạ.

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.

#158 thaiquyenck

thaiquyenck

    biết vẽ polygon

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

Đã gửi 11 November 2009 - 02:44 PM

Cám ơn mấy anh heng,để về nhà đọc coi có hiểu ko rồi ... có gì bữa sau hỏi tiếp. :tongue2: .Chứ lên mạng thế này nếu đọc thì mất thời gian ( đúng hơn là tốn tiền ) lại đau mắt nữa.
  • 0
...Tặng riêng những ai thật lòng


Đang còn hát yêu thương con người ...

#159 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 18 November 2009 - 06:45 PM

Chào các bác,
Hiện tại mình đang mắc một chút như sau:
Sau một hồi chạy lisp, mình thu được một danh sách các điểm như sau:
((4961.95 -769.073 0.0) (4976.57 -789.556 0.0) (5049.43 -798.094 0.0) (5089.43 -809.011 0.0) (5124.78 -826.238 0.0) (4961.95 -769.073 0.0) (4993.43 -792.746 0.0) (5021.43 -794.222 0.0) (5049.43 -798.094 0.0) (5124.78 -826.238 0.0))

Bây giờ mình muốn lọc lại cái danh sách này để bỏ bớt các điểm trùng nhau đồng thời sắp xếp lại cái danh sách điểm theo trật tự tăng dần hay giảm dần của tọa độ x.
Cụ thể là mình muốn danh sách trên trở thành:
((4961.95 -769.073 0.0) (4976.57 -789.556 0.0) (4993.43 -792.746 0.0) (5021.43 -794.222 0.0) (5049.43 -798.094 0.0) (5089.43 -809.011 0.0) (5124.78 -826.238 0.0))
hoặc theo trật tự ngược lại

Mình đã cố gắng thử nhiều biện pháp nhưng chưa thành công. Rất mong các bác có nhiều kinh nghiệm về lisp hơn mình giúp đỡ.

Thanks các bác trước.

PS: Mình cũng đã lục tung cả chuyên mục về autolisp mà chưa thấy có lisp nào tương tự. Vấn đề này có vẻ hơi hóc thì phải.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#160 Thaistreetz

Thaistreetz

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 914 Bài viết
Điểm đánh giá: 515 (tốt)

Đã gửi 18 November 2009 - 07:49 PM

Chào các bác,
Hiện tại mình đang mắc một chút như sau:
Sau một hồi chạy lisp, mình thu được một danh sách các điểm như sau:
((4961.95 -769.073 0.0) (4976.57 -789.556 0.0) (5049.43 -798.094 0.0) (5089.43 -809.011 0.0) (5124.78 -826.238 0.0) (4961.95 -769.073 0.0) (4993.43 -792.746 0.0) (5021.43 -794.222 0.0) (5049.43 -798.094 0.0) (5124.78 -826.238 0.0))

Bây giờ mình muốn lọc lại cái danh sách này để bỏ bớt các điểm trùng nhau đồng thời sắp xếp lại cái danh sách điểm theo trật tự tăng dần hay giảm dần của tọa độ x.
Cụ thể là mình muốn danh sách trên trở thành:
((4961.95 -769.073 0.0) (4976.57 -789.556 0.0) (4993.43 -792.746 0.0) (5021.43 -794.222 0.0) (5049.43 -798.094 0.0) (5089.43 -809.011 0.0) (5124.78 -826.238 0.0))
hoặc theo trật tự ngược lại

Mình đã cố gắng thử nhiều biện pháp nhưng chưa thành công. Rất mong các bác có nhiều kinh nghiệm về lisp hơn mình giúp đỡ.

Thanks các bác trước.

PS: Mình cũng đã lục tung cả chuyên mục về autolisp mà chưa thấy có lisp nào tương tự. Vấn đề này có vẻ hơi hóc thì phải.

hihi, em cũng đang thắc mắc vấn đề này.
về việc sắp xếp lại các điểm tọa độ đó bác thử nghiêm cứu lisp sắp xếp text của bác Hoành xem có mót được gì không. trong lisp này có đoạn code sắp xếp lại các đối tượng được chọn theo tọa độ Y.
(defun c:stext ( / sst lstent egoc pgoc xgoc yht zgoc linespc ee tt)
(princ "\nSap xep text © CADViet.com")
(setq sst (ssget '((0 . "TEXT")))
lstent (ss2ent sst)
lstent (vl-sort lstent
'(lambda (e1 e2)
(> (cadr (cdr (assoc 10 (entget e1))))
(cadr (cdr (assoc 10 (entget e2))))
)
)
)
egoc (car lstent)
lstent (cdr lstent)
pgoc (cdr (assoc 10 (entget egoc)))
xgoc (car pgoc)
yht (cadr pgoc)
zgoc (caddr pgoc)
hgoc (cdr (assoc 40 (entget egoc)))
linespc (* hgoc 2.5)

)
(foreach ee lstent
(setq tt (entget ee)
tt (subst (list 10
xgoc
(setq yht (- yht linespc))
zgoc
)
(assoc 10 tt)
tt
)
)
(entmod tt)
(entupd ee)
)
)
(defun ss2ent (ss / sodt index lstent)
(setq
sodt (cond
(ss (sslength ss))
(t 0)
)
index 0
)
(repeat sodt
(setq ent (ssname ss index)
index (1+ index)
lstent (cons ent lstent)
)
)
(reverse lstent)
)
(princ
"\nSTEXT - Sap xep text - free lisp from www.cadviet.com"
)
(vl-load-com)

còn việc loại bỏ các điểm có tọa độ trùng nhau em cũng đang thắc mắc.

Ps: em đoán hình như bác cũng đang nghiên cứu lisp nội suy mặt cắt ngang fải không ạ :cheers:
  • 1

Hình đã gửi
IN HIM, I TRUST. THE TRUST IN MY GOD