Rated 5/5 based on 240179 internet user reviews

Jump to content


Change Photo
- - - - -

Nhờ các pro sửa lỗi Lisp giúp


  • Please log in to reply
21 replies to this topic

#1 CaoxuanChung

CaoxuanChung

    biết pan

  • Members
  • Pip
  • 9 posts
Danh tiếng: 0 (bình thường)

Gửi vào 17 April 2013 - 09:48 PM

Em có làm 1 cái lisp về mặt bích, e gặp phải 1 vấn đề đó là khi vẽ ra có 1 kích thước bị lệch so với kích thước nhập vào, mặc dù code lệnh của e thì thì theo e là đã đúng. em ko biết phải xử lí thế nào, vậy mong các pro chỉ giáo cho em ... 
Kích thước bị sai mà e nói ở trên là H và đôi khi cả D nữa (2 cái này phiền các bác mở file lisp để biết, D là đường kính bích, H là đường kính lỗ bulong)  ... nếu em nhập vào số lẻ ví dụ D = 175 mm thì khi vẽ ra đo lại chỉ còn lại 174 mm :( 
Còn 1 vấn đề nữa mà e cũng muốn hỏi, đó là khi e vẽ xong 1 mặt bích rồi, muốn vẽ cái thứ 2 với số liệu khác hay kể cả cái cũ thì nó xuất hiện lỗi, xuất hiện 3 hình trên màn hình, trong đó có 2 cái cùng 1 kích thước( trường hợp vẽ vs 1 số liệu mới), muốn ko xuất hiện lỗi ấy thì phải mở 1 cửa sổ cad mới và load lại file lisp, vậy làm sao để khắc phục đc hiện tượng đó? 

 

Dưới đây là file lisp mà e muốn hỏi các lỗi ... em xin cảm ơn 

 

http://www.mediafire...r1x67bwct2e4qgf

 

còn đây là tiêu chuẩn bích, có hình vẽ để các bác xem 

 

http://www.mediafire...z2y3ryyb0qt51cv


  • 0

#2 quansla

quansla

    biết lệnh refedit

  • Members
  • PipPipPipPipPipPipPip
  • 574 posts
Danh tiếng: 203 (khá)

Gửi vào 17 April 2013 - 10:37 PM

Em có làm 1 cái lisp về mặt bích, e gặp phải 1 vấn đề đó là khi vẽ ra có 1 kích thước bị lệch so với kích thước nhập vào, mặc dù code lệnh của e thì thì theo e là đã đúng. em ko biết phải xử lí thế nào, vậy mong các pro chỉ giáo cho em ... 
Kích thước bị sai mà e nói ở trên là H và đôi khi cả D nữa (2 cái này phiền các bác mở file lisp để biết, D là đường kính bích, H là đường kính lỗ bulong)  ... nếu em nhập vào số lẻ ví dụ D = 175 mm thì khi vẽ ra đo lại chỉ còn lại 174 mm :( 
Còn 1 vấn đề nữa mà e cũng muốn hỏi, đó là khi e vẽ xong 1 mặt bích rồi, muốn vẽ cái thứ 2 với số liệu khác hay kể cả cái cũ thì nó xuất hiện lỗi, xuất hiện 3 hình trên màn hình, trong đó có 2 cái cùng 1 kích thước( trường hợp vẽ vs 1 số liệu mới), muốn ko xuất hiện lỗi ấy thì phải mở 1 cửa sổ cad mới và load lại file lisp, vậy làm sao để khắc phục đc hiện tượng đó? 

 

Dưới đây là file lisp mà e muốn hỏi các lỗi ... em xin cảm ơn 

 

http://www.mediafire...r1x67bwct2e4qgf

 

còn đây là tiêu chuẩn bích, có hình vẽ để các bác xem 

 

http://www.mediafire...z2y3ryyb0qt51cv

Mình sai ở đâu nhỉ, nhập lisp bạn vô Cad chẳng thấy chạy gì cả nhưng nghe chừng là do lỗi của osmode thôi, tắt truy bắt điểm đi chắc là được đấy

Mà đúng là lỗi này rồi đó, bạn thêm vào dòng (setvar "osmode" 0) ngay sau dòng (defun bic...() nhé. Tuy mất truy bắt điểm nhưng nếu ưng rồi thì việc lưu và bắt lỗi mình thực hiện nốt cho

P/s trong lisp này của bạn có dòng (setq ABC (ssget "X")) sau đó dùng ABC để thực hiện (command ".mirror" ABC"" I J "") nghe không hợp lý 

Còn nữa nếu cần zoom đối tượng bick đã vẽ thì có lẽ lên chọn điểm window chứ nếu để "e" thì chỉ áp dụng khi một bản vẽ một bick được vẽ thôi(giống ABC ở trên)


Được chỉnh sửa bởi quansla on 17 April 2013 - 10:44 PM

  • 1

#3 quansla

quansla

    biết lệnh refedit

  • Members
  • PipPipPipPipPipPipPip
  • 574 posts
Danh tiếng: 203 (khá)

Gửi vào 17 April 2013 - 11:06 PM

Mình sai ở đâu nhỉ, nhập lisp bạn vô Cad chẳng thấy chạy gì cả nhưng nghe chừng là do lỗi của osmode thôi, tắt truy bắt điểm đi chắc là được đấy

Mà đúng là lỗi này rồi đó, bạn thêm vào dòng (setvar "osmode" 0) ngay sau dòng (defun bic...() nhé. Tuy mất truy bắt điểm nhưng nếu ưng rồi thì việc lưu và bắt lỗi mình thực hiện nốt cho

P/s trong lisp này của bạn có dòng (setq ABC (ssget "X")) sau đó dùng ABC để thực hiện (command ".mirror" ABC"" I J "") nghe không hợp lý 

Còn nữa nếu cần zoom đối tượng bick đã vẽ thì có lẽ lên chọn điểm window chứ nếu để "e" thì chỉ áp dụng khi một bản vẽ một bick được vẽ thôi(giống ABC ở trên)

A xin lỗi mình không đọc kỹ yêu cầu của bạn rồi, nếu bạn để ý hai dòng (ssget) và (mirro) kia thì đã không xảy ra sự khó chịu như bạn đã trình bày. Theo ý mình thì việc bạn sử dụng (ssget "x" ) là sai, sau đó dẫn đến tất cả các lỗi kéo theo như bạn trình bày

Nói đơn giản thì tham số "x" theo sau hàm "ssget" mang ý nghĩa là chọn tất cả các đối tượng trên bản vẽ. Với cách này thì sau đó nếu bạn dùng đối tượng để Mirro là ABC (đã được gán là chọn tất cả các đối tượng trên bản vẽ) thì đương nhiên khi Mirror sẽ bị như bạn đang mắc phải

Để khắc phục thì hiện tại bạn đang sử dụng cách buộc phải mở file Dwg mới, đây đương nhiên là một cách "chuẩn" rồi, vì khi đó ở bản vẽ mới không có gì ngoài các đối tượng được vẽ bằng Code lisp bạn viết.

Cách khắc phục thứ hai là sửa Code. Theo ý mình bạn nên sửa thành

  1. Để khắc phục lúc vẽ được lúc không vẽ được cần có việc lưu và khôi phục, bắt lỗi "ESC" trong lisp, (sẽ khắc phục luôn vẽ sai. 175/174/171.33)
  2. Không dùng Mirror nữa lấy thêm một loạt các điểm nữa mà vẽ hoặc chọn cách lối điểm khác
  3. Nếu dùng Entmake lisp sẽ chạy nhanh hơn và không sợ dính phải lỗi truy bắt điểm
  4. Thay "zoom" "e" bằng "zoom" "w" và p1,p1 hợp lý hơn

  • 1

#4 Song Nhi

Song Nhi

    biết vẽ rectang

  • Members
  • PipPip
  • 83 posts
Danh tiếng: 50 (tàm tạm)

Gửi vào 17 April 2013 - 11:34 PM

Nếu LISP của bạn được một anh chị nào trong diễn đàn viết hộ một hàm con có tác dụng gán giá trị theo trật tự thì sẽ gọn đi nhiều lắm.

Hàm con có nội dung như sau:

 

Có sẵn: các danh sách có cùng độ dài

(setq list1 (list  "10"    "15"    "20"    "25"    "32"    "40"    "50"    "65"    "80"    "100"))

(setq list2 (list  "a"      "b"      "c"      "d"      "e"      "f"       "g"      "h"      "i"        "j"     ))

(setq list3 (list  "1"      "5"      "4"      "3"      "6"      "7"      "9"      "2"      "8"      "0"    ))

.................................................................................................................................

 

Yêu cầu: nếu biến a1 nhận giá trị thứ i (i=1÷(length list1)) thì đồng thời:

    1. Gán cho biến a2 nhận giá trị thứ i trong list2

    2. Gán cho biến a3 nhận giá trị thứ i trong list3

        ......................................................................

 

Cụ thể: nếu a1 = 20 thì gán cho: a2 = c và a3 = 4 (i = 3)

 

Nếu có được hàm con này, bạn sẽ làm gọn và sạch hơn nhiều, mà việc kiểm tra cũng như sửa lại sau này cũng dễ dàng hơn rất nhiều.

@ Spam: Vấn đề này hình như em nhớ có đề cập đến trong diễn đàn mình rồi, mà em tìm không thấy, mong các Mem giúp cho vì SN chỉ cố gắng được với danh sách 4 phần tử mà thôi!

@ CaoxuanChung: trong mỗi nhánh hàm cond bạn thừa hàm progn!


  • 2

#5 CaoxuanChung

CaoxuanChung

    biết pan

  • Members
  • Pip
  • 9 posts
Danh tiếng: 0 (bình thường)

Gửi vào 17 April 2013 - 11:50 PM

Nếu LISP của bạn được một anh chị nào trong diễn đàn viết hộ một hàm con có tác dụng gán giá trị theo trật tự thì sẽ gọn đi nhiều lắm.

Hàm con có nội dung như sau:

 

Có sẵn: các danh sách có cùng độ dài

(setq list1 (list  "10"    "15"    "20"    "25"    "32"    "40"    "50"    "65"    "80"    "100"))

(setq list2 (list  "a"      "b"      "c"      "d"      "e"      "f"       "g"      "h"      "i"        "j"     ))

(setq list3 (list  "1"      "5"      "4"      "3"      "6"      "7"      "9"      "2"      "8"      "0"    ))

.................................................................................................................................

 

Yêu cầu: nếu biến a1 nhận giá trị thứ i (i=1÷(length list1)) thì đồng thời:

    1. Gán cho biến a2 nhận giá trị thứ i trong list2

    2. Gán cho biến a3 nhận giá trị thứ i trong list3

        ......................................................................

 

Cụ thể: nếu a1 = 20 thì gán cho: a2 = c và a3 = 4 (i = 3)

 

Nếu có được hàm con này, bạn sẽ làm gọn và sạch hơn nhiều, mà việc kiểm tra cũng như sửa lại sau này cũng dễ dàng hơn rất nhiều.

@ Spam: Vấn đề này hình như em nhớ có đề cập đến trong diễn đàn mình rồi, mà em tìm không thấy, mong các Mem giúp cho!

cái này đúng là 1 ý tưởng hay ^_^ 


  • 0

#6 CaoxuanChung

CaoxuanChung

    biết pan

  • Members
  • Pip
  • 9 posts
Danh tiếng: 0 (bình thường)

Gửi vào 17 April 2013 - 11:53 PM

A xin lỗi mình không đọc kỹ yêu cầu của bạn rồi, nếu bạn để ý hai dòng (ssget) và (mirro) kia thì đã không xảy ra sự khó chịu như bạn đã trình bày. Theo ý mình thì việc bạn sử dụng (ssget "x" ) là sai, sau đó dẫn đến tất cả các lỗi kéo theo như bạn trình bày

Nói đơn giản thì tham số "x" theo sau hàm "ssget" mang ý nghĩa là chọn tất cả các đối tượng trên bản vẽ. Với cách này thì sau đó nếu bạn dùng đối tượng để Mirro là ABC (đã được gán là chọn tất cả các đối tượng trên bản vẽ) thì đương nhiên khi Mirror sẽ bị như bạn đang mắc phải

Để khắc phục thì hiện tại bạn đang sử dụng cách buộc phải mở file Dwg mới, đây đương nhiên là một cách "chuẩn" rồi, vì khi đó ở bản vẽ mới không có gì ngoài các đối tượng được vẽ bằng Code lisp bạn viết.

Cách khắc phục thứ hai là sửa Code. Theo ý mình bạn nên sửa thành

  1. Để khắc phục lúc vẽ được lúc không vẽ được cần có việc lưu và khôi phục, bắt lỗi "ESC" trong lisp, (sẽ khắc phục luôn vẽ sai. 175/174/171.33)
  2. Không dùng Mirror nữa lấy thêm một loạt các điểm nữa mà vẽ hoặc chọn cách lối điểm khác
  3. Nếu dùng Entmake lisp sẽ chạy nhanh hơn và không sợ dính phải lỗi truy bắt điểm
  4. Thay "zoom" "e" bằng "zoom" "w" và p1,p1 hợp lý hơn

bạn nhắc tới hàm SSGET mình mới nhớ ra, chẳng trách nó vẽ ra nhiều hình sau khi vẽ hình thứ nhất. cái này thì mình đã hiểu đc bản chất ... nhưng còn cái sai số thì mình vẫn chưa hiểu lắm ở cái mục 1. mà bạn nói, mong bạn nói rõ hơn để mình hiểu và sửa đc code cho đúng ... 


  • 0

#7 Song Nhi

Song Nhi

    biết vẽ rectang

  • Members
  • PipPip
  • 83 posts
Danh tiếng: 50 (tàm tạm)

Gửi vào 18 April 2013 - 12:16 AM

nhưng còn cái sai số thì mình vẫn chưa hiểu lắm ở cái mục 1. mà bạn nói, mong bạn nói rõ hơn để mình hiểu và sửa đc code cho đúng ... 

Có lẽ do các bắt điểm thường trú làm cho LISP của bạn bị sai số

 

Đầu tiên bạn hãy thiết đặt:

(setvar  "CMDECHO"   0)

(setq osm  (getvar "OSMODE")

         cla    (getvar "CLAYER"  ))

(setvar  "OSMODE"   0)

 

Sau khi kết thúc bạn bổ xung vào:

(setvar  "CMDECHO"  1    )

(setvar  "OSMODE"    osm)

(setvar  "CLAYER"      cla )

(setvar  "OSMODE"   osm)
(setvar  "CLAYER"       cla)

  • 0

#8 quansla

quansla

    biết lệnh refedit

  • Members
  • PipPipPipPipPipPipPip
  • 574 posts
Danh tiếng: 203 (khá)

Gửi vào 18 April 2013 - 01:19 AM

Nếu LISP của bạn được một anh chị nào trong diễn đàn viết hộ một hàm con có tác dụng gán giá trị theo trật tự thì sẽ gọn đi nhiều lắm.

Hàm con có nội dung như sau:

 

Có sẵn: các danh sách có cùng độ dài

(setq list1 (list  "10"    "15"    "20"    "25"    "32"    "40"    "50"    "65"    "80"    "100"))

(setq list2 (list  "a"      "b"      "c"      "d"      "e"      "f"       "g"      "h"      "i"        "j"     ))

(setq list3 (list  "1"      "5"      "4"      "3"      "6"      "7"      "9"      "2"      "8"      "0"    ))

.................................................................................................................................

 

Yêu cầu: nếu biến a1 nhận giá trị thứ i (i=1÷(length list1)) thì đồng thời:

    1. Gán cho biến a2 nhận giá trị thứ i trong list2

    2. Gán cho biến a3 nhận giá trị thứ i trong list3

        ......................................................................

 

Cụ thể: nếu a1 = 20 thì gán cho: a2 = c và a3 = 4 (i = 3)

 

Nếu có được hàm con này, bạn sẽ làm gọn và sạch hơn nhiều, mà việc kiểm tra cũng như sửa lại sau này cũng dễ dàng hơn rất nhiều.

@ Spam: Vấn đề này hình như em nhớ có đề cập đến trong diễn đàn mình rồi, mà em tìm không thấy, mong các Mem giúp cho vì SN chỉ cố gắng được với danh sách 4 phần tử mà thôi!

@ CaoxuanChung: trong mỗi nhánh hàm cond bạn thừa hàm progn!

(progn
  (setq li (list))
  (setq li1 '(1  2  3  4)
	li2 '(x1 y1 z1 t1)
	li3 '(x2 y2 z2 t2))
  (mapcar
    '(lambda (x y z)
       (setq li (append li  (list (list x y z)))))
    li1
    li2
    li3)
  li
  )

 

Kiểu như này này, nhưng nếu các x1,x2,y1,y2 muốn thay bằng "string" thì cần áp dụng khác, còn trong ví dụ chủ pic thì các số liệu hoàn toàn là kiểu số có lẽ chỉ cần thay vào là được

P/s Hix ẩu quá, không có ứng dụng thực tế, Srr mọi người để suy nghĩ thêm đã


  • 1

#9 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4,140 posts
Danh tiếng: 3657 (đỉnh cao)

Gửi vào 18 April 2013 - 05:52 AM

(progn
  (setq li (list))
  (setq li1 '(1  2  3  4)
	li2 '(x1 y1 z1 t1)
	li3 '(x2 y2 z2 t2))
  (mapcar
    '(lambda (x y z)
       (setq li (append li  (list (list x y z)))))
    li1
    li2
    li3)
  li
  )

 

Kiểu như này này, nhưng nếu các x1,x2,y1,y2 muốn thay bằng "string" thì cần áp dụng khác, còn trong ví dụ chủ pic thì các số liệu hoàn toàn là kiểu số có lẽ chỉ cần thay vào là được

P/s Hix ẩu quá, không có ứng dụng thực tế, Srr mọi người để suy nghĩ thêm đã

 

Chỉ cần như vầy là được rồi bạn :

(mapcar '(lambda(x y z) (list x y z)) li1 li2 li3)


  • 1

#10 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 4,639 posts
Danh tiếng: 2221 (tuyệt vời)

Gửi vào 18 April 2013 - 06:50 AM

Hoặc ngắn hơn là:

(mapcar 'list li1 li2 li3)


  • 2

#11 CaoxuanChung

CaoxuanChung

    biết pan

  • Members
  • Pip
  • 9 posts
Danh tiếng: 0 (bình thường)

Gửi vào 18 April 2013 - 07:52 AM

Có lẽ do các bắt điểm thường trú làm cho LISP của bạn bị sai số

 

Đầu tiên bạn hãy thiết đặt:

(setvar  "CMDECHO"   0)

(setq osm  (getvar "OSMODE")

         cla    (getvar "CLAYER"  ))

(setvar  "OSMODE"   0)

 

Sau khi kết thúc bạn bổ xung vào:

(setvar  "CMDECHO"  1    )

(setvar  "OSMODE"    osm)

(setvar  "CLAYER"      cla )

(setvar  "OSMODE"   osm)
(setvar  "CLAYER"       cla)

Mình đã thêm đoạn code mà bạn nói ở trên, nhưng vẫn xảy ra sai số ... H mình đã gán bằng 15 nhưng khi vẽ đo lại thì vẫn chỉ là 14 :(


  • 0

#12 Song Nhi

Song Nhi

    biết vẽ rectang

  • Members
  • PipPip
  • 83 posts
Danh tiếng: 50 (tàm tạm)

Gửi vào 18 April 2013 - 10:08 PM

Hoặc ngắn hơn là:

(mapcar 'list li1 li2 li3)

 

 

Chỉ cần như vầy là được rồi bạn :

(mapcar '(lambda(x y z) (list x y z)) li1 li2 li3)

 

Các bác vui lòng giải thích kỹ hơn được không ạ?


  • 0

#13 quansla

quansla

    biết lệnh refedit

  • Members
  • PipPipPipPipPipPipPip
  • 574 posts
Danh tiếng: 203 (khá)

Gửi vào 08 May 2013 - 09:46 PM

Các bác vui lòng giải thích kỹ hơn được không ạ?

Thật ức chế, mình cật lực viết nửa trang ấn Ctrl+Z mất sạch không khôi phục lại nổi nửa, tính giải tích kỹ phần này nhưng mờ lại bị thế này

Lại đâu rồi, nản quá viết lại lần 3 rồi, ngày gì mà đen thế

 

(mapcar
  '(lambda(x y z)
     (list x y z))
  li1 li2 li3)
 
dòng đỏ tên hàm Mapcar ý nghĩa tách riêng biệt từng phần tử trong danh sách biến ở dòng tím
Sau đó cùng áp dụng một công thức quy định ở dòng màu xanh
(mapcar
  '(lambda(x y z)
     (list x y z))
  li1 li2 li3)
 
dòng 1 (mapcar : tên hàm mapcar/ ý nghĩa tách riêng biệt từng phần tủ trong danh sách biến màu tím sau đó cùng áp dụng với một lệnh duy nhất được quy định ở phần màu xanh
dòng màu xanh thực chất là phần "mô tả" một hàm mới với các tham số là x y z cũng có nghĩa nó chính là một cách viết khác: gọn hơn, dễ kiểm tra hơn của hàm defun bình thường
Defun bình thường cần có cấu trúc (defun tên-hàm ( [tham số] [ / biến của defun]) [thân defun] ) nhưng với lambda thì không cần khai báo tên-hàm nữa cách này làm gọn hơn, và dễ kiểm tra hơn trong code( vì nếu viết thêm một hàm defun mới thì khi đọc đến mapcar cần lật ngược lại tìm hàm defun này để xem cấu trúc code>> dẫn đến lâu la, mất thì giờ)
dong3 li1 li2 li3 là 3 biến (biến này phải ở dạng danh sách) dùng cho hàm mapcar
Xem thêm help nhé

Được chỉnh sửa bởi quansla on 08 May 2013 - 09:49 PM

  • 0

#14 quansla

quansla

    biết lệnh refedit

  • Members
  • PipPipPipPipPipPipPip
  • 574 posts
Danh tiếng: 203 (khá)

Gửi vào 08 May 2013 - 09:54 PM


Thật ức chế, mình cật lực viết nửa trang ấn Ctrl+Z mất sạch không khôi phục lại nổi nửa, tính giải tích kỹ phần này nhưng mờ lại bị thế này

Lại đâu rồi, nản quá viết lại lần 3 rồi, ngày gì mà đen thế

 

(mapcar
  '(lambda(x y z)
     (list x y z))
  li1 li2 li3)
 
dòng đỏ tên hàm Mapcar ý nghĩa tách riêng biệt từng phần tử trong danh sách biến ở dòng tím
Sau đó cùng áp dụng một công thức quy định ở dòng màu xanh
(mapcar
  '(lambda(x y z)
     (list x y z))
  li1 li2 li3)
 
dòng 1 (mapcar : tên hàm mapcar/ ý nghĩa tách riêng biệt từng phần tủ trong danh sách biến màu tím sau đó cùng áp dụng với một lệnh duy nhất được quy định ở phần màu xanh
dòng màu xanh thực chất là phần "mô tả" một hàm mới với các tham số là x y z cũng có nghĩa nó chính là một cách viết khác: gọn hơn, dễ kiểm tra hơn của hàm defun bình thường
Defun bình thường cần có cấu trúc (defun tên-hàm ( [tham số] [ / biến của defun]) [thân defun] ) nhưng với lambda thì không cần khai báo tên-hàm nữa cách này làm gọn hơn, và dễ kiểm tra hơn trong code( vì nếu viết thêm một hàm defun mới thì khi đọc đến mapcar cần lật ngược lại tìm hàm defun này để xem cấu trúc code>> dẫn đến lâu la, mất thì giờ)
dong3 li1 li2 li3 là 3 biến (biến này phải ở dạng danh sách) dùng cho hàm mapcar
Xem thêm help nhé

Anh Admin xem dum em sao em viet hoai ma no kong hien day du bai viet cua em, cho em hoi luon , nick Admin la gi o day chi viet duoc tieng viet khong dau, em muon gui lai noi dung em da viet bang tieng viet va nho anh edit lai




Thật ức chế, mình cật lực viết nửa trang ấn Ctrl+Z mất sạch không khôi phục lại nổi nửa, tính giải tích kỹ phần này nhưng mờ lại bị thế này
Lại đâu rồi, nản quá viết lại lần 3 rồi, ngày gì mà đen thế

(mapcar
'(lambda(x y z)
(list x y z))
li1 li2 li3)

dòng đỏ tên hàm Mapcar ý nghĩa tách riêng biệt từng phần tử trong danh sách biến ở dòng tím
Sau đó cùng áp dụng một công thức quy định ở dòng màu xanh
(mapcar
'(lambda(x y z)
(list x y z))
li1 li2 li3)

dòng 1 (mapcar : tên hàm mapcar/ ý nghĩa tách riêng biệt từng phần tủ trong danh sách biến màu tím sau đó cùng áp dụng với một lệnh duy nhất được quy định ở phần màu xanh
dòng màu xanh thực chất là phần "mô tả" một hàm mới với các tham số là x y z cũng có nghĩa nó chính là một cách viết khác: gọn hơn, dễ kiểm tra hơn của hàm defun bình thường
Defun bình thường cần có cấu trúc (defun tên-hàm ( [tham số] [ / biến của defun]) [thân defun] ) nhưng với lambda thì không cần khai báo tên-hàm nữa cách này làm gọn hơn, và dễ kiểm tra hơn trong code( vì nếu viết thêm một hàm defun mới thì khi đọc đến mapcar cần lật ngược lại tìm hàm defun này để xem cấu trúc code>> dẫn đến lâu la, mất thì giờ)
dong3 li1 li2 li3 là 3 biến (biến này phải ở dạng danh sách) dùng cho hàm mapcar
Xem thêm help nhé


  • 0

#15 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 5,643 posts
Danh tiếng: 2965 (tuyệt vời)

Gửi vào 09 May 2013 - 11:31 AM

bạn nhắc tới hàm SSGET mình mới nhớ ra, chẳng trách nó vẽ ra nhiều hình sau khi vẽ hình thứ nhất. cái này thì mình đã hiểu đc bản chất ... nhưng còn cái sai số thì mình vẫn chưa hiểu lắm ở cái mục 1. mà bạn nói, mong bạn nói rõ hơn để mình hiểu và sửa đc code cho đúng ... 

Hế hề hề,

Cái sai số này chắc mẻm là do cái phép tính chia đôi của bạn mà ra.

Bởi vì trong lisp phép chia nếu bạn nhập toàn số nguyên thì kết quả sẽ trả ra toàn số nguyên và như thế là nó bị mất đi phần thập phân. để tránh cái sự mất này thì nên thay 2 bằng 2.0 sẽ Ok vì lúc này 2.0 là số thực và kết quả sẽ cho bạn số thực, bao gồm cả phần nguyên và phần thập phân.

hề hề hề,

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.

#16 nguyenbd1

nguyenbd1

    biết lệnh linetype

  • Members
  • PipPipPipPip
  • 240 posts
Danh tiếng: 9 (bình thường)

Gửi vào 08 July 2014 - 06:44 AM

dây0 lầ lisp vẽ trục trọng cơ khí nhưng nó bị lỗi. lúc vẽ đường thẳng ranh giới giữa các đoạn trục nó bị lỗi122369_untitled_3.jpg

nó bị dư 2 doạn màu xanh như hình vẽ. nhờ các anh em xem hộ

http://www.cadviet.c...uc_truc_bac.lsp


  • 0

#17 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 5,643 posts
Danh tiếng: 2965 (tuyệt vời)

Gửi vào 08 July 2014 - 11:46 AM

dây0 lầ lisp vẽ trục trọng cơ khí nhưng nó bị lỗi. lúc vẽ đường thẳng ranh giới giữa các đoạn trục nó bị lỗi

nó bị dư 2 doạn màu xanh như hình vẽ. nhờ các anh em xem hộ

http://www.cadviet.c...uc_truc_bac.lsp

Hề hề hề,

Hãy upload lisp lên trang upload khác. Trang upload của diễn đàn dạo này chuối quá. càng ngày càng lắm hột, nhằn không nổ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.

#18 nguyenbd1

nguyenbd1

    biết lệnh linetype

  • Members
  • PipPipPipPip
  • 240 posts
Danh tiếng: 9 (bình thường)

Gửi vào 08 July 2014 - 08:23 PM

sao thế bác bình. nhờ bác giúp với a


  • 0

#19 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 5,643 posts
Danh tiếng: 2965 (tuyệt vời)

Gửi vào 08 July 2014 - 09:19 PM

sao thế bác bình. nhờ bác giúp với a

Hề hề hề,

Không download được, không biết líp viết cái gì thì sửa kiểu chi.


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

#20 nguyenbd1

nguyenbd1

    biết lệnh linetype

  • Members
  • PipPipPipPip
  • 240 posts
Danh tiếng: 9 (bình thường)

Gửi vào 11 July 2014 - 05:37 PM

xin lỗi bác bình. cosd đậy a. trăm sự nhờ bác.

 

https://mail.google....=f_hxfy4of80

(Defun c:T6() (setvar "dimtxt" 2.5); cheu cao text
(setvar "dimdli" 2.8) ; k/c kich thuoc //
(setvar "dimasz" 1.2); do lon mui ten
(setvar "dimclre" 82) ; mau duong dong kich thuoc
(setvar "dimclrt" 82) ; mau text
(setvar "dimclrd" 82);  mau duong kich thuoc
(setvar "dimtad" 0)
(setvar "dimzin" 8)
(vl-load-com) 
(vl-cmdf "ucs" "W")
(vl-cmdf "LTSCALE" "3")
(vl-cmdf "undo" "be") 
(setq a (getpoint "\n xin chao! day la chuong trinh ve truc trong co khi. Duoc viet boi <<nguyenbd159@Gmail.com>>. hay nhap diem dau tien cua doan truc: "))
(setq b (getpoint a"\n VUI LONG NHAP CHIEU DAI DOAN TRUC : "))
(vl-cmdf ".line" a b "")
(if (= droffld nil) 
(setq droffld1 2.00) 
(setq droffld1 droffld) 
(setq 
droffld (GETREAL (strcat "\nVUI LONG NHAP DUONG KINH TRUC. SAU DO CHON DOAN THANG VUA VE TREN DESTOP : <" (rtos droffld1 2 2) ">")) 
(if (= droffld nil) 
(setq droffld droffld1) 
 
(if (= droffled nil) 
(setq droffled1 2.00) 
(setq droffled1 droffled) 
 
(if (= droffled nil) 
(setq droffled droffled1) 
 
 
(setq offlong (/ droffld 2))
(setq offle (+ offlong droffled))
 
(setq SS (ssget (list (cons 0 "arc,ellipse,lwpolyline,spline,line,circle")))) 
(setq i 0) 
(setq N (sslength ss)) 
(while (< i N) 
(setq TEXTENT (ssname SS i)) 
(setq luubatdiem (getvar "osmode")) 
(setvar "osmode" 0) 
 
(setq diemchuan (vlax-curve-getPointAtDist TEXTENT 0)) 
(setq diemdinhhuong (vlax-curve-getPointAtDist TEXTENT 0.01)) 
(setq goc (angle diemchuan diemdinhhuong)) 
(setq diembentrai (polar diemchuan (- goc (/ pi 2)) offle)) 
(setq diembenphai (polar diemchuan (+ goc (/ pi 2)) offle)) 
 
(vl-cmdf ".offset" offlong textent diembentrai "") 
(vl-cmdf ".offset" offlong textent diembenphai "") 
(vl-cmdf "CHANGE" "P" "" "Properties"  "Color"  "10" "" )
(vl-cmdf "CHANGE" "P" "" "Properties"  "lt"  "center" "" )
 
(setq i (1+ i)) 
(setvar "osmode" luubatdiem) 
 
(vl-cmdf "undo" "end")
(setvar "osmode" 15359)
(command "line" diembentrai diembenphai"")
(command "CIRCLE" "0,0" offlong "")
(command  "dimlinear" pause PAUSE "T" "%%C<>" pause "" "*Cancel*" " *Cancel*")
(vl-cmdf "ucs" "M"  PAUSE )
(vl-cmdf "qdim"  )
 
(Defun c:T6() (setvar "dimtxt" 2.5); cheu cao text
(setvar "dimdli" 2.8) ; k/c kich thuoc //
(setvar "dimasz" 1.2); do lon mui ten
(setvar "dimclre" 82) ; mau duong dong kich thuoc
(setvar "dimclrt" 82) ; mau text
(setvar "dimclrd" 82);  mau duong kich thuoc
(setvar "dimtad" 0)
(setvar "dimzin" 8)
(vl-load-com) 
(vl-cmdf "ucs" "W")
(vl-cmdf "LTSCALE" "3")
(vl-cmdf "undo" "be") 
(setq a (getpoint "\n xin chao! day la chuong trinh ve truc trong co khi. Duoc viet boi <<nguyenbd159@Gmail.com>>. hay nhap diem dau tien cua doan truc: "))
(setq b (getpoint a"\n VUI LONG NHAP CHIEU DAI DOAN TRUC : "))
(vl-cmdf ".line" a b "")
(if (= droffld nil) 
(setq droffld1 2.00) 
(setq droffld1 droffld) 
(setq 
droffld (GETREAL (strcat "\nVUI LONG NHAP DUONG KINH TRUC. SAU DO CHON DOAN THANG VUA VE TREN DESTOP : <" (rtos droffld1 2 2) ">")) 
(if (= droffld nil) 
(setq droffld droffld1) 
 
(if (= droffled nil) 
(setq droffled1 2.00) 
(setq droffled1 droffled) 
 
(if (= droffled nil) 
(setq droffled droffled1) 
 
 
(setq offlong (/ droffld 2))
(setq offle (+ offlong droffled))
 
(setq SS (ssget (list (cons 0 "arc,ellipse,lwpolyline,spline,line,circle")))) 
(setq i 0) 
(setq N (sslength ss)) 
(while (< i N) 
(setq TEXTENT (ssname SS i)) 
(setq luubatdiem (getvar "osmode")) 
(setvar "osmode" 0) 
 
(setq diemchuan (vlax-curve-getPointAtDist TEXTENT 0)) 
(setq diemdinhhuong (vlax-curve-getPointAtDist TEXTENT 0.01)) 
(setq goc (angle diemchuan diemdinhhuong)) 
(setq diembentrai (polar diemchuan (- goc (/ pi 2)) offle)) 
(setq diembenphai (polar diemchuan (+ goc (/ pi 2)) offle)) 
 
(vl-cmdf ".offset" offlong textent diembentrai "") 
(vl-cmdf ".offset" offlong textent diembenphai "") 
(vl-cmdf "CHANGE" "P" "" "Properties"  "Color"  "10" "" )
(vl-cmdf "CHANGE" "P" "" "Properties"  "lt"  "center" "" )
 
(setq i (1+ i)) 
(setvar "osmode" luubatdiem) 
 
(vl-cmdf "undo" "end")
(setvar "osmode" 15359)
(command "line" diembentrai diembenphai"")
(command "CIRCLE" "0,0" offlong "")
(command  "dimlinear" pause PAUSE "T" "%%C<>" pause "" "*Cancel*" " *Cancel*")
(vl-cmdf "ucs" "M"  PAUSE )
(vl-cmdf "qdim"  )
 
(Defun c:T6() (setvar "dimtxt" 2.5); cheu cao text
(setvar "dimdli" 2.8) ; k/c kich thuoc //
(setvar "dimasz" 1.2); do lon mui ten
(setvar "dimclre" 82) ; mau duong dong kich thuoc
(setvar "dimclrt" 82) ; mau text
(setvar "dimclrd" 82);  mau duong kich thuoc
(setvar "dimtad" 0)
(setvar "dimzin" 8)
(vl-load-com) 
(vl-cmdf "ucs" "W")
(vl-cmdf "LTSCALE" "3")
(vl-cmdf "undo" "be") 
(setq a (getpoint "\n xin chao! day la chuong trinh ve truc trong co khi. Duoc viet boi <<nguyenbd159@Gmail.com>>. hay nhap diem dau tien cua doan truc: "))
(setq b (getpoint a"\n VUI LONG NHAP CHIEU DAI DOAN TRUC : "))
(vl-cmdf ".line" a b "")
(if (= droffld nil) 
(setq droffld1 2.00) 
(setq droffld1 droffld) 
(setq 
droffld (GETREAL (strcat "\nVUI LONG NHAP DUONG KINH TRUC. SAU DO CHON DOAN THANG VUA VE TREN DESTOP : <" (rtos droffld1 2 2) ">")) 
(if (= droffld nil) 
(setq droffld droffld1) 
 
(if (= droffled nil) 
(setq droffled1 2.00) 
(setq droffled1 droffled) 
 
(if (= droffled nil) 
(setq droffled droffled1) 
 
 
(setq offlong (/ droffld 2))
(setq offle (+ offlong droffled))
 
(setq SS (ssget (list (cons 0 "arc,ellipse,lwpolyline,spline,line,circle")))) 
(setq i 0) 
(setq N (sslength ss)) 
(while (< i N) 
(setq TEXTENT (ssname SS i)) 
(setq luubatdiem (getvar "osmode")) 
(setvar "osmode" 0) 
 
(setq diemchuan (vlax-curve-getPointAtDist TEXTENT 0)) 
(setq diemdinhhuong (vlax-curve-getPointAtDist TEXTENT 0.01)) 
(setq goc (angle diemchuan diemdinhhuong)) 
(setq diembentrai (polar diemchuan (- goc (/ pi 2)) offle)) 
(setq diembenphai (polar diemchuan (+ goc (/ pi 2)) offle)) 
 
(vl-cmdf ".offset" offlong textent diembentrai "") 
(vl-cmdf ".offset" offlong textent diembenphai "") 
(vl-cmdf "CHANGE" "P" "" "Properties"  "Color"  "10" "" )
(vl-cmdf "CHANGE" "P" "" "Properties"  "lt"  "center" "" )
 
(setq i (1+ i)) 
(setvar "osmode" luubatdiem) 
 
(vl-cmdf "undo" "end")
(setvar "osmode" 15359)
(command "line" diembentrai diembenphai"")
(command "CIRCLE" "0,0" offlong "")
(command  "dimlinear" pause PAUSE "T" "%%C<>" pause "" "*Cancel*" " *Cancel*")
(vl-cmdf "ucs" "M"  PAUSE )
(vl-cmdf "qdim"  )
 
(Defun c:T6() (setvar "dimtxt" 2.5); cheu cao text
(setvar "dimdli" 2.8) ; k/c kich thuoc //
(setvar "dimasz" 1.2); do lon mui ten
(setvar "dimclre" 82) ; mau duong dong kich thuoc
(setvar "dimclrt" 82) ; mau text
(setvar "dimclrd" 82);  mau duong kich thuoc
(setvar "dimtad" 0)
(setvar "dimzin" 8)
(vl-load-com) 
(vl-cmdf "ucs" "W")
(vl-cmdf "LTSCALE" "3")
(vl-cmdf "undo" "be") 
(setq a (getpoint "\n xin chao! day la chuong trinh ve truc trong co khi. Duoc viet boi <<nguyenbd159@Gmail.com>>. hay nhap diem dau tien cua doan truc: "))
(setq b (getpoint a"\n VUI LONG NHAP CHIEU DAI DOAN TRUC : "))
(vl-cmdf ".line" a b "")
(if (= droffld nil) 
(setq droffld1 2.00) 
(setq droffld1 droffld) 
(setq 
droffld (GETREAL (strcat "\nVUI LONG NHAP DUONG KINH TRUC. SAU DO CHON DOAN THANG VUA VE TREN DESTOP : <" (rtos droffld1 2 2) ">")) 
(if (= droffld nil) 
(setq droffld droffld1) 
 
(if (= droffled nil) 
(setq droffled1 2.00) 
(setq droffled1 droffled) 
 
(if (= droffled nil) 
(setq droffled droffled1) 
 
 
(setq offlong (/ droffld 2))
(setq offle (+ offlong droffled))
 
(setq SS (ssget (list (cons 0 "arc,ellipse,lwpolyline,spline,line,circle")))) 
(setq i 0) 
(setq N (sslength ss)) 
(while (< i N) 
(setq TEXTENT (ssname SS i)) 
(setq luubatdiem (getvar "osmode")) 
(setvar "osmode" 0) 
 
(setq diemchuan (vlax-curve-getPointAtDist TEXTENT 0)) 
(setq diemdinhhuong (vlax-curve-getPointAtDist TEXTENT 0.01)) 
(setq goc (angle diemchuan diemdinhhuong)) 
(setq diembentrai (polar diemchuan (- goc (/ pi 2)) offle)) 
(setq diembenphai (polar diemchuan (+ goc (/ pi 2)) offle)) 
 
(vl-cmdf ".offset" offlong textent diembentrai "") 
(vl-cmdf ".offset" offlong textent diembenphai "") 
(vl-cmdf "CHANGE" "P" "" "Properties"  "Color"  "10" "" )
(vl-cmdf "CHANGE" "P" "" "Properties"  "lt"  "center" "" )
 
(setq i (1+ i)) 
(setvar "osmode" luubatdiem) 
 
(vl-cmdf "undo" "end")
(setvar "osmode" 15359)
(command "line" diembentrai diembenphai"")
(command "CIRCLE" "0,0" offlong "")
(command  "dimlinear" pause PAUSE "T" "%%C<>" pause "" "*Cancel*" " *Cancel*")
(vl-cmdf "ucs" "M"  PAUSE )
(vl-cmdf "qdim"  )
 
(Defun c:T6() (setvar "dimtxt" 2.5); cheu cao text
(setvar "dimdli" 2.8) ; k/c kich thuoc //
(setvar "dimasz" 1.2); do lon mui ten
(setvar "dimclre" 82) ; mau duong dong kich thuoc
(setvar "dimclrt" 82) ; mau text
(setvar "dimclrd" 82);  mau duong kich thuoc
(setvar "dimtad" 0)
(setvar "dimzin" 8)
(vl-load-com) 
(vl-cmdf "ucs" "W")
(vl-cmdf "LTSCALE" "3")
(vl-cmdf "undo" "be") 
(setq a (getpoint "\n xin chao! day la chuong trinh ve truc trong co khi. Duoc viet boi <<nguyenbd159@Gmail.com>>. hay nhap diem dau tien cua doan truc: "))
(setq b (getpoint a"\n VUI LONG NHAP CHIEU DAI DOAN TRUC : "))
(vl-cmdf ".line" a b "")
(if (= droffld nil) 
(setq droffld1 2.00) 
(setq droffld1 droffld) 
(setq 
droffld (GETREAL (strcat "\nVUI LONG NHAP DUONG KINH TRUC. SAU DO CHON DOAN THANG VUA VE TREN DESTOP : <" (rtos droffld1 2 2) ">")) 
(if (= droffld nil) 
(setq droffld droffld1) 
 
(if (= droffled nil) 
(setq droffled1 2.00) 
(setq droffled1 droffled) 
 
(if (= droffled nil) 
(setq droffled droffled1) 
 
 
(setq offlong (/ droffld 2))
(setq offle (+ offlong droffled))
 
(setq SS (ssget (list (cons 0 "arc,ellipse,lwpolyline,spline,line,circle")))) 
(setq i 0) 
(setq N (sslength ss)) 
(while (< i N) 
(setq TEXTENT (ssname SS i)) 
(setq luubatdiem (getvar "osmode")) 
(setvar "osmode" 0) 
 
(setq diemchuan (vlax-curve-getPointAtDist TEXTENT 0)) 
(setq diemdinhhuong (vlax-curve-getPointAtDist TEXTENT 0.01)) 
(setq goc (angle diemchuan diemdinhhuong)) 
(setq diembentrai (polar diemchuan (- goc (/ pi 2)) offle)) 
(setq diembenphai (polar diemchuan (+ goc (/ pi 2)) offle)) 
 
(vl-cmdf ".offset" offlong textent diembentrai "") 
(vl-cmdf ".offset" offlong textent diembenphai "") 
(vl-cmdf "CHANGE" "P" "" "Properties"  "Color"  "10" "" )
(vl-cmdf "CHANGE" "P" "" "Properties"  "lt"  "center" "" )
 
(setq i (1+ i)) 
(setvar "osmode" luubatdiem) 
 
(vl-cmdf "undo" "end")
(setvar "osmode" 15359)
(command "line" diembentrai diembenphai"")
(command "CIRCLE" "0,0" offlong "")
(command  "dimlinear" pause PAUSE "T" "%%C<>" pause "" "*Cancel*" " *Cancel*")
(vl-cmdf "ucs" "M"  PAUSE )
(vl-cmdf "qdim"  )

  • 0