Chuyển đến nội dung
Diễn đàn CADViet
Nguyen Hoanh

Viết lisp theo yêu cầu [phần 2]

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

Bài viết số 358 và 362 lấy ở đâu ạ?

link này mình mới saveas sang cad2000: http://www.cadviet.com/upfiles/2/duongdoccopy_1.dwg

Mong các bạn có thể giúp đỡ cho mình

Chào bạn dtlongkts,

Mình đã mở được file bạn gửi, xong chưa hiểu rõ ý bạn muốn. Bạn có thể post cái hình ảnh ví dụ mà bạn muốn có sau khi chạy lisp được không???

Chúc bạn vui.

  • 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

Nhờ các Bác giúp tôi giải bài toán này bằng autolisp, tôi đã làm thủ công như sau:

Bài toán:

Cho Solid và một mặt cong surface, mặt cong cắt solid thành 2 phần trên và dưới (hình Solid0.dwg), phần dưới có thể tích và tọa độ trọng tâm là (V0=89825.1412, Xg0=-5.6352, Yg0= 0.0000, Zg0=9.6808 ). Khi nghiêng mặt cong vuông góc theo phương Y một góc bất kỳ và cho mặt cong cắt solid. Tính phần thể tích bên dưới sao cho V=V0 và Xg=Xg0 hoặc có thể sai số cho phép <1%.

Tôi đã giải quyết bài toán trên theo phương pháp thủ công như sau:

Sử dụng command mass properties ta tính được (Hình Solid 0.dwg) :

Mass: V0= 89825.1412

Centroid: Xg0= -5.6352

Yg0= 0.0000

Zg0= 9.6808

http://www.mediafire.com/file/iw33i2dw5zb/SolidS0m.dwg

 

Sử dụng command mass properties ta tính được (Hình Solid 20.dwg) :

Mass: V20= 90491.3291

Centroid: Xg20= -5.4615

Yg20= -4.5842

Zg20= 10.2440

http://www.mediafire.com/file/xmnzmznjnfk/SolidS20m.dwg

 

Sử dụng command mass properties ta tính được (Hình Solid 40.dwg) :

Mass: V40= 89249.0961

Centroid: Xg40= -5.3788

Yg40= -7.3732

Zg40= 11.1709

http://www.mediafire.com/file/dhtzmtwmz0j/SolidS40m.dwg

 

Mặc dù đã cố gắng rất nhiều nhưng giải quyết bằng phương pháp thủ công thì không trọn vẹn và mất rất nhiều thời gian và công sức tuy chỉ ở 2 trường hợp. Mong các bác chỉ giáo cho bằng cách viết autolisp để có thể sử dụng cho vô số các trường hợp khác.

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
Chào bạn dtlongkts,

Mình đã mở được file bạn gửi, xong chưa hiểu rõ ý bạn muốn. Bạn có thể post cái hình ảnh ví dụ mà bạn muốn có sau khi chạy lisp được không???

Chúc bạn vui.

 

Chào bạn phamthanhbinh đây là hình ảnh sau khi sử dụng lisp:

http://www.cadviet.com/upfiles/2/newblockmodel_1.pdf

Rất mong bạn giúp đỡ. Nếu được mình sẽ nạp tiền vào thẻ sim cho 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

Bác dlongkts có vẻ hơi khó khăn để diễn đạt điều bác muốn nhỉ. thú thực là nhìn cả bản vẽ và file pdf rồi cả mấy post trên của bác em vẫn chưa hiểu bác muốn gì?

Bác đọc cái này nhé. chúc bác thành công.

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
Bác dlongkts có vẻ hơi khó khăn để diễn đạt điều bác muốn nhỉ. thú thực là nhìn cả bản vẽ và file pdf rồi cả mấy post trên của bác em vẫn chưa hiểu bác muốn gì?

Bác đọc cái này nhé. chúc bác thành công.

 

Chào bạn Thái. Ý mình muốn:

 

Thứ nhất là copy các số dạng:1+, 1- ... (Các số này do mình đánh lệnh: leader --> setting/tolerance) thành 2+, 2-....

Thứ hai là copy 1 số được tạo ra do đánh lệnh att attdef sau đó kết hợp với các hình bất kỳ để thành 1 block. Mình copy block đó thì tự động nhẩy sang 1 block khác với cấp số cộng n=1 hoặc n=-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
Chào bạn Thái. Ý mình muốn:

