Đến nội dung


Hình ảnh
- - - - -

Routine tính tổng chiều dài các đối tượng


  • Please log in to reply
53 replies to this topic

#21 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

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

Đã gửi 18 March 2008 - 11:40 PM

Mong bác Hoành, bạn và các quý anh khác gỡ giùm nhé.
1/- Đoạn mã (cdr (assoc '0 e_record)) tại sao lại phải có dấu ' ở trước số 0 vậy. Tôi có mót được củ Autolisp của ông Jeff Sander thì trong đó không dùng dấu này. Như vậy đoạn mã trên sẽ chỉ là (cdr (assoc 0 e_record)) thôi. Tôi hiểu đoạn mã trên là dùng để lấy cái tên của biến e_record trong list mã DXF của nó. Vậy sự khác nhau của có và không có cái dấu ' đó là gì?
2/- Đoạn mã (wcmatch e_type "LINE,ARC,CIRCLE,POLYLINE,LWPOLYLINE,ELLIPSE,SPLINE") bạn học ở đâu vậy? Tôi muốn bạn và các quý anh khác chỉ giùm chỗ để tôi đến mót về dùng. Hiện tại mót được của bạn rồi nhưng chưa hiểu rõ lắm. Cú pháp của hàm WCMATCH này ra sao? có phải chỉ có duy nhất một cú pháp bạn dùng hay không hay còn có các cú pháp khác nữa? Tôi hiểu nôm na cái cú pháp của bạn là một dạng của hàm OR phải không? Nếu tôi sửa thành (Or e_type "line,arc, circle, polyline, lwpolyline,..... ") thì sẽ có vấn đề gì nhỉ? Nói bậy vậy thôi chứ tôi cũng chửa mót được cái hàm Or ở trong autolisp bao giờ. Đại khái tôi hiểu cái hàm wcmatch của bạn nói rằng khi biến E_type là một trong các giá trị có mặt trong chuỗi bạn mô tả thì .... có phải không?


Xin được trả lời bạn:
1/ dấu ' có hay không trong 2 trường hợp trên đều như nhau. Có dấu phẩy thì số 0 được xem như là biến, không có dấu phẩy thì số 0 được xem như là hằng số. Bạn cũng không nên quan tâm đến nó làm gì vì điều đó không cần thiết. Điều những người viết lisp nên biết là có dấu phẩy thì khi chạy, lisp không cần phải sinh ra một ô nhớ trung gian nữa và sẽ chạy nhanh hơn một chút so với khi không có dấu phẩy. That's enough!

2/
Hỏi: Đoạn mã (wcmatch e_type "LINE,ARC,CIRCLE,POLYLINE,LWPOLYLINE,ELLIPSE,SPLINE") bạn học ở đâu vậy?
Đáp: Câu hỏi này quá khó nên tôi không trả lời được.

Hỏi: Cú pháp của hàm WCMATCH này ra sao?
Đáp: Câu hỏi quá dễ, hàm WCMATCH là hàm rất cơ bản, bạn hãy tự tìm hiểu.

Hỏi: có phải chỉ có duy nhất một cú pháp bạn dùng hay không hay còn có các cú pháp khác nữa?
Đáp: Còn nhiều cú pháp khác. Không chỉ trong autolisp, thường thì mọi vấn đề đều có nhiều sắc thái.

Hỏi: Tôi hiểu nôm na cái cú pháp của bạn là một dạng của hàm OR phải không?
Đáp: Bạn hiểu nôm na gần đúng.

Hỏi: Nếu tôi sửa thành (Or e_type "line,arc, circle, polyline, lwpolyline,..... ") thì sẽ có vấn đề gì nhỉ?
Đáp: Không hề hấn gì, chỉ có điều không liên quan đến mã lệnh wcmatch tẹo nào!

Hỏi: Đại khái tôi hiểu cái hàm wcmatch của bạn nói rằng khi biến E_type là một trong các giá trị có mặt trong chuỗi bạn mô tả thì .... có phải không?
Đáp: Bạn hiểu đại khái rất chính xác.
  • 1

#22 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 19 March 2008 - 08:19 AM

1) ... Cú pháp của hàm WCMATCH này ra sao?
2) ...tôi cũng chửa mót được cái hàm Or ở trong autolisp bao giờ.

