Chuyển đến nội dung
Diễn đàn CADViet
  • Thông báo

    • Nguyen Hoanh

      CADViet đã hoàn tất nâng cấp   14/09/2017

      Chào các bạn, CADViet đã hoàn tất việc nâng cấp lên phiên bản mới. Tất cả các chức năng đã hoạt động theo kỳ vọng của ban quản trị. Nếu có vấn đề gì cần phản hồi, các bản post ở đây nhé: Trân trọng, Nguyễn Hoành.
Jin Yong

Hỏi về Lisp (thuật toán, ý tưởng, coding,...)

Các bài được khuyến nghị

Doan Van Ha    2.678

Ái dà! Chắc phải chờ bạn TL giải thích rõ ràng trong 1 chuỗi thì yếu tố nào là số và yếu tố nào không phải số thì may ra còn khả quan.

Ví dụ chuỗi 1..2 hoặc chuỗi 1.2.3 thì hiểu đâu là số và đâu không phải là số?

Tất cả lisp của KK, Tue_NV, DVH đều bó tay với các trường hợp này.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Tue_NV    3.841

 

Test hàm bác Tue_NV:

(Tue-int-real "a2b3.1c'5")

"a2.0000b3.1000c'5.0000"

 

(Tue-int-real "a2b3.1c'''''5")

"a2.0000b3.1000c'''''5.0000"

 

(Tue-int-real "a2b3.1c'''''5")

"a2.0000b3.1000c'''''5.0000"

 

(Tue-int-real "(9*sqrt(3))")

"(9.0000*sqrt(3.0000))"

 

(Tue-int-real "(5+2)* 3")

"(5.0000+2.0000)* 3.0000"

 

(Tue-int-real "1a2.3b4c56")

"1.0000a2.3000b4.0000c56.0000"

 

(Tue-int-real "a2b3.1c5")

"a2.0000b3.1000c5.0000"

 

(Tue-int-real "a2b3.1c5b")
"a2.0000b3.1000c5.0000b"
 

(Tue-int-real "81!@0800&853") => Chạy hoài không dừng.

(Tue-int-real "a2b3.1c'''''5")
"a2.0000b3.1000c'''''5.0000"
 
(Tue-int-real "(9*sqrt(3))")
"(9.0000*sqrt(3.0000))"
 
(Tue-int-real "1a2.3b4c56")
"1.0000a2.3000b4.0000c56.0000"
 
(Tue-int-real "a2b3.1c5")
"a2.0000b3.1000c5.0000"
 
(Tue-int-real "81!@0800&853") => Chạy hoài không dừng ^ ^

 

(Tue-int-real "81!@0800&853") => Chạy hoài không dừng ^ ^

Reply : Là do kí tự "&" chưa có trong chuỗi "ABCDEFGHIKLMNOPQRSTUYZXY+-*/%( ),#@$^!~_"

Bạn thêm kí tự "&" vào trong "ABCDEFGHIKLMNOPQRSTUYZXY+-*/%( ),#@$^!~_" là được

Thêm chổ nào cũng được   :)

 

@Bác DVH: "Số" : chỉ cần đáp ứng lệnh CAL là được

Lisp bác viết bị lỗi mỗi TH này : (ha "(9*sqrt(3))")

Còn Lisp bác KK và Tue_NV chạy tốt...... :)

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Doan Van Ha    2.678

Bác Tue_NV có vẽ hơi lạc quan về chủ đề này. Nhất là về định nghĩa số.

1). Nhắc lại: tôi test với ví dụ ở #1575 thì không nhúc nhích => không thể chạy tốt.

2). Ngay cả khái niệm "số" là đáp ứng lệnh CAL cũng khó hiểu:

1E2 là 1 số (= 100) nhưng (Tue-int-real "1E2") => 100E2 thì tính toán thế nào đây với lệnh CAL?

3). Những cái dấu chấm (.) cũng rắc rối vô vàn với cách hiểu về nó.

Bác và tôi đều đã từng lạc vào mê đồ trận "chọn text là số nguyên, số thực..." rồi mà.

Theo tôi, bạn TL phải đưa ra những giới hạn và những khái niệm rõ rệt thì may ra mới có thể.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Tue_NV    3.841