Chào bạn dtlongkts,

Mình đã xem hình ảnh bạn gửi và cái file dwg gốc. Mình hiểu về yêu cầu của bạn như sau:

1/- Trên file bản vẽ đã có sẵn các text dạng A+ hay A- , trong đó A là một text số. Bây giờ bạn muốn dùng lệnh copy cái text mẫu này sang các vị trí khác mà mỗi lần copy thì A sẽ thay đổi tăng dần lên theo cấp số cộng với công sai a cho trước. Ví dụ copy 10 lần thì giá trị cuối cùng của A sẽ là A10 = A + a*10, còn ký tự + hay - không thay đổi.

2/- Trên bản vẽ đã có sẵn block thuộc tính. Trong block này có thuộc tính text mang giá trị số là B. Bây giờ bạn muốn copy cái block này sang các vị trí mới mà mỗi lần copy như vậy thì cái thuộc tính text B trong block sẽ thay đổi giá trị tăng hay giảm dần theo cấp số cộng với công sai b.

 

Cách hiểu này của mình có đúng không? Bởi phải hiểu đúng thì mới làm lisp phù hợp với yêu cầu của bạn được. Bạn cho mình biết ý kiến nha.

Chúc bạn luôn vui vẻ.

 

PS: Bạn đừng giận vì mọi người hỏi lại vì việc viết lisp nếu không hiểu đúng ý người cần thì có khi viết ra mà không dùng được, rất mất công bạ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
Chào bạn dtlongkts,

Mình đã xem hình ảnh bạn gửi và cái file dwg gốc. Mình hiểu về yêu cầu của bạn như sau:

1/- Trên file bản vẽ đã có sẵn các text dạng A+ hay A- , trong đó A là một text số. Bây giờ bạn muốn dùng lệnh copy cái text mẫu này sang các vị trí khác mà mỗi lần copy thì A sẽ thay đổi tăng dần lên theo cấp số cộng với công sai a cho trước. Ví dụ copy 10 lần thì giá trị cuối cùng của A sẽ là A10 = A + a*10, còn ký tự + hay - không thay đổi.

2/- Trên bản vẽ đã có sẵn block thuộc tính. Trong block này có thuộc tính text mang giá trị số là B. Bây giờ bạn muốn copy cái block này sang các vị trí mới mà mỗi lần copy như vậy thì cái thuộc tính text B trong block sẽ thay đổi giá trị tăng hay giảm dần theo cấp số cộng với công sai b.

 

Cách hiểu này của mình có đúng không? Bởi phải hiểu đúng thì mới làm lisp phù hợp với yêu cầu của bạn được. Bạn cho mình biết ý kiến nha.

Chúc bạn luôn vui vẻ.

 

PS: Bạn đừng giận vì mọi người hỏi lại vì việc viết lisp nếu không hiểu đúng ý người cần thì có khi viết ra mà không dùng được, rất mất công bạn ạ.

 

Đúng rồi đấy bạn. Công sai a là một số tự nhiên

Bạn cũng luôn vui nha

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
Chào bạn Thái. Ý mình muốn:

 

Thứ nhất là copy các số dạng:1+, 1- ... (Các số này do mình đánh lệnh: leader --> setting/tolerance) thành 2+, 2-....

Thứ hai là copy 1 số được tạo ra do đánh lệnh att attdef sau đó kết hợp với các hình bất kỳ để thành 1 block. Mình copy block đó thì tự động nhẩy sang 1 block khác với cấp số cộng n=1 hoặc n=-1

Xin lỗi bác nhé. tôi không có mù để bác fải tương cái yêu cầu to tổ chảng lên thế kia.

Bác nóng giận, bác tự ái vì lời góp ý của tôi ư? bác thử nhìn lại xem bác mất bao nhiêu bài post để người ta có thể hiểu được yêu cầu của bác trong khi người khác thì chỉ cần một hoặc 2 lần. Bác có biết tìm kiếm bài trong topic dài nhu topic này là một điều rất vất vả với mọi người không? trong khi chỉ với một yêu cầu bác đã xả một đống rác ra topic này.

Tôi nghĩ chắc bác hơn tuổi tôi đấy, vậy thì hãy cư xử cho xứng với tuổi của mình, đừng để những người trẻ tuổi như tôi coi thường.

  • Vote tăng 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
Đúng rồi đấy bạn. Công sai a là một số tự nhiên