1) Trích dẫn Help về wcmatch:

Syntax
(wcmatch string pattern)

String

A string to be compared. The comparison is case-sensitive, so upper- and lowercase characters must match.

Pattern
A string containing the pattern to match against string. The pattern can contain the wild-card pattern-matching characters shown in the table Wild-card characters. You can use commas in a pattern to enter more than one pattern condition. Only the first 500 characters (approximately) of the string and pattern are compared; anything beyond that is ignored.
Both arguments can be either a quoted string or a string variable. It is valid to use variables and values returned from AutoLISP functions for string and pattern values.

Return Values

If string and pattern match, wcmatch returns T, otherwise, wcmatch returns nil.

Examples
(wcmatch "phamthanhbinh" "binh") -> nil
(wcmatch "phamthanhbinh" "*binh") -> T
(wcmatch "binh" "pham,thanh,binh") -> T


2) Hàm or càng đơn giản hơn. Đây là hàm logic, hoàn toàn đồng nhất với khái niệm or trong toán học.

Syntax

(or [expr...])

Return Values
T (True) or nil (False)

Examples

(or (> 2 1) (> 2 3)) -> T
(or (< 2 1) (> 2 3)) -> nil


Bạn hiểu cú pháp và cách dùng các hàm sẽ tự giải đáp được tất cả. Mọi cái đều có trong Help. Mình có nghe bạn từng nói Help khó gặm? Khó cũng phải cố, gặm riết rồi nó cũng... vỡ ra! Bản thân mình (hay bất kỳ ai khác), muốn đi sâu hơn về Lisp (hay bất kỳ món IT nào), đều phải tự rèn luyện kỹ năng đọc Help.
English của mình cũng chẳng giỏi giang gì, nhưng những kiến thức về Lisp mà mình có hiện nay, 80% là mò mẫm từ trong Help. Xin chia sẻ vài kinh nghiệm:
1) Phải biết cách dùng các Tab của Help, đặc biệt là các tab: Contents, Index và Ask Me
2) Luyện kỹ năng đọc lướt văn bản English để biết đoạn này có cái mình quan tâm không?
3) Nếu có, cũng không cần đọc hết mà tìm ngay đến những cái chủ yếu nhất. Ví dụ, bạn cần tra cứu hàm, hãy tìm trước tiên đến Syntax - Arguments - Return Values của nó.
4) Bạn hiểu còn lơ mơ quá? Mặc nó, chuyển ngay xuống các Examples đọc qua một lượt. Sau đó, copy từng dòng code của nó và paste vào Command: của Acad. Bảo đảm bạn sẽ giải toả được mấy cái lơ mơ trên.
5) Bắt chước theo các ví dụ của họ, thay đổi các tham số và xem kết quả Return của Acad. Bạn tự làm được đoạn này trong nhiều trường hợp khác nhau tức là bạn đã... convert được kiến thức từ trong Help vào... cái đầu mình!

Chúc bạn "thu hoạch" được nhiều cái có giá trị ngay từ trong Help chứ không cần phải "mót" ở đâu cả!
  • 0

#23 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 19 March 2008 - 05:27 PM