Bác Tue_NV có vẽ hơi lạc quan về chủ đề này. Nhất là về định nghĩa số.

1). Nhắc lại: tôi test với ví dụ ở #1575 thì không nhúc nhích => không thể chạy tốt.

2). Ngay cả khái niệm "số" là đáp ứng lệnh CAL cũng khó hiểu:

1E2 là 1 số (= 100) nhưng (Tue-int-real "1E2") => 100E2 thì tính toán thế nào đây với lệnh CAL?

3). Những cái dấu chấm (.) cũng rắc rối vô vàn với cách hiểu về nó.

Bác và tôi đều đã từng lạc vào mê đồ trận "chọn text là số nguyên, số thực..." rồi mà.

Theo tôi, bạn TL phải đưa ra những giới hạn và những khái niệm rõ rệt thì may ra mới có thể.

 

1. Tue_NV test, bác KangKung test, bạn Chiron test thấy không vấn đề gì......

2. Cảm ơn bác. Thì ra mình còn vướng 1 trường hợp 1E2, đó là chữ E trong lệnh cal. Lisp bác KK trả về 1.0E2.0 cũng không thể tính toán với CAL. Xử cái này cũng đơn giản  :) 

3. Tue_NV hiểu vấn đề đơn giản, chỉ là vấn đề vượt giới hạn số nguyên của CAL thôi. Chỉ là vấn đề ứng dụng chuyển số nguyên về số thực để không bị lỗi về số nguyên của CAL (1 ứng dụng viết bằng NET mà anh gia_bach đã từng viết)

Thôi, thì cứ để bạn TL phản hồi xem sao......

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
ThuyLinh313    146

Hix. Mình làm các bạn vất vả quá! Mình cũng không ngờ khi bóc tách cụ thể thì nó lại trở lên phức tạp như vây, cũng bởi vì mình chưa có thời gian để suy nghĩ về nó, khi nêu vấn đề bản thân mình cũng chưa tính được đến những trường hợp mà các bạn nêu bên trên. 

Vì vấn đề đã trở lên phức tạp hơn mình tưởng nên mình thu hẹp và cụ thể hơn yêu cầu: Chuỗi nhập vào là 1 chuỗi đảm bảo để hàm Cal hiểu đó là 1 phép tính số học, giống như khi bạn gõ lệnh Cal và nhập phép tính vậy. Cảm ơn các bạn  :)

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Tue_NV    3.841

Hix. Mình làm các bạn vất vả quá! Mình cũng không ngờ khi bóc tách cụ thể thì nó lại trở lên phức tạp như vây, cũng bởi vì mình chưa có thời gian để suy nghĩ về nó, khi nêu vấn đề bản thân mình cũng chưa tính được đến những trường hợp mà các bạn nêu bên trên. 

Vì vấn đề đã trở lên phức tạp hơn mình tưởng nên mình thu hẹp và cụ thể hơn yêu cầu: Chuỗi nhập vào là 1 chuỗi đảm bảo để hàm Cal hiểu đó là 1 phép tính số học, giống như khi bạn gõ lệnh Cal và nhập phép tính vậy. Cảm ơn các bạn  :)

Mình chỉ xử thêm cái chữ "E" trong CAL là xong ấy mà

 

 
(defun Tue-int-real(str / str-res str2)
;;;write by Tue_NV
  ;;;;;example: (Tue-int-real "a2b3.1c5") -> "a2.0b3.1c5.0"
  ;;;;;(Tue-int-real "aa2222b3.1c56") -> "aa2222.0b3.1c56.0"
  ;;;;;(Tue-int-real "sqrt(5E10+6E9)") -> "sqrt(50000000000.0+6000000000.0)"
 (vl-load-com)
(setq str-res "" str2 str)
  (while (/= (strlen str2) 0)
    (setq str2 (vl-string-left-trim "ABCDEFGHIKLMNOPQRSTUYZXY+-*/%( ),#@$^!~_&^\\"  (strcase str2)))
    (if (/= (strlen str2) 0) 
(setq str-res (strcat str-res (substr str 1 (- (strlen str) (strlen str2))) (vl-string-right-trim "0" (rtos (atof str2) 2 9))))
(setq str-res (strcat str-res (substr str 1 (- (strlen str) (strlen str2))) ))
    )
    (if (= (substr str-res (strlen str-res) 1) ".") (setq str-res (strcat str-res "0")))
    (setq str2 (vl-string-left-trim "E1234567890 ."  str2)
 str (substr str (1+ (- (strlen str) (strlen str2))) (strlen str))
    )
  )
str-res
  )
  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Doan Van Ha    2.678