Bạn cũng luôn vui nha

Chào bạn dtlongkts,

Bạn hãy thử đoạn lisp mình viết này xem nhé.

http://www.mediafire.com/file/zlt0nhdwyjw/1.lsp

(do trang upload của diễn đàn trục trặc nên mình up tạm trên Media files, bạn chịu khó down về nhé.)

Do trên bản vẽ DWG bạn gửi mình thấy các text của bạn thuộc nhiều loại đối tựơng khác nhau, cái thì là TEXT cái thì là ATTDEF, có cái lại là TOLERANCE nên mình viết thử một đoạn lisp chủ yếu để kiểm tra cái thuật toán mình định xài thôi. Đoạn lisp này chỉ thực hiện đúng với các text thuộc loại đối tượng ATTDEF thôi bạn nhé vì các loại đối tượng khác nhau sẽ có bảng mã DXF khác nhau mà.

Nếu bạn thấy nó xài được thì có thể thừa thắng xông lên làm tiếp cho các text thuộc loại đối tượng khác bạn nhé.

Với yêu cầu thứ hai của bạn, do mình không kiếm thấy cái block thuộc tính sẵn có nào trên bản vẽ bạn gửi mà mình không biết tạo block thế nào cho đúng ý bạn, bạn hãy thiết lập thử một block mẫu rồi gửi lên, nhớ gửi bằng Cad2004 nhé. Khi đó mình sẽ nghiên cứu giúp bạn.

Chúc bạn vui.

PS: Bạn nên rút kinh nghiệm những điều mọi người góp ý để cho diễn đàn của chúng ta ngày một thân thiện và có ích hơn với cộng đồng.

  • Vote tăng 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
Nhờ các Bác viết dùm Autolisp của bài tôi viết ở trang 18 của topic này về "Mặt cong cắt Solid". Cảm ơn rất nhiều.

Xin lỗi bác tuannguyen314169,

Quả thật cái yêu cầu của bạn là khá hóc đối với mình. Việc xác định cái mặt cong của bác cũng đã là một vấn đề khá hóc rồi, sau đó lại phải xoay cái mặt đó rồi tìm giao diện của nó với thân tàu, tứ đó mới xác định được các thông số mà bác nêu. Không biết các bác khác có giải pháp gì hay hơn không chứ với mình thì bó giò rồi bác ạ. Mong bác thông cảm cho cái sự dốt của mình.

Chúc bác thành công.

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
Xin lỗi bác tuannguyen314169,

Quả thật cái yêu cầu của bạn là khá hóc đối với mình. Việc xác định cái mặt cong của bác cũng đã là một vấn đề khá hóc rồi, sau đó lại phải xoay cái mặt đó rồi tìm giao diện của nó với thân tàu, tứ đó mới xác định được các thông số mà bác nêu. Không biết các bác khác có giải pháp gì hay hơn không chứ với mình thì bó giò rồi bác ạ. Mong bác thông cảm cho cái sự dốt của mình.

Chúc bác thành công.

Cảm ơn bác đã quan tâm, mặt cong mình sử dụng đường line và spline với các toạ độ cho trước, sau đó sử dụng lệnh sweep để tạo mặt cong. Đây là việc mình thường xuyên gặp phải mà phải làm thủ công rất vất vả. Nên mình mới post lên nhờ các bác giúp đỡ. Mình đã post rất nhiều nhưng chưa ai có ý kiến gì?. Thực ra bác hơn mình về khoản lisp rất nhiều, còn mình thì chẳng biết gì, mình đang cố gắng đây. Mình cảm ơn bác rất nhiều.

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

Các bạn cho hỏi, có cách nào chèn dãy block động (bằng lệnh me, div..) và các giá trị của block đó được nhập từ 1 file định dạng như kiểu text (txt, csv...). Ai biết chỉ dùm với, thanks nhiều!!!

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
Chào bạn PhamThanhBinh đây là mẫu block mà mình tạo ra: http://www.cadviet.com/upfiles/2/block.dwg

Rất mong bạn sẽ giúp được mình

Chào bạn dtlongkts,

Cái bản vẽ bạn gửi có hai đối tượng chứa text, một là đối tượng loại TOLERANCE, hai là đối tượng block INSERT.