Ới bác NguyenHoanh và quý Anh Boommak,
Lại giắt răng nữa rồi. Hu Hu, nhờ bác và quý anh gỡ giùm.
Sau khi rà kỹ chương trình của quý anh Boommak, tôi thấy đoạn mã (e_type (ssdel e_name ss)) hình như là thừa vì theo như chương trình của quý Anh và những cái tôi mót được thì lisp chả có cái hàm nào mang tên e_type cả. Thực tế tôi đã thử vô hiệu hóa đoạn mã này và xóa cả cái dấu ( ' ) trước số 0 trong đoạn mã (setq e_type (cdr (assoc '0 e_record))) ;(như bài post trước đã đề cập); thì chương trình của quý anh vẫn chạy phà phà, chả có tí dấu hiệu hụt hơi nào.
Vậy là sao nhỉ? Hay là tại cái sự mót của tôi chưa tới nơi tới chốn. Dùng đại cũng được nhưng mà sợ cái sự ngu của mình nó hại đến đời con cháu nên đành phải làm phiền bác NguyenHoanh và quý Anh Boommak. Mong moi người thể tất, đại xá cho.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#24 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

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

Đã gửi 19 March 2008 - 05:39 PM

Ới bác NguyenHoanh và quý Anh Boommak,
Lại giắt răng nữa rồi. Hu Hu, nhờ bác và quý anh gỡ giùm.
Sau khi rà kỹ chương trình của quý anh Boommak, tôi thấy đoạn mã (e_type (ssdel e_name ss)) hình như là thừa vì theo như chương trình của quý Anh và những cái tôi mót được thì lisp chả có cái hàm nào mang tên e_type cả. Thực tế tôi đã thử vô hiệu hóa đoạn mã này và xóa cả cái dấu ( ' ) trước số 0 trong đoạn mã (setq e_type (cdr (assoc '0 e_record))) ;(như bài post trước đã đề cập); thì chương trình của quý anh vẫn chạy phà phà, chả có tí dấu hiệu hụt hơi nào.
Vậy là sao nhỉ? Hay là tại cái sự mót của tôi chưa tới nơi tới chốn. Dùng đại cũng được nhưng mà sợ cái sự ngu của mình nó hại đến đời con cháu nên đành phải làm phiền bác NguyenHoanh và quý Anh Boommak. Mong moi người thể tất, đại xá cho.

Bản chất của dòng lệnh đó cũng giống như thắc mắc lần trước của bạn về setvar osmode ấy, nó là một dạng đội mũ bảo hiểm. Không có mũ bảo hiểm thì bạn vẫn chạy phà phà, mỗi tội khi tai nạn xảy ra thì đội mũ tốt hơn là không đội.
  • 0

#25 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 19 March 2008 - 05:54 PM

Ới các bác NguyenHoanh và SSG,
Em cám ơn các bác nhiều vì đã giải thích cho em hiểu nhiều thứ, không chỉ là về lisp. Song bác SSG ạ, em muốn hỏi lại bác là cái Help mà bác nói có phải là của Acad không hay là Help của lisp? Mà Help của lisp thì em chả mò được nó ở đâu. Còn ở trong Acad thì thú thực là em cũng chửa tìm vì mở ra thấy nó như rừng, sợ lạc lối bác ạ. Về hàm or thì em tìm trong help của Acad đâu có thấy.
Các bác thông cảm cho em vì em mới lọ mọ vào lisp được mấy bữa chưa rành đường đi nước bước mà. Nói như dân chơi cờ tướng là "chưa sạch nước cản" ấy. Vì thế mong được các bác động viên nhiều chứ thật tình nhiều lúc cũng thấy mình hỏi ngớ ngẩn làm phiền các bác. Tuy nhiên cái em hỏi là thật sự em không biết chứ chả phải giả ngố đâu, các bác đừng giận. Mọi điều các bác chỉ em đều cố thực hiện cả đấy, hy vọng sẽ dần dần khá lên để các bác đỡ ngán cái đồ học mót này.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#26 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 19 March 2008 - 06:01 PM