Bác Tue_NV: viết cái lisp này chẳng "sướng" chút nào nhỉ? Bởi không biết đến bao giờ thì nó mới hết... lỗi! :lol:

Hiểu như thế nào với máy của tôi đây trong 2 ví dụ này (không biết máy các bạn có bị vầy không):

 

(Tue-int-real "1sqrt(5E10+6E9)") => "1sqrt(5+6)"

(Tue-int-real "1...2") => "1"

(Tue-int-real "1sqrt(5E10+6E9)") => "1sqrt(5+6)"
(Tue-int-real "1...2") => "1"
  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Tue_NV    3.841

 

Bác Tue_NV: viết cái lisp này chẳng "sướng" chút nào nhỉ? Bởi không biết đến bao giờ thì nó mới hết... lỗi! :lol:

Hiểu như thế nào với máy của tôi đây trong 2 ví dụ này (không biết máy các bạn có bị vầy không):

 

(Tue-int-real "1sqrt(5E10+6E9)") => "1sqrt(5+6)"

(Tue-int-real "1...2") => "1"

(Tue-int-real "1sqrt(5E10+6E9)") => "1sqrt(5+6)"
(Tue-int-real "1...2") => "1"

 

1./ Không hiểu máy bác bị lỗi gì chứ, Tue_NV gọi ra vầy :

 

 
Command: (Tue-int-real "1sqrt(5E10+6E9)")
"1.0sqrt(50000000000.0+6000000000.0)"

2 Trong CAL không chấp nhận số như vầy "1..2"

 

Viết Lisp nhanh gọn, sướng quá chứ lị!

Command: (Tue-int-real "1sqrt(5E10+6E9)")
"1.0sqrt(50000000000.0+6000000000.0)"
 
2./ Trong CAL không có số như vầy : "1..2"
 
Viết Lisp nhanh, gọn , sướng quá chứ lị!

 

 

Command: (Tue-int-real "1sqrt(5E10+6E9)")
"1.0sqrt(50000000000.0+6000000000.0)"
 
2./ Trong CAL không có số như vầy : "1..2"
 
Viết Lisp nhanh gọn, sướng quá chứ lị!
 
Command: (Tue-int-real "1sqrt(5E10+6E9)")
"1.0sqrt(50000000000.0+6000000000.0)"
 
Trong CAL không chấp nhận "số như vầy"  "1..2"

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Doan Van Ha    2.678

1). Liệu có thể bị 1 biến hệ thống nào không nhỉ? Cùng nghĩ xem sao, chứ máy tôi hoạt động tốt.

2). Cho đến ngay lúc này tôi mới thực sự hiểu được ý đồ của bạn TL, chứ hôm kia tới giờ tôi cứ lơ mơ. Tôi tóm tắt câu hỏi như thế này xem có đúng không nhé:

Có 1 chuỗi là 1 biểu thức đúng của lệnh CAL. Do hạn chế của integer nên muốn chuyển tất cả integer trong chuỗi đó sang real để phép tính luôn cho kết quả đúng.

Hoặc ngắn gọn hơn: làm sao để tính đúng biểu thức CAL với 1 chuỗi, cho dù nó chứa integer?.

Nếu vậy, chắc bài toán sẽ đơn giản hơn.

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
ThuyLinh313    146

 

Mình chỉ xử thêm cái chữ "E" trong CAL là xong ấy mà

 

 
(defun Tue-int-real(str / str-res str2)
;;;write by Tue_NV
  ;;;;;example: (Tue-int-real "a2b3.1c5") -> "a2.0b3.1c5.0"
  ;;;;;(Tue-int-real "aa2222b3.1c56") -> "aa2222.0b3.1c56.0"
  ;;;;;(Tue-int-real "sqrt(5E10+6E9)") -> "sqrt(50000000000.0+6000000000.0)"
 (vl-load-com)
(setq str-res "" str2 str)
  (while (/= (strlen str2) 0)
    (setq str2 (vl-string-left-trim "ABCDEFGHIKLMNOPQRSTUYZXY+-*/%( ),#@$^!~_&^\\"  (strcase str2)))
    (if (/= (strlen str2) 0) 
(setq str-res (strcat str-res (substr str 1 (- (strlen str) (strlen str2))) (vl-string-right-trim "0" (rtos (atof str2) 2 9))))
(setq str-res (strcat str-res (substr str 1 (- (strlen str) (strlen str2))) ))
    )
    (if (= (substr str-res (strlen str-res) 1) ".") (setq str-res (strcat str-res "0")))
    (setq str2 (vl-string-left-trim "E1234567890 ."  str2)
 str (substr str (1+ (- (strlen str) (strlen str2))) (strlen str))
    )
  )
str-res
  )

Bạn Tue_NV xem lại truờng hợp này

(Tue-int-real "6*.1")

Mình chạy thử thì nó không thoát đuợc khỏi vòng lặp. Các bạn thông cảm vì máy tính của mình bị hư, đang chờ kỹ thuật sửa. hiện tại mình chỉ tranh thủ muợn máy đồng nghiệp để test kết quả chạy lisp của các bạn chứ chưa có thời gian để xem kỹ để trả lời các bạn. Code của bạn KangKung chạy gần đáp ứng đuợc nhu cầu rồi. chỉ còn truờng hợp E nữa thôi.

@ĐVH: Bạn hiểu chính xác ý định của mình rồi, đúng là cách nêu yêu cầu của mình đã làm phức tạp hoá vấn đề lên rất nhiều. Rút kinh nghiệm lần sau ^^

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Tue_NV    3.841

Bạn Tue_NV xem lại truờng hợp này

(Tue-int-real "6*.1")

Mình chạy thử thì nó không thoát đuợc khỏi vòng lặp. Các bạn thông cảm vì máy tính của mình bị hư, đang chờ kỹ thuật sửa. hiện tại mình chỉ tranh thủ muợn máy đồng nghiệp để test kết quả chạy lisp của các bạn chứ chưa có thời gian để xem kỹ để trả lời các bạn. Code của bạn KangKung chạy gần đáp ứng đuợc nhu cầu rồi. chỉ còn truờng hợp E nữa thôi.

@ĐVH: Bạn hiểu chính xác ý định của mình rồi, đúng là cách nêu yêu cầu của mình đã làm phức tạp hoá vấn đề lên rất nhiều. Rút kinh nghiệm lần sau ^^

 

 

Mình test ra vầy : 

 

 
Command: (Tue-int-real "6*.1")
"6.0*0.1"
Command: (Tue-int-real "6*.1")
"6.0*0.1"

Có thể do chức năng down Lisp bị thiếu chi đó . Tue_NV gửi Lisp gốc các bác test thử

Command: (Tue-int-real "6*.1")
"6.0*0.1"
 
Command: (Tue-int-real "6*.1")
 
Command: (Tue-int-real "6*.1")
 
Command: (Tue-int-real "6*.1")
 
Command: (Tue-int-real "6*.1")
 

http://www.mediafire.com/?roc8ub9yt96403j

Command: (Tue-int-real "6*.1")
"6.0*0.1"
 
Có thể do chức năng Down Lisp bị thiếu chi đó. Tue_NV gửi Lisp gốc, các bác Test thử
 
@bác DVH : Vấn đề đơn giản như bác viết vậy. Do bác nghĩ phức tạp về số thực "'" hơn thôi 

 

 

Command: (Tue-int-real "6*.1")
"6.0*0.1"
 
Có thể do chức năng Down Lisp bị thiếu chi đó. Tue_NV gửi Lisp gốc, các bác Test thử
 
@bác DVH : Vấn đề đơn giản như bác viết vậy. Do bác nghĩ phức tạp về số thực "'" hơn thôi 
Command: (Tue-int-real "6*.1")
"6.0*0.1"
 
Nhiều khi chức năng Download của Diễn đàn bị thiếu chi đó.
Tue_NV gửi Lisp gốc các bác Test thử : 
 
@Bác DVH : Vấn đề đơn giản là vậy, do bác hiểu số thực "." nó phức tạp lên mà thôi
  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
ketxu    2.653

Khi số đã biểu diễn ở dạng E rồi thì làm j còn giới hạn Integer nữa các bác hầy ^^

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Doan Van Ha    2.678

Khi số đã biểu diễn ở dạng E rồi thì làm j còn giới hạn Integer nữa các bác hầy ^^

Biểu diễn thành dạng E là real nhưng làm sao biết trong chuỗi cal có những gì? Thậm chí có E nhưng E ở 1 vị trí khác, còn các vị trí khác không có E thì Cal vẫn có thể chạy bậy. Ví dụ: "1E3+123456789^10"

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Tue_NV    3.841

Biểu diễn thành dạng E là real nhưng làm sao biết trong chuỗi cal có những gì? Thậm chí có E nhưng E ở 1 vị trí khác, còn các vị trí khác không có E thì Cal vẫn có thể chạy bậy. Ví dụ: "1E3+123456789^10"

 

Không biết bác DVH test được chưa?

 

 

 
Command: (TUE-INT-REAL "1E3+123456789^10")
"1000.0+123456789.0^10.0"

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
classicgt    1

Chào tất cả các bác cao thủ về lisp.

Em không biết viết bài mới ở Cadviet như thế nào cả đành nhờ trong bài viết này vậy.

Em có một nguyện vọng muốn nhờ các bác viết giúp cho em 1 lisp với nội dung như sau:

lisp lấy thông số của nhiều đường poline cùng một lúc rồi xuất sang EXcel như dạng sau:

VD: Có 2 đường Poline 

 

TT                                  Thông số của Poline (có thể 2 (đầu, cuối) hoặc 3 điểm (đầu, giữa cuối)

 1                                                     at point  X=? Y=?  Z=   ?

                                                        at point  X=? Y=?  Z=   ?

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

 2                                                      at point  X=? Y=?  Z=   ?

                                                         at point  X=? Y=?  Z=   ?

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

....

....

 

 

Em rất mong các bác có thể giúp em, vì bình thường lệnh "LI" chỉ lấy được thông số của 1 đối tượng Poline

Em muốn dùng lisp dùng một lệnh lấy được thông số của nhiều đường cùng một lúc rồi xuất ra EXcel như trên.

   Cám ơn các bác nhiều lắm.

Giúp em nhé! 

 

 

 

 

=> Câu này trên diễn đàn hoặc Google có nhiều lắm rồi bạn nhé

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
ketxu    2.653

Biểu diễn thành dạng E là real nhưng làm sao biết trong chuỗi cal có những gì? Thậm chí có E nhưng E ở 1 vị trí khác, còn các vị trí khác không có E thì Cal vẫn có thể chạy bậy. Ví dụ: "1E3+123456789^10"

Bậy là sao bác ơi ^^  kết quả sai ạ :o. Ket k có máy để check :) Nếu đã không biết trong chuỗi có gì, thì đề bài này không có đáp án rồi ^^.

Ngoài ra, cal cho phép tính với cả biến các bác ạ, nhỡ e của người ta là biến có giá trị thì ... giết người rồi ^^

 

Mà, các bác chỉ cần nói giải pháp là bạn TL code được mà, mò code để biết giải thuật mệt quá , hic hic

 

@Bác Tuệ :Cal nhập được unicode, không biết bác liệt kê được hết không :( 

 

Code bác nào cũng đẹp, ketxu thanks hết rồi nhá. Học được nhiều quá

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Tue_NV    3.841

Ẹ quá! Chẳng hiểu vì sao?

 

Command: (TUE-INT-REAL "1E3+123456789^10")

"1+123456789^1"

 

 

Bác đã test code gốc của Tue_NV ở bài viết #1586 chưa?

 

@Bác Tuệ :Cal nhập được unicode, không biết bác liệt kê được hết không :(

 

Cái này chắc phải dùng hàm để liệt kê là xong

Hình như CAL đâu có cho nhận biến nhỉ? 

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Doan Van Ha    2.678

Bậy là sao bác ơi ^^  kết quả sai ạ :o. Ket k có máy để check :) Nếu đã không biết trong chuỗi có gì, thì đề bài này không có đáp án rồi ^^.

Ngoài ra, cal cho phép tính với cả biến các bác ạ, nhỡ e của người ta là biến có giá trị thì ... giết người rồi ^^

 

Mà, các bác chỉ cần nói giải pháp là bạn TL code được mà, mò code để biết giải thuật mệt quá , hic hic

 

@Bác Tuệ :Cal nhập được unicode, không biết bác liệt kê được hết không :(

 

Code bác nào cũng đẹp, ketxu thanks hết rồi nhá. Học được nhiều quá

1). Khi các số nguyên quá lớn thì các phép tính với nó có thể cho kết quả sai, không cứ gì CAL. Chỉ có real thì tính toán vô tư. Đây là nguyên tắc của cad.

2). Đây là bài toán thực tế nên chủ TP muốn E biểu diễn số chứ không phải biến. Đó là ý muốn của chủ TP.

@Tue_NV: #1586 đây!

 

Command: (Tue-int-real "6*.1")

"6*0.1"

Command: (Tue-int-real "6*.1")

"6*0.1"

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Tue_NV    3.841

1). Khi các số nguyên quá lớn thì các phép tính với nó có thể cho kết quả sai, không cứ gì CAL. Chỉ có real thì tính toán vô tư. Đây là nguyên tắc của cad.

2). Đây là bài toán thực tế nên chủ TP muốn E biểu diễn số chứ không phải biến. Đó là ý muốn của chủ TP.

@Tue_NV: #1586 đây!

 

Command: (Tue-int-real "6*.1")

"6*0.1"

Command: (Tue-int-real "6*.1")

"6*0.1"

Thì ra nó chịu ảnh hưởng của biến DimZin

Bác set biến dimzin = 0 rồi chạy thử với các ví dụ mà bác chạy chưa được thử xem

 

Muốn e làm biến cũng đơn giản thôi, có điều CAL không chấp nhận biếne! Tên Ket đoán bừa  :D

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Tue_NV    3.841

1). Đúng rồi: Dimzin

2). Cal chấp nhận biến đã lượng giá.

 

1> ok rồi nhé bác.

2> Bác có thể ví dụ rõ hơn

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Tue_NV    3.841

Command: (setq a 5)

5

Command: cal

>> Expression: a*2

10

E như này :

 

 
command: (setq e 2)
2
Command: (cal "e*2")
0.0

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
duy782006    1.374

Mình làm lisp như sau:

Để sửa các đối tượng là text, att trong block thuộc tính, giá trị dim.

Nhưng ko biết sai chổ nào mà dim không tài nào sửa được.

Các bác xoi giúp với. Cám ơn!

(defun duy:docgt (/ dchon)
(setq dchon (car (nentselp "\nChon")))
(while
(or
(null dchon)
(and (= (cdr (assoc 1 (entget dchon))) nil)
)
)
(princ "\nDoi tuong khong hop le")
(setq dchon (car (nentselp "\nChon")))
)
dchon)



(defun c:edd (/ doituong noidung suathanh DTMs)
(command "undo" "be")
(setq doituong (duy:docgt))
(setq noidung (cdr (assoc 1 (entget doituong))))
(setq suathanh (lisped noidung))
(setq DTMs (subst (cons 1 suathanh) (assoc 1 (entget doituong)) (entget doituong)))
(entmod DTMs)
(command ".move" doituong "" "_non" (list 0 0 0) "_non" (list 0 0 0))
(command "undo" "end")
(princ)
)

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Tạo một tài khoản hoặc đăng nhập để nhận xét

Bạn cần phải là một thành viên để lại một bình luận

Tạo tài khoản

Đăng ký một tài khoản mới trong cộng đồng của chúng tôi. Điều đó dễ mà.

Đăng ký tài khoản mới

Đăng nhập

Bạn có sẵn sàng để tạo một tài khoản ? Đăng nhập tại đây.

Đăng nhập ngay


×