1/- Với đối tượng là loại TOLERANCE bạn chỉ cần thay đổi các hàm lấy giá trị text trong lisp trước mình gửi bạn là : tgoc (cdr(assoc 2 dtlist)) bằng hàm: tgoc (cdr(assoc 1 dtlist)) và hàm: dlist (subst (cons 2 tcd) (assoc 2 dlist) dlist) bằng hàm: dlist (subst (cons 1 tcd) (assoc 1 dlist) dlist) là ok bạn ạ.

2/- Với đối tượng là block, bạn hãy xem mã DXF của nó nhé:

((-1 . ) (0 . "INSERT") (330 . )

(5 . "50") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "IDEA - Netmanh")

(100 . "AcDbBlockReference") (2 . "D1") (10 180.89 445.796 0.0) (41 . 1.0) (42

. 1.0) (43 . 1.0) (50 . 0.0) (70 . 0) (71 . 0) (44 . 0.0) (45 . 0.0) (210 0.0

0.0 1.0))

Như vậy cái block này đâu có thuộc tính kèm theo đâu, cụ thể là nó không có mã DXF là 66. Do vậy nó không phải là block chứa thuộc tính bạn ạ. Vì thế việc thay đổi các thuộc tính của nó mình không thể làm được.

Để có thể làm được điều này bạn phải tạo ra các thuộc tính của block mà trong đó có một thuộc tính là nội dung của cái text bạn muốn thay đổi bạn nhé.

Khi đó mới có thể sử dụng cái thuộc tính đó để làm lisp cho nó thay đổi giá trị khi bạn copy được.

Bạn hãy thiết lập lại cái block này đi nhé.

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

  • 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
Chào bạn dtlongkts,

Cái bản vẽ bạn gửi có hai đối tượng chứa text, một là đối tượng loại TOLERANCE, hai là đối tượng block INSERT.

1/- Với đối tượng là loại TOLERANCE bạn chỉ cần thay đổi các hàm lấy giá trị text trong lisp trước mình gửi bạn là : tgoc (cdr(assoc 2 dtlist)) bằng hàm: tgoc (cdr(assoc 1 dtlist)) và hàm: dlist (subst (cons 2 tcd) (assoc 2 dlist) dlist) bằng hàm: dlist (subst (cons 1 tcd) (assoc 1 dlist) dlist) là ok bạn ạ.

2/- Với đối tượng là block, bạn hãy xem mã DXF của nó nhé:

((-1 . ) (0 . "INSERT") (330 . )

(5 . "50") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "IDEA - Netmanh")

(100 . "AcDbBlockReference") (2 . "D1") (10 180.89 445.796 0.0) (41 . 1.0) (42

. 1.0) (43 . 1.0) (50 . 0.0) (70 . 0) (71 . 0) (44 . 0.0) (45 . 0.0) (210 0.0

0.0 1.0))

Như vậy cái block này đâu có thuộc tính kèm theo đâu, cụ thể là nó không có mã DXF là 66. Do vậy nó không phải là block chứa thuộc tính bạn ạ. Vì thế việc thay đổi các thuộc tính của nó mình không thể làm được.

Để có thể làm được điều này bạn phải tạo ra các thuộc tính của block mà trong đó có một thuộc tính là nội dung của cái text bạn muốn thay đổi bạn nhé.

Khi đó mới có thể sử dụng cái thuộc tính đó để làm lisp cho nó thay đổi giá trị khi bạn copy được.

Bạn hãy thiết lập lại cái block này đi nhé.

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

 

Chào bạn PhamThanhBinh mình còn mắc mỗi đối tượng loại TOLERANCE thôi. Mình đã thực hiện lệnh ctwi trong lisp sau khi đã chỉnh sửa theo ý bạn. Mình nhập giá trị tăng giảm là 1 thì các kết quả ra như như hình vẽ mình gửi dưới đây, mình muốn tăng giảm giá trị lên 1 đơn vị. Mình gửi cả bản cad và lisp. Lần trước mình gửi bài ko đọc kỹ mong các bạn thông cảm

http://www.cadviet.com/upfiles/2/1_4.rar

Cảm ơn bạn Bình nhiều 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

Các point mà bạn đề cập đến phải chăng là các đỉnh Vertex của PLINE

Bạn có thể xem ở đây : Bài viết số 31 đến bài viết số 39