Ới các bác NguyenHoanh và SSG,
Em cám ơn các bác nhiều vì đã giải thích cho em hiểu nhiều thứ, không chỉ là về lisp. Song bác SSG ạ, em muốn hỏi lại bác là cái Help mà bác nói có phải là của Acad không hay là Help của lisp? Mà Help của lisp thì em chả mò được nó ở đâu. Còn ở trong Acad thì thú thực là em cũng chửa tìm vì mở ra thấy nó như rừng, sợ lạc lối bác ạ. Về hàm or thì em tìm trong help của Acad đâu có thấy.
Các bác thông cảm cho em vì em mới lọ mọ vào lisp được mấy bữa chưa rành đường đi nước bước mà. Nói như dân chơi cờ tướng là "chưa sạch nước cản" ấy. Vì thế mong được các bác động viên nhiều chứ thật tình nhiều lúc cũng thấy mình hỏi ngớ ngẩn làm phiền các bác. Tuy nhiên cái em hỏi là thật sự em không biết chứ chả phải giả ngố đâu, các bác đừng giận. Mọi điều các bác chỉ em đều cố thực hiện cả đấy, hy vọng sẽ dần dần khá lên để các bác đỡ ngán cái đồ học mót này.

Bạn đừng vào Help bình thường mà vào Developer Help.
Cái gì cũng có ở "trỏng". Ví dụ, wcmatch ở đây:

http://www.cadviet.c...es/dev_help.jpg
  • 0

#27 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 19 March 2008 - 06:09 PM

Ới bác NguyenHoanh ơi,
Em vẫn chưa hiểu vì theo định nghĩa của chương trinh thì e_type là một biến chứ không phải một hàm. Vậy khi xác định giá trị cho biến thì phải dùng hàm setq chứ.
Ở đây không dùng hàm setq mà lại viết ngang xương là (e_type (ssdel e_name ss)) như kiểu một hàm trong lisp. Và nếu dùng hàm setq ở đây (setq e_type (ssdel e_name ss)) thì biến e_type lúc này sẽ mang thuộc tính khác với biến e_type ban đầu (setq e_type (cdr (assoc '0 e_name))) mất. Cho nên em mới càng khó suy luận thêm.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#28 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 19 March 2008 - 06:20 PM

Thưa bác SSG,
ối gời ơi, cám ơn bác lắm lắm. Em thấy rồi, sẽ cố học hành tử tế theo bác chỉ. Tuy nhiên, cái vốn tiếng Anh của em cũng nhờ mót mà có nên nó lởm khởm lắm. Vì vậy chắc vẫn phải cạy cửa bác dài dài. Bác đừng giận nhé. Cả tiếng Anh em cũng sẽ cố, 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.

#29 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

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

Đã gửi 20 March 2008 - 12:32 AM

Ới bác NguyenHoanh ơi,
Em vẫn chưa hiểu vì theo định nghĩa của chương trinh thì e_type là một biến chứ không phải một hàm. Vậy khi xác định giá trị cho biến thì phải dùng hàm setq chứ.
Ở đây không dùng hàm setq mà lại viết ngang xương là (e_type (ssdel e_name ss)) như kiểu một hàm trong lisp. Và nếu dùng hàm setq ở đây (setq e_type (ssdel e_name ss)) thì biến e_type lúc này sẽ mang thuộc tính khác với biến e_type ban đầu (setq e_type (cdr (assoc '0 e_name))) mất. Cho nên em mới càng khó suy luận thêm.

Bạn đọc thêm về cấu trúc lệnh cond:

(cond [(test result ...) ...])
The cond function accepts any number of lists as arguments. It evaluates the first item in each list (in the order supplied) until one of these items returns a value other than nil. It then evaluates those expressions that follow the test that succeeded.

Return Values

The value of the last expression in the sublist. If there is only one expression in the sublist (that is, if result is missing), the value of the test expression is returned. If no arguments are supplied, cond returns nil.

Examples

The following example uses cond to perform an absolute value calculation:

(cond
((minusp a) (- a))
(t a)
)
If the variable a is set to the value -10, this returns 10.

As shown, cond can be used as a case type function. It is common to use T as the last (default) test expression. Here's another simple example. Given a user response string in the variable s, this function tests the response and returns 1 if it is Y or y, 0 if it is N or n; otherwise nil.

(cond
((= s "Y") 1)
((= s "y") 1)
((= s "N") 0)
((= s "n") 0)
(t nil)
)


  • 0

#30 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 21 March 2008 - 05:43 PM

Thưa bác Nguyen hoanh,
Ơ hơ, thế là em hiểu rồi ạ. Nhưng bác này, vậy là biến e_type lúc này sẽ có giá trị là một bộ lựa chọn mới trích từ biến bộ lựa chọn ss mà vứt đi cái thắng có e_name đã xài phải không bác. Vậy thì nên xài là (ss (ssdel e_name ss)) có phải là dễ hiểu hơn không ạ? Bởi vì ở trên đã xác định biến e_type là kiểu loại đối tượng rồi (setq e_type (cdr (assoc '0 e_record))). Tất nhiên em hiểu là khi bước vào bước lặp kế tiếp thì e_type lại được định nghĩa lại rồi nên chả ảnh hưởng gì sất, xong trong cùng một câu chuyện mà bắt người đọc phải hiểu cái tên Tí cho hai thằng cởi truồng thì cũng hơi hơi áy náy ạ.
Em nói vậy bác thấy có hỗn không? Nếu có thì em xin lỗi bác trước nhé.
Em lại hỏi bác cái này nhé. Em đọc ở chủ đề này có mấy cái củ lisp của bác SSG hay là Vn...dos gì đó, khoái quà mót về xài thữ. xong chửa có xài được gì vì mới gặm thử cái lisp phantichline thì Acad nó trả lời là ;error too few arguments. Em đang mò mẫm mà chửa biết sai chỗ nào bác ạ. Lúc đầu khi load thì nó báo ; error malformed list on input, em mò mẫm tìm thì té ra là thiếu mất một cái ngoặc đóng kết thúc hàm defun, em bổ xung vào thì lại tòi ra cái lỗi trên bác ạ.
Vậy bác hoặc các bác ssg, Vn..dos kiểm tra lại và giúp em với nhé.
Còn cái lisp tính tổng độ dài của các loại đối tượng trên một lớp của bác SSG thì phải, khi em xài thử thì thấy chạy phà phà. Nhưng khi em tách hàm (vlax-curve-getendparham (entsel "\n chon doi tuong")) ra để xài riêng bằng cách nhập trực tiếp trên dòng nhắc lệnh của Acad2004 thì nó chả chịu chạy cứ bảo là không có function này, mặc dù trước khi chạy dòng mã này em đã chạy hàm (vl-load-com) trực tiếp từ dòng nhắc lệnh của Acad2004. Vậy là sao các bác nhỉ?
Mấy cái củ lisp còn lại trong chủ đề này em cũng đang gặm ạ.
Em muốn trích dẫn các bài viết của các bạn khác trên diễn đàn vào bài viết của mình thì làm thế nào ạ? Thấy các bác làm ào ào bắt ham mà "hổng dám đâu" vì chưa biế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.

#31 oizdoi_oi

oizdoi_oi

    biết dimlinear

  • Members
  • PipPipPipPipPip
  • 306 Bài viết
Điểm đánh giá: 452 (tốt)

Đã gửi 04 August 2011 - 11:10 AM

Tặng bạn một lisp "cực ngắn" theo đúng yêu cầu, tên lệnh là TL. Bạn có thể tuỳ nghi sửa đổi theo ý thích:

;;;--------------------------------------------------------------------
(defun Length1(e) (vlax-curve-getDistAtParam e (vlax-curve-getEndParam e)))
;;;--------------------------------------------------------------------
(defun C:TL( / Lay ss L e)
(setq
Lay (getstring "\nLayer name:")
ss (ssget "X" (list (cons 0 "LINE,ARC,CIRCLE,POLYLINE,LWPOLYLINE,ELLIPSE,SPLINE")
(cons 8 Lay)))
L 0.0
)
(vl-load-com)
(while (setq e (ssname ss 0))
(setq L (+ L (length1 e)))
(ssdel e ss)
)
(alert (strcat "Total length of all objects in layer " Lay " = " (rtos L)))
)
;;;--------------------------------------------------------------------

Bài này tuy lâu rồi nhưng xin phép khai quật lại!
Cho mình hỏi là cái này là tính tổng chiều dài theo layer
Nhưng bạn có thể thêm cho chức năng tính theo màu (color) có được ko?
đã seach trên diễn đàn không thấy có rồi mới hỏi đấy nhé
xin cảm ơn!
  • 0
KTS không bao giờ chết đói...mà chỉ đói đến lúc chết!

#32 quansla

quansla

    biết lệnh xclip

  • Members
  • PipPipPipPipPipPipPip
  • 643 Bài viết
Điểm đánh giá: 224 (khá)

Đã gửi 03 June 2012 - 10:44 AM

Xin được trả lời bạn:
1/ dấu ' có hay không trong 2 trường hợp trên đều như nhau. Có dấu phẩy thì số 0 được xem như là biến, không có dấu phẩy thì số 0 được xem như là hằng số. Bạn cũng không nên quan tâm đến nó làm gì vì điều đó không cần thiết. Điều những người viết lisp nên biết là có dấu phẩy thì khi chạy, lisp không cần phải sinh ra một ô nhớ trung gian nữa và sẽ chạy nhanh hơn một chút so với khi không có dấu phẩy. That's enough!

2/
Hỏi: Đoạn mã (wcmatch e_type "LINE,ARC,CIRCLE,POLYLINE,LWPOLYLINE,ELLIPSE,SPLINE") bạn học ở đâu vậy?
Đáp: Câu hỏi này quá khó nên tôi không trả lời được.

Hỏi: Cú pháp của hàm WCMATCH này ra sao?
Đáp: Câu hỏi quá dễ, hàm WCMATCH là hàm rất cơ bản, bạn hãy tự tìm hiểu.

Hỏi: có phải chỉ có duy nhất một cú pháp bạn dùng hay không hay còn có các cú pháp khác nữa?
Đáp: Còn nhiều cú pháp khác. Không chỉ trong autolisp, thường thì mọi vấn đề đều có nhiều sắc thái.

Hỏi: Tôi hiểu nôm na cái cú pháp của bạn là một dạng của hàm OR phải không?
Đáp: Bạn hiểu nôm na gần đúng.

Hỏi: Nếu tôi sửa thành (Or e_type "line,arc, circle, polyline, lwpolyline,..... ") thì sẽ có vấn đề gì nhỉ?
Đáp: Không hề hấn gì, chỉ có điều không liên quan đến mã lệnh wcmatch tẹo nào!

Hỏi: Đại khái tôi hiểu cái hàm wcmatch của bạn nói rằng khi biến E_type là một trong các giá trị có mặt trong chuỗi bạn mô tả thì .... có phải không?
Đáp: Bạn hiểu đại khái rất chính xác.

buồn cười quá thanks bác phát, nhưng mà rất thú vị em nghịch list thấy rất thích chưa từng chú ý tới mí cái này hêhhe
  • 0

#33 Lê Bình Minh

Lê Bình Minh

    biết pan

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

Đã gửi 23 June 2012 - 04:48 PM

Nhờ sự giúp đỡ của bác Nguyễn Hoành em có viết 1 đoạn code nhằm tính tổng chiều dài của các đối tượng chọn (*Line, Arc, Circle, Elippse). Các bác dùng thử và cho ý kiến.
Một lần nữa xin cảm ơn bác Hoành về sự nhiệt tình giúp đỡ anh em.
Chúc cả nhà luôn vui..

(defun add_mline ()  (foreach e_record_sub	e_record    (cond ((= 10 (car e_record_sub))       (setq pt1       (cdr e_record_sub)	     mline_len 0.0       )  	)  	((= 11 (car e_record_sub))       (setq pt2       (cdr e_record_sub)	     mline_len (+ mline_len (distance pt2 pt1))	     pt1       pt2       )  	)    )  )  (setq tot_len (+ tot_len mline_len))  (ssdel e_name ss));;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;(defun C:tg (/ tot_len ss e_name e_record e_type)  (setq tot_len 0.0)  (setq ss (ssget))  (if (null ss)    (exit)  )  (while (> (sslength ss) 0)    (setq e_name (ssname ss 0))    (setq e_record (entget e_name))    (setq e_type (cdr (assoc '0 e_record)))    (cond ((wcmatch e_type "LINE,ARC,CIRCLE,POLYLINE,LWPOLYLINE,ELLIPSE,SPLINE")       (command "lengthen" e_name "")       (setq tot_len (+ tot_len (getvar "PERIMETER")))       (ssdel e_name ss)  	)  	((wcmatch e_type "MLINE") (add_mline))  	(e_type (ssdel e_name ss))    )  )  (prompt (strcat "\nTotal length is: " (rtos tot_len 2 2)))  (princ))

Các pro làm ơn cho em hỏi cách để thực hiện được lệnh này thế nào ạ? Em làm mãi mà không được! Em down về mà không dùng lệnh được!!
  • 0

#34 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 23 June 2012 - 04:54 PM

1). Load file.
2). Dùng lệnh TG.
  • 0

* 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.


#35 Lê Bình Minh

Lê Bình Minh

    biết pan

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

Đã gửi 23 June 2012 - 05:07 PM

Load thế nào hả Bác ơi? Làm ơn chỉ rõ giùm em được không ạ?
  • 0

#36 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 23 June 2012 - 05:11 PM

Vào Tools => Load Application => Chọn file LSP => Chọn Load. Xong!
  • 0

* 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.


#37 Lê Bình Minh

Lê Bình Minh

    biết pan

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

Đã gửi 23 June 2012 - 06:45 PM

thanks cac pro! de em thu
  • 0

#38 Lê Bình Minh

Lê Bình Minh

    biết pan

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

Đã gửi 23 June 2012 - 06:59 PM

huhu! Không đc ạ. Báo load thanh công rồi mà tắt cad đi, mở file cad cần tính ra dùng lệnh "tg" thì nhận được câu xanh rờn:" Press F1 for help"...cứu em các Bác ơi. E dùng cad 2007 có ảnh hưởng gì ko ạ???
  • 0

#39 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 23 June 2012 - 09:44 PM

Sao bạn không đọc bài hướng dẫn sử dụng lisp (trên box Autolisp hoặc Google) hơn là kêu ca nhỉ ^^ ? File lisp khi load chỉ có tác dụng với file hiện hành đó, phiên làm việc đó. Khi tắt đi bật lại hoặc sử dụng với window khác đều không được, trừ khi bạn cho nó vào Startup suite
  • 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


#40 Lê Bình Minh

Lê Bình Minh

    biết pan

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

Đã gửi 23 June 2012 - 10:52 PM

Sao bạn không đọc bài hướng dẫn sử dụng lisp (trên box Autolisp hoặc Google) hơn là kêu ca nhỉ ^^ ? File lisp khi load chỉ có tác dụng với file hiện hành đó, phiên làm việc đó. Khi tắt đi bật lại hoặc sử dụng với window khác đều không được, trừ khi bạn cho nó vào Startup suite


Sao bạn không đọc bài hướng dẫn sử dụng lisp (trên box Autolisp hoặc Google) hơn là kêu ca nhỉ ^^ ? File lisp khi load chỉ có tác dụng với file hiện hành đó, phiên làm việc đó. Khi tắt đi bật lại hoặc sử dụng với window khác đều không được, trừ khi bạn cho nó vào Startup suite

Cảm ơn Bác Ketxu. Em đã đọc rồi, và làm theo y như hướng dẫn...thế mà vẫn báo press F1 for help....hic, khổ tâm quá!!!
  • 0