Bạn ơi cái nay cung rat hay nhưng cung không phải la cai theo y mình. lít ban nói nó chỉ chia đường poline thanh những đoạn thẳng bàng nhau thôi hơn nữa mỗi làn thực hiện lệnh chỉ được 1 đường poline thôi. Cái mình cần là 1 list chia đường poline thành nhũng đoạn thẳng mà chiều dài của mỗi đoạn do mình cung cấp cơ và hơn nữa list phải thực hiện được nhiều đối tượng trong 1 lệnh cơ. Rất mong các anh các bạn giúp đỡ. Mình gặp vấn đè này phát ốm phải nằm viện mấy ngày rùi giờ mới đớ dó mong mọi người chỉ giùm mình mới.

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
Chào bạn PhamThanhBinh mình còn mắc mỗi đối tượng loại TOLERANCE thôi. Mình đã thực hiện lệnh ctwi trong lisp sau khi đã chỉnh sửa theo ý bạn. Mình nhập giá trị tăng giảm là 1 thì các kết quả ra như như hình vẽ mình gửi dưới đây, mình muốn tăng giảm giá trị lên 1 đơn vị. Mình gửi cả bản cad và lisp. Lần trước mình gửi bài ko đọc kỹ mong các bạn thông cảm

http://www.cadviet.com/upfiles/2/1_4.rar

Cảm ơn bạn Bình nhiều nhé

Chào bạn dlongkts,

Rất tiếc là lisp chạy không đúng ý bạn. Nhưng rất mong bạn hãy xem kỹ lại những điều mình thắc mắc ở đây nhé:

1/- trên bản vẽ bạn gửi mình lần trước, các mã DXF của đối tượng text loại TOLERANCE là như sau:

((-1 . ) (0 . "TOLERANCE") (330 .

name: 7ef7ec10>) (5 . "4C") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 .

"IDEA - Kyhieu") (100 . "AcDbFcf") (3 . "IDEA") (10 170.947 447.88 0.0) (1 .

"62+") (210 0.0 0.0 1.0) (11 1.0 0.0 0.0))

Trong khi đối tượng text loại TOLERANCE của bạn trong bản vẽ lần này lại là:

((-1 . ) (0 . "TOLERANCE") (330 .

7ef4fc10>) (5 . "48") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "IDEA

- Kyhieu") (48 . 0.02) (100 . "AcDbFcf") (3 . "IDEA") (10 584.771 441.03 0.0)

(1 . "%%v145-%%v%%v%%v%%v") (210 0.0 0.0 1.0) (11 1.0 0.0 0.0))

 

Hãy bỏ qua các thứ loằng ngoằng khác mà chỉ quan tâm tới cái mã DXF là 1 bạn sẽ thấy ở trường hợp trước nó là (1 . "62+") còn ở trường hợp sau nó là (1 . %%v145-%%v%%v%%v%%v")

Điều này có thể do bạn đã thiết lập các text này với các font chữ khác nhau trong quá trình vẽ mà lisp thì nó không phân biệt được sự khác nhau do người sử dụng tạo ra này. Do đó khi mình lấy đoạn text này ra bằng đoạn mã (setq tgoc (cdr(assoc 1 dtlist))) thì ở trường hợp 1 nó sẽ trả về giá trị "62+"

còn trường hợp 2 nó trả về giá trị là "%%v145-%%v%%v%%v%%v". Và đây chính là cái lỗi làm cho kết quả của bạn thành ra như vầy.

2/- Thực tế mình hay bạn đều có thể sửa lại đoạn lisp tiếp theo để nó cho ra kết quả đúng nhưng mình chưa hiểu rõ vì sao bạn lại phải sử dụng hai loại text của cùng một loại đối tượng TOLERANCE như vậy, và bạn có còn sử dụng các font text nào khác nữa cho loại đối tượng TOLERANCE này không??

Nếu có thì nên chăng bạn hãy quy nó về một loại font cho đơn giản việc tạo lisp chỉnh sửa, bằng không bạn hãy gửi tất cả các đối tượng đó lên để mình tìm cách sửa lisp một lần cho được.

Thực ra cái lisp mà bạn đã sửa đó nếu chạy với trường hợp mẫu như bạn gửi ban đầu là sẽ OK ngay, chả có gì sai đâu vì mình đã chạy thử rồi, tiếc là bạn đã thử nó với trường hợp 2 nên mới bị lỗi thôi. Để sửa cái lỗi này thì bạn phải sửa lại cái hàm (substr ......) và hàm (strcat .......) để cắt và tạo chuỗi mới từ chuỗi cũ mà thôi.

Vấn đề là nếu có nhiều loại font khác nhau thì cái mã DXF của chúng cũng sẽ khác nhau và bạn sẽ khó kiểm soát nên theo mình bạn nên quy nó về một kiểu font thôi và khi đó chỉ cần sửa lisp một lần là OK.

3/- Với trường hợp thứ hai bạn lưu ý như sau khi sửa lisp:

- các chuỗi "%%v" này có cố định hay không??? Hay là nó thay đổi tùy theo ý người dùng???

- Nếu thay đổi thì quy luật thay đổi thế nào????

Bạn trả lời được các câu hỏi này mình sẽ sửa lại code lisp cho trường hợp này để nó theo đúng ý bạn bạn nhé.

Chúc bạn vui.

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
Bạn có thể xem ở đây : Bài viết số 31 đến bài viết số 39

Bạn ơi cái nay cung rat hay nhưng cung không phải la cai theo y mình. lít ban nói nó chỉ chia đường poline thanh những đoạn thẳng bàng nhau thôi hơn nữa mỗi làn thực hiện lệnh chỉ được 1 đường poline thôi. Cái mình cần là 1 list chia đường poline thành nhũng đoạn thẳng mà chiều dài của mỗi đoạn do mình cung cấp cơ và hơn nữa list phải thực hiện được nhiều đối tượng trong 1 lệnh cơ. Rất mong các anh các bạn giúp đỡ. Mình gặp vấn đè này phát ốm phải nằm viện mấy ngày rùi giờ mới đớ dó mong mọi người chỉ giùm mình mới.

Chào bạn Mr.Cuong,

Bạn đã khỏi ốm chưa nhỉ?? Chúc bạn mau lành để bạn có thể diễn đạt rõ hơn cái ý bạn muốn bạn nhé. Từ đó mọi người mới dễ dàng giúp bạn được.

Bạn hãy nói rõ việc bạn muốn chia nhiều đường polyline là chia cùng một lúc hay là chia lần lượt từng đường một theo ý của bạn????

Việc chia các đường polyline này thành từng đoạn mà mỗi đoạn có độ dài theo ý người dùng ở đây là bạn muốn nói về độ dài tuyệt đối hay tương đối???

Và các đường polyline này được chia theo cùng một kiểu chia hay mỗi đường lại có một cách chia khác nhau hở bạn???

Việc bạn càng trình bày rõ ràng, cụ thể cái ý bạn muốn sẽ càng giúp bạn nhanh chóng có được sự giúp đỡ cần thiết bạn ạ. Đừng ngại trình bày cụ thể vì không phải ai cũng có đủ trí thông minh để có thể hiểu đúng ý bạn được. Hãy cứ coi như bạn đang trình bày yêu cầu của mình với một chú em tập sự nào đó bạn nhé.

Một lần nữa mong bạn sớm bình phục và hoàn thành tâm nguyện của bạn. Hề hề hề...

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
Chào bạn dlongkts,

Rất tiếc là lisp chạy không đúng ý bạn. Nhưng rất mong bạn hãy xem kỹ lại những điều mình thắc mắc ở đây nhé:

1/- trên bản vẽ bạn gửi mình lần trước, các mã DXF của đối tượng text loại TOLERANCE là như sau:

((-1 . ) (0 . "TOLERANCE") (330 .

name: 7ef7ec10>) (5 . "4C") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 .

"IDEA - Kyhieu") (100 . "AcDbFcf") (3 . "IDEA") (10 170.947 447.88 0.0) (1 .

"62+") (210 0.0 0.0 1.0) (11 1.0 0.0 0.0))

Trong khi đối tượng text loại TOLERANCE của bạn trong bản vẽ lần này lại là:

((-1 . ) (0 . "TOLERANCE") (330 .

7ef4fc10>) (5 . "48") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "IDEA

- Kyhieu") (48 . 0.02) (100 . "AcDbFcf") (3 . "IDEA") (10 584.771 441.03 0.0)

(1 . "%%v145-%%v%%v%%v%%v") (210 0.0 0.0 1.0) (11 1.0 0.0 0.0))

 

Hãy bỏ qua các thứ loằng ngoằng khác mà chỉ quan tâm tới cái mã DXF là 1 bạn sẽ thấy ở trường hợp trước nó là (1 . "62+") còn ở trường hợp sau nó là (1 . %%v145-%%v%%v%%v%%v")

Điều này có thể do bạn đã thiết lập các text này với các font chữ khác nhau trong quá trình vẽ mà lisp thì nó không phân biệt được sự khác nhau do người sử dụng tạo ra này. Do đó khi mình lấy đoạn text này ra bằng đoạn mã (setq tgoc (cdr(assoc 1 dtlist))) thì ở trường hợp 1 nó sẽ trả về giá trị "62+"

còn trường hợp 2 nó trả về giá trị là "%%v145-%%v%%v%%v%%v". Và đây chính là cái lỗi làm cho kết quả của bạn thành ra như vầy.

2/- Thực tế mình hay bạn đều có thể sửa lại đoạn lisp tiếp theo để nó cho ra kết quả đúng nhưng mình chưa hiểu rõ vì sao bạn lại phải sử dụng hai loại text của cùng một loại đối tượng TOLERANCE như vậy, và bạn có còn sử dụng các font text nào khác nữa cho loại đối tượng TOLERANCE này không??

Nếu có thì nên chăng bạn hãy quy nó về một loại font cho đơn giản việc tạo lisp chỉnh sửa, bằng không bạn hãy gửi tất cả các đối tượng đó lên để mình tìm cách sửa lisp một lần cho được.

Thực ra cái lisp mà bạn đã sửa đó nếu chạy với trường hợp mẫu như bạn gửi ban đầu là sẽ OK ngay, chả có gì sai đâu vì mình đã chạy thử rồi, tiếc là bạn đã thử nó với trường hợp 2 nên mới bị lỗi thôi. Để sửa cái lỗi này thì bạn phải sửa lại cái hàm (substr ......) và hàm (strcat .......) để cắt và tạo chuỗi mới từ chuỗi cũ mà thôi.

Vấn đề là nếu có nhiều loại font khác nhau thì cái mã DXF của chúng cũng sẽ khác nhau và bạn sẽ khó kiểm soát nên theo mình bạn nên quy nó về một kiểu font thôi và khi đó chỉ cần sửa lisp một lần là OK.

3/- Với trường hợp thứ hai bạn lưu ý như sau khi sửa lisp:

- các chuỗi "%%v" này có cố định hay không??? Hay là nó thay đổi tùy theo ý người dùng???

- Nếu thay đổi thì quy luật thay đổi thế nào????

Bạn trả lời được các câu hỏi này mình sẽ sửa lại code lisp cho trường hợp này để nó theo đúng ý bạn bạn nhé.

Chúc bạn vui.

 

Chào bạn phamthanhbinh,

Đối tượng mình tạo ra do đánh lệnh qleader gõ enter

ở dòng Specify first leader point, or [settings] mình gõ enter sẽ hiện ra hộp thoại Leader Settings vào mục Annotation \ chọn Tolerance ở annotation reuse chọn None. Sau đó tại dòng nhắc first point mình chọn điểm đầu, dòng second point mình chọn điểm thứ 2 thì hiện ra hộp thoại Geometric Tolerance. Mình kích vào một ô trống bất kỳ 1số tự nhiên kèm 1 ký tự sau nó. Mình muốn copy đối tượng này nhiên với công sai là 1 số tự nhiên

 

http://www.cadviet.com/upfiles/2/tolerance.dwg

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
Chào bạn phamthanhbinh,

Đối tượng mình tạo ra do đánh lệnh qleader gõ enter

ở dòng Specify first leader point, or [settings] mình gõ enter sẽ hiện ra hộp thoại Leader Settings vào mục Annotation \ chọn Tolerance ở annotation reuse chọn None. Sau đó tại dòng nhắc first point mình chọn điểm đầu, dòng second point mình chọn điểm thứ 2 thì hiện ra hộp thoại Geometric Tolerance. Mình kích vào một ô trống bất kỳ 1số tự nhiên kèm 1 ký tự sau nó. Mình muốn copy đối tượng này nhiên với công sai là 1 số tự nhiên

 

http://www.cadviet.com/upfiles/2/tolerance.dwg

Chào bạn dlongkts,

Nếu cái đối tượng text thuộc loại TOLERANCE được tạo ra đúng như cách bạn nói và thể hiện trong file bạn gửi này thì bạn hãy xem cái kết quả của chính cái lisp mà bạn đã sửa đây nè. Trong hình chữ nhật là kết quả khi mình chạy lisp với công sai a bắng 1, còn trong hình ngũ giác là chạy lisp với công sai a bằng 2. Thực tế bạn có thể chạy lisp với công sai a là một số âm để có kết quả giảm dần. Bạn hãy thử xem nhé.

http://www.cadviet.com/upfiles/2/tolerance_1.dwg

tlr.jpg

Như vậy đã đúng ý bạn chưa 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
Chào bạn dlongkts,

Nếu cái đối tượng text thuộc loại TOLERANCE được tạo ra đúng như cách bạn nói và thể hiện trong file bạn gửi này thì bạn hãy xem cái kết quả của chính cái lisp mà bạn đã sửa đây nè. Trong hình chữ nhật là kết quả khi mình chạy lisp với công sai a bắng 1, còn trong hình ngũ giác là chạy lisp với công sai a bằng 2. Thực tế bạn có thể chạy lisp với công sai a là một số âm để có kết quả giảm dần. Bạn hãy thử xem nhé.

http://www.cadviet.com/upfiles/2/tolerance_1.dwg

tlr.jpg

Như vậy đã đúng ý bạn chưa nhỉ???

 

Cảm ơn bạn thật nhiều nhé. Mình đã làm được rồi

Ah cho mình hỏi bạn làm nghề gì vậy?

Chúc bạn luôn hạnh phúc

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

NHờ các Bác Viết dùm hộ em cái Lisp này với.

Mục đích là nội suy đường tự nhiên trong mặt cắt trung gian khi đã biết 2 Mcắt lân cận.

Nội dung đã trình bày kỹ trong file Cad em đính kèm. Cảm ơn các bác trước. (Cái dzụ nầy em rất cần vì đang thiết kế mày cái tường chắn nên phải nội suy tìm vị trí bắt đầu và kết thúc rất lâu mà phải xê dịch nhiều lần mới tìm ra mặt cắt trung gian tương đối hợp lý).

File đính kèm: http://www.cadviet.com/upfiles/2/hoicadviet.dwg

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
NHờ các Bác Viết dùm hộ em cái Lisp này với.

Mục đích là nội suy đường tự nhiên trong mặt cắt trung gian khi đã biết 2 Mcắt lân cận.

Nội dung đã trình bày kỹ trong file Cad em đính kèm. Cảm ơn các bác trước. (Cái dzụ nầy em rất cần vì đang thiết kế mày cái tường chắn nên phải nội suy tìm vị trí bắt đầu và kết thúc rất lâu mà phải xê dịch nhiều lần mới tìm ra mặt cắt trung gian tương đối hợp lý).

File đính kèm: http://www.cadviet.com/upfiles/2/hoicadviet.dwg

Trong bản vẽ của bạn trình bày 4 bước như sau :

B1: Ví dụ tại điểm gấp khúc này -> điểm A

B2: Copy sang mặt cắt 2 và cần NS

B3: Xác định giao điểm với đường tự nhiên bên MC2

B4: Nối 2 điểm A và B cắt với truc x-x ta có điểm cần nội suy thứ nhất C

 

Tue_NV chưa hiểu ý lắm. Ở bước 1 và bước 2 thì tương đối đã hiểu ý, riêng bước 3, bước 4 thì chưa hiểu ý. Bạn có thể nói rõ hơn dữ liệu đầu vào Input và dữ liệu đầu ra Output được không?

Rõ ràng nhất bạn nên minh hoạ bằng những con số cụ thể trong file .dwg của bạn

 

- Nối những điểm đó tìm được ta có đường cần nội suy. (Với giới hạn nội suy là phạm vi của MC nhỏ hơn. : câu này chưa hiểu lắm. Bạn vui lòng nói rõ hơn, càng cụ thể, chi tiết, tỉ mỉ càng tốt. OKay?

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

Chào tất cả mọi người,

Mình đang gặp một khó khăn này mong mọi người chỉ giúp.

Sau khi tạo ra một dạng block ATT đặc biệt thì mình muốn copy với một công sai là a. Nếu áp dụng lisp od_oc_oca.lsp thì không được, nếu áp dụng lisp dstt.lsp hoặc 1.lsp cũng không được. Dạ đây là block của mình:

http://www.cadviet.com/upfiles/2/trucdinhvi.dwg

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
Khách
Chủ đề này bây giờ đã bị đóng lại để trả lời thêm.

×