Đến nội dung


Hình ảnh
* * * - - 17 Bình chọn

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


  • Please log in to reply
2854 replies to this topic

#941 TRUNGNGAMY

TRUNGNGAMY

    biết lệnh block

  • Members
  • PipPipPipPipPipPip
  • 401 Bài viết
Điểm đánh giá: 91 (tàm tạm)

Đã gửi 25 October 2011 - 03:14 PM

Hề hề hề,
Bác trungngamy ơi, thế nhưng liệu khi bác tạo một cái hình trụ xoán khác quanh SP2 với bán kính mà bác vừa tìm được thì nó có tiếp xúc hay cắt cái thằng SP1 không nhể????
Ấy mới là cái khoản khó chịu bác ạ....
Hề hề hề,....

Mình nghĩ làm ngược lại cũng đúng nhưng mình kg đủ kiến thức và thời gian để chứng minh cho bạn thấy.
Hay bạn có thể giúp chứng minh hay ví dụ cụ thể làm ngược lại nó kg tiếp xúc hay kg cắt nhau.

Nhân vđ này mình nghĩ đó là những bài toán rất hay trong mặt phẳng cũng như trong kg gian. Kg hiểu TH của bạn này có gặp nhiều đối tượng hay kg. Nếu gặp nhiều đối tượng như vậy trong dữ liệu thì bài toán khá phức tạp.

Theo mình nghĩ, để giải quyết TH có nhiều đối tượng thì phải có một giải thuật để loại trừ những phần trên đg cong có khoảng cách khá lớn trước. Chỉ xét một đoạn nhỏ trên đó chắc chắn có khoảng cách min thôi.
  • 1

#942 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 26 October 2011 - 10:35 PM

Có thể tìm được giao điểm của một mặt và 1 Spline phẳng nằm trong 3D không nhỉ?
Tôi đang gặp bài toán thực tế này mà chưa tìm ra hướng giải quyết. Các bô lão lisp nếu biết thì chỉ hướng đi giùm, còn nếu khẳng định được là "không thể được" thì cũng xin cho ý kiến để tôi tìm hướng đi khác.
Thanks!
  • 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.


#943 TRUNGNGAMY

TRUNGNGAMY

    biết lệnh block

  • Members
  • PipPipPipPipPipPip
  • 401 Bài viết
Điểm đánh giá: 91 (tàm tạm)

Đã gửi 27 October 2011 - 07:37 AM

Có thể tìm được giao điểm của một mặt và 1 Spline phẳng nằm trong 3D không nhỉ?
Tôi đang gặp bài toán thực tế này mà chưa tìm ra hướng giải quyết. Các bô lão lisp nếu biết thì chỉ hướng đi giùm, còn nếu khẳng định được là "không thể được" thì cũng xin cho ý kiến để tôi tìm hướng đi khác.
Thanks!


Biển học rộng lớn, kiến thức có hạn. Câu hỏi của bạn hơi làm khó mọi người, kg biết có cao thủ nào có thể trả lời chắc "như đinh đóng cột" cho bạn kg.
Riêng mình có thể đóng góp cho bạn như vậy :
- Do kiến thức lisp của mình cũng có hạn, kiến thức hình học cũng đã quên hết rồi và lĩnh vực của mình cũng ít liên quan nên có nhiều vđ mình kg nắm chắc
+ Khái niệm spline phẳng của bạn kg hiểu có phải các điểm trên spline đồng phẳng kg. Nếu đúng vậy thì phải tìm giao 2 mp trước, mặt phẳng chứa spline và mp cần xét sẽ đc 1 đg thẳng, sau đó tìm giao của spline và đt đó. Lisp có tìm đc giao của 2 mặt phẳng kg và giao của spline và dt kg thì để các bạn khác trả lời giúp.
+ TH spline kg đồng phẳng, thì phải tìm cách xđ khoảng spline ngắn nhất khi cái spline chui qua mp, có nghĩa là đoạn ngắn nhất trên spline giao mp (lúc này xem như nó đồng phẳng). Sau đó làm tương tự như trên.
Đó là suy nghĩ của riêng mình, một người kém lisp và cả HH kg gian. Còn với các cao thủ khác, có thể sẽ có câu trả lời cụ thể và hữu dụng hơn.
Chúc bạn thành công.
  • 1

#944 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 27 October 2011 - 08:22 AM

Cám ơn bạn đã quan tâm! Thực ra đôi lúc có những bài toán thực tế nó liên quan tới những vấn đề rắc rối về hình học và về lisp, trường hợp của tôi cũng như thế. Nhắc lại 2 khái niệm để các bạn rõ:
Mặt: là mặt bất kỳ trong không gian chứ không hẳn là mặt phẳng, mà có thể là mặt cầu, mặt nón... Trong bài toán của tôi thì mặt được tạo thành do 1 hình đa giác có 1 đỉnh trượt trên 1 parabol, mà Parabol này nằm trong 3D.
Spline phẳng: là Spline đồng phẳng. Trong bài toán của tôi thì nó là 1 Parabol nằm trong 3D.
Bài toán của tôi có thể tóm tắt lại đơn giản hơn là: tìm giao của Parabol1 (nằm trong 3D) và mặt được tạo thành bởi 1 đa giác có 1 đỉnh trượt theo Parabol2.
Thân thương!
  • 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.


#945 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 27 October 2011 - 11:01 AM

Cám ơn bạn đã quan tâm! Thực ra đôi lúc có những bài toán thực tế nó liên quan tới những vấn đề rắc rối về hình học và về lisp, trường hợp của tôi cũng như thế. Nhắc lại 2 khái niệm để các bạn rõ:
Mặt: là mặt bất kỳ trong không gian chứ không hẳn là mặt phẳng, mà có thể là mặt cầu, mặt nón... Trong bài toán của tôi thì mặt được tạo thành do 1 hình đa giác có 1 đỉnh trượt trên 1 parabol, mà Parabol này nằm trong 3D.
Spline phẳng: là Spline đồng phẳng. Trong bài toán của tôi thì nó là 1 Parabol nằm trong 3D.
Bài toán của tôi có thể tóm tắt lại đơn giản hơn là: tìm giao của Parabol1 (nằm trong 3D) và mặt được tạo thành bởi 1 đa giác có 1 đỉnh trượt theo Parabol2.
Thân thương!

Hề hề hề,
Chào bác ĐoanVanHa,
bài toán của bác nghe ra có vẻ phức tạp nhưng theo mình bác có thể gỡ được nó tuy hơi vất vả.
Trước hết hãy giải bài toán đơn giản hơn là tìm giao điểm của parabol phẳng cho trước với các mặt của một đa diện cho trước (chứ không phải đa giác vì theo mình hiểu thì nói đa giác nghĩa là nói đến hình học phẳng) .
Như vậy thực chất bài toán sẽ trở về là tìm giao tuyến của hai mặt phẳng và tìm giao điểm của 1 đường thẳng và một parabol trong mặt phẳng.
Với bài toán tìm giao tuyến của hai mặt phẳng thì bằng phương pháp sử dụng hình học giải tich trong không gian bác sẽ dễ dàng có được giao tuyến của hai mặt phẳng khi bác có được phưoing trình của hai mặt phẳng này.
Từ phương trình của đường thẳng và phương trình của parabol bác sẽ có được kết quả cần tìm.
Sau đó với một phép lặp qua từng điểm trên parabol thứ hai bác sẽ lần lượt có các đa diện và ứng dụng bái toán trên bác sẽ giải được các kết quả mà bác cần.
Chúc bác thành công.

Nhân đây xin gửi bác một đoạn lisp dùng để xác định khoảng cách giữa hai điểm trên hai spline bất kỳ với định nghĩa rằng khoảng cách giữa hai điểm bất kỳ trên hai spline là khoảng cách giữa hai tiếp tuyến tại hai diểm đó của mỗi một spline.
Mình viết lisp này dựa trên ý tưởng của bác Ketxu khi tìm khoảng cách giữa một điểm trên spline1 với các điểm trên Spline2.
Nếu bài toán lần trước của bác giải theo hướng này thì có thể sử dụng lisp này. Còn nếu giải theo hướng chia spline thành các phân đoạn thẳng đủ nhỏ thì cần chỉnh sửa lại lisp này một chút là dùng được. Hy vọng nó sẽ giúp được cho bác để giải quyết trọn vẹn bài toán đã đặt ra.


(defun c:kcol (/ p1 p11 p2 p21 obj1 obj2 v1 v2 x1 y1 z1 x2 y2 z2 a1 a2 a3 b1 b2 b3 t1 t2 ps pe d lsp)
(vl-load-com)
(command "undo" "be")
(setq p1 (cadr (setq ent1 (entsel "\n Chon diem tren spline thu nhat")))
obj1 (vlax-ename->vla-object (car ent1))
v1 (vlax-curve-getfirstderiv obj1 (vlax-curve-getparamatpoint obj1 (setq p1 (vlax-curve-getclosestpointto obj1 p1))))
p2 (cadr (setq ent2 (entsel "\n Chon diem tren spline thu hai")))
obj2 (vlax-ename->vla-object (car ent2))
v2 (vlax-curve-getfirstderiv obj2 (vlax-curve-getparamatpoint obj2 (setq p2 (vlax-curve-getclosestpointto obj2 p2))))
x1 (car p1)
y1 (cadr p1)
z1 (caddr p1)
x2 (car p2)
y2 (cadr p2)
z2 (caddr p2)
a1 (car v1)
a2 (cadr v1)
a3 (caddr v1)
b1 (car v2)
b2 (cadr v2)
b3 (caddr v2)
t2 (/ (- (* (+ (* a1 b1) (* a2 b2) (* a3 b3)) (+ (* a1 (- x2 x1)) (* a2 (- y2 y1)) (* a3 (- z2 z1))))
(* (+ (* a1 a1) (* a2 a2) (* a3 a3)) (+ (* b1 (- x2 x1)) (* b2 (- y2 y1)) (* b3 (- z2 z1)))))
(- (* (+ (* a1 a1) (* a2 a2) (* a3 a3)) (+ (* b1 b1) (* b2 b2) (* b3 b3)))
(expt (+ (* a1 b1) (* a2 b2) (* a3 b3)) 2)))
t1 (/ (+ (* t2 (+ (* a1 b1) (* a2 b2) (* a3 b3))) (+ (* a1 (- x2 x1)) (* a2 (- y2 y1)) (* a3 (- z2 z1))))
(+ (expt a1 2) (expt a2 2) (expt a3 2)))
ps (list (+ x1 (* a1 t1)) (+ y1 (* a2 t1)) (+ z1 (* a3 t1)))
p11 (list (+ x1 (* a1 100)) (+ y1 (* a2 100)) (+ z1 (* a3 100)))
pe (list (+ x2 (* b1 t2)) (+ y2 (* b2 t2)) (+ z2 (* b3 t2)))
p21 (list (+ x2 (* b1 100)) (+ y2 (* b2 100)) (+ z2 (* b3 100)))
d (distance ps pe)
lsp (list d ps pe)
)
lsp
(command "line" p1 p11 "" )
(command "line" p2 p21 "" )
(command "line" ps pe "" )
(command "undo" "e")
(princ)
)
Chúc bác khỏe và vui.
  • 2
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#946 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 27 October 2011 - 03:50 PM

Thật hết sức cám ơn bác Hề hề hề!
1). Bác quá công phu với bài toán tìm 2 điểm thuộc 2 spline. Có điều, lisp này tính khoảng cách giữa 2 tiếp tuyến tại 2 điểm của 2 spline, còn tôi muốn tìm 2 điểm thuộc 2 spline sao cho khoảng cách 2 điểm này là nhỏ nhất. Và tôi đã tìm được theo hướng gần đúng với sai số tuỳ chọn (Bác có thể nghé qua mục đố vui mà tôi vừa post lên thì sẽ thấy có ý tưởng trong đó). Tất nhiên, sửa từ lisp của bác cũng đi đến đích vậy.
2). Bài toán tìm giao của Parabol và Mặt mà tôi đưa ra hơi khác với ý tưởng của bác. Nếu mặt là 1 đa diện thì cũng không quá khó, đằng này mặt ở đây là 1 mặt cong bác ạ. Mặt này do 1 đa giác có 1 đỉnh trượt trên 1 parabol tạo nên, tỉ như ta kéo 1 cái móc áo đang treo trên dây phơi dọc theo dây thì tạo ra mặt này vậy. Tôi cũng đang nghĩ đến hướng chia Parabol thành từng đoạn thẳng, lúc đó mặt này sẽ là các mặt phẳng ghép thành, nhưng chưa thích phương án này lắm.
Không biết bác có ý tưởng nào hay hơn để cùng nhau thảo luận?
Một lần nữa, cám ơn bác Hề hề hề!
Thân thương!
  • 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.


#947 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 27 October 2011 - 06:51 PM

Thật hết sức cám ơn bác Hề hề hề!
1). Bác quá công phu với bài toán tìm 2 điểm thuộc 2 spline. Có điều, lisp này tính khoảng cách giữa 2 tiếp tuyến tại 2 điểm của 2 spline, còn tôi muốn tìm 2 điểm thuộc 2 spline sao cho khoảng cách 2 điểm này là nhỏ nhất. Và tôi đã tìm được theo hướng gần đúng với sai số tuỳ chọn (Bác có thể nghé qua mục đố vui mà tôi vừa post lên thì sẽ thấy có ý tưởng trong đó). Tất nhiên, sửa từ lisp của bác cũng đi đến đích vậy.
2). Bài toán tìm giao của Parabol và Mặt mà tôi đưa ra hơi khác với ý tưởng của bác. Nếu mặt là 1 đa diện thì cũng không quá khó, đằng này mặt ở đây là 1 mặt cong bác ạ. Mặt này do 1 đa giác có 1 đỉnh trượt trên 1 parabol tạo nên, tỉ như ta kéo 1 cái móc áo đang treo trên dây phơi dọc theo dây thì tạo ra mặt này vậy. Tôi cũng đang nghĩ đến hướng chia Parabol thành từng đoạn thẳng, lúc đó mặt này sẽ là các mặt phẳng ghép thành, nhưng chưa thích phương án này lắm.
Không biết bác có ý tưởng nào hay hơn để cùng nhau thảo luận?
Một lần nữa, cám ơn bác Hề hề hề!
Thân thương!

Chào bác ĐoanvanHa,
1/ Chúc mừng bác đã hoàn thành được cái đề bài lần trước. Mình tin rằng bác có thể hoàn thành tốt cái bài toán lần này bác ạ.
2/- Vê bài toán mới này mình có vài suy nghĩ như sau:
Thứ nhất, theo như bác mô tả thì cái mặt mà bác cần được tạo thành từ việc Sweep một profile đa giác theo một part là parabol. Do vậy nếu có giao điểm của một parabol thứ hai (curve) khác với cái mặt này thì ắt hẳn cái giao điểm đó phải nằm trên một cạnh của đa giác profile khi đa giác này nằm ở vị trí sweep tương ứng.
Thứ hai: Do parabol thứ hai là phẳng nên bác hoàn toàn có khả năng xác định được phương trình của cái mặt phẳng này. Ứng với mỗi vị trí trên parabol đường dẫn của bề mặt đã cho, bác đêu có thể xác định được phương trình của mặt phẳng chứa đa giác profile của nó bởi vì bác có vecto tiếp tuyến của parabol đường dẫn sẽ chính là vectơ pháp tuyến của mặt phẳng chứa profile. (Ấy là nếu bác sweep vuông góc với đường dẫn, còn trong trường hợp bác sweep không vuông góc thì bác cũng phải xác định được góc sweep này mới có thể tạo hình bề mặt chứ bác nhể. và như thế thì việc xác định mặt phẳng chứ profile cũng chả khó lắm....)
Từ hai phương trình mặt phẳng này, bác dễ dàng tìm được phương trình của giao tuyến của chúng Và thế là tìm được giao điểm của giao tuyến này với Parabol thứ hai. Cuối cùng là bác phải check cái giao điểm này có nẳm trên cạnh đa giác profile hay không.mà thôi.
Thứ ba: Có thể sử dụng thuật toán của bác Ketxu để nhích dần cái điểm trên parabol đường dẫn theo một phía cho tới khi khoảng cách từ giao điểm tìm được tới cạnh của đa giác proflie đạt tới giá trị đủ nhỏ và đó chính là điểm cần tìm bác ạ.
Hề hề hề,
Nghĩ thì là như vậy nhưng các bước thực hiện nó có nhẽ cũng hơi nhiêu khê vì việc bác phải xác định lại các polyline tạo thành đa giác profile trong mỗi mặt phẳng chứa nó. Việc này có nhẽ phải dùng tới các hàm trans và hệ tọa độ người dùng mà mình thì chưa thạo về cái hàm này.

Vài điều thiển nghĩ, đúng sai mong bác không chấp.
Hề hề hề,'
Chúc bác luôn vui vẻ.
  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#948 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 27 October 2011 - 08:59 PM

Chà! Cách này có lẽ hay đây! Tôi đang tìm cách làm việc với mặt sweep, bác thì theo profile. Hoá ra có nhiều phương án quá. Tôi sẽ cố thử cả 2 để so sánh cái nào nhanh hơn sẽ chọn, chứ mấy bài toán này mà chọn sai số quá nhỏ thì ngồi uống trà mệt nghỉ bác nhỉ.
(Nhưng tôi sẽ không lấy control point, vì như thế thì khó chính xác, bởi 1 spline dài nhưng đôi lúc chỉ có 3 control point mà thôi).
Bác đã cho tôi cần câu mà không cho cá! Tôi cũng thích vậy. Nhưng khi vực sâu quá thì nhớ cho cá chứ đừng cho câu, bác nhé!
Cám ơn bác Hề hề hề thêm lần nữa!
Thân thương!
  • 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.


#949 anhcos

anhcos

    biết lệnh hatchedit

  • Advance Member
  • PipPipPipPip
  • 260 Bài viết
Điểm đánh giá: 170 (tàm tạm)

Đã gửi 27 October 2011 - 09:52 PM

Có thể tìm được giao điểm của một mặt và 1 Spline phẳng nằm trong 3D không nhỉ?
Tôi đang gặp bài toán thực tế này mà chưa tìm ra hướng giải quyết. Các bô lão lisp nếu biết thì chỉ hướng đi giùm, còn nếu khẳng định được là "không thể được" thì cũng xin cho ý kiến để tôi tìm hướng đi khác.
Thanks!


Đầu tiên tìm đường thẳng giao giữa 2 mặt phẳng, sau đó tìm giao giữa đường thẳng đó với SPline (cái này nhờ CAD tính)

Tôi đã xây dựng một thư viện dll về hình học trong không gian gần như đầy đủ với các đối tượng như điểm, đường thẳng, mặt phẳng, đường tròn là ellipse. Tuy nhiên thư viện chỉ hỗ trợ lập trình ngoài, lisp thì tôi không rõ.
  • 0
Clear sky!

MF Rock collection.

#950 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 27 October 2011 - 10:02 PM

Đầu tiên tìm đường thẳng giao giữa 2 mặt phẳng, sau đó tìm giao giữa đường thẳng đó với SPline (cái này nhờ CAD tính)
Tôi đã xây dựng một thư viện dll về hình học trong không gian gần như đầy đủ với các đối tượng như điểm, đường thẳng, mặt phẳng, đường tròn là ellipse. Tuy nhiên thư viện chỉ hỗ trợ lập trình ngoài, lisp thì tôi không rõ.

Cám ơn bạn đã quan tâm! Tiếc là tôi không có kiến thức về dll. Với lại, MẶT mà tôi muốn nói là mặt bất kỳ (phẳng, cầu, trụ...) chứ không chỉ là mặt phẳng.
Thân thương!
  • 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.


#951 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 11 November 2011 - 04:27 PM

Ai biết xin chỉ giùm: làm sao lấy được màu của màn hình acad (screen). Tìm mãi trong biến hệ thống mà không ra mới oải.
Thân thương!
  • 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.


#952 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 11 November 2011 - 04:45 PM

Ai biết xin chỉ giùm: làm sao lấy được màu của màn hình acad (screen). Tìm mãi trong biến hệ thống mà không ra mới oải.
Thân thương!

Nếu bác để ý thì ketxu đã làm 1 cái về cái này rồi
http://www.cadviet.c...showtopic=56029
Nó thuộc vlaObj (vla-get-display(vla-get-preferences (vlax-get-acad-object))), bác dump ra để biết thêm nhé :)
  • 2

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


#953 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 11 November 2011 - 04:53 PM

Nếu bác để ý thì ketxu đã làm 1 cái về cái này rồi
http://www.cadviet.c...showtopic=56029
Nó thuộc vlaObj (vla-get-display(vla-get-preferences (vlax-get-acad-object))), bác dump ra để biết thêm nhé :)


Thanks cái đã, mọi chuyện tối về ngâm cứu sau. Nếu Ket biết câu lệnh để lấy màu của screen và gán 1 màu cho screen liền liền thì chỉ giùm, bằng không thì tối dump ngâm cứu.
  • 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.


#954 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 11 November 2011 - 05:58 PM

Nếu bác để ý thì ketxu đã làm 1 cái về cái này rồi
http://www.cadviet.c...showtopic=56029
Nó thuộc vlaObj (vla-get-display(vla-get-preferences (vlax-get-acad-object))), bác dump ra để biết thêm nhé :)

Hề hề hề,
Bác Ketxu cho hỏi chút xíu về cái thằng 'GraphicsWinModelBackgrndColor nhé: Khi mình xài nó thì hình như nó lấy cái mã màu khác với mà trong CAD bác ạ. Tỷ như màu green trong Cad là 3 thì thằng 'GraphicsWinModelBackgrndColor lại trả về là 65280.
Vậy có cách chi để biết được các mã màu của nó tương ứng với mã màu của CAD hay khô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.

#955 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 11 November 2011 - 09:28 PM

@bác ĐVH : Nó không liền liền được đâu ạ. Vì khi lấy mã màu của thằng này nó đang ở dạng variant, type 19, lại không hỗ trợ vlax-variant-value nữa
@bác Bình : số 3 bác nhìn thấy là của hệ màu 256, tương đương với (0 255 0) của hệ màu RGB và 65280 của hệ Olecolor bác ạ.
Trường hợp này thì kết quả trả về dạng OLECOLOR :(
Từ con số này chuyển sang mã màu RGB thì dể coi hơn. Bác có thể bật bảng màu Autocad lên xem chỉ số tương ứng giữa 256 với RGB ^^
Trong link e đưa có 2 hàm chuyển đổi Ole <-> RGB từ con số này đó ạ.
  • 1

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


#956 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 12 November 2011 - 02:38 PM

@bác ĐVH : Nó không liền liền được đâu ạ. Vì khi lấy mã màu của thằng này nó đang ở dạng variant, type 19, lại không hỗ trợ vlax-variant-value nữa
@bác Bình : số 3 bác nhìn thấy là của hệ màu 256, tương đương với (0 255 0) của hệ màu RGB và 65280 của hệ Olecolor bác ạ.
Trường hợp này thì kết quả trả về dạng OLECOLOR :(
Từ con số này chuyển sang mã màu RGB thì dể coi hơn. Bác có thể bật bảng màu Autocad lên xem chỉ số tương ứng giữa 256 với RGB ^^
Trong link e đưa có 2 hàm chuyển đổi Ole <-> RGB từ con số này đó ạ.

Hề hề hề,
Cám ơn sự chỉ giáo của bác ketxu, tuy nhiên do trình độ có hạn nên vào đọc trong đường link bác gửi mà chả tìm thấy cái bảng chuyển đổi giữa các hệ màu này ra sao cả, Thôi thì đ2nh cứ hiểu vậy đã, Cứ xài cái bác biều thôi, còn hiểu được thì chắc phải mần mò thêm ít lâu nữa vậy.
Hề hề hề
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#957 gia_bach

gia_bach

    biết lệnh adcenter

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

Đã gửi 12 November 2011 - 03:25 PM

Ai biết xin chỉ giùm: làm sao lấy được màu của màn hình acad (screen). Tìm mãi trong biến hệ thống mà không ra mới oải.
Thân thương!

Ha tham khảo các Lisp của Jimmy Bergmark :
- Background changer
- Display Properties

Hề hề hề,
...
bảng chuyển đổi giữa các hệ màu
...

Bác tham khảo : Display Color Properties
  • 3

#958 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 16 November 2011 - 09:04 PM

Tôi có 1 tập hợp chọn ss1 (hoặc 1 list1 các ename, hoặc 1 list1 các vla-object). Tôi muốn copy chúng từ pt1 đến pt2, và sau khi copy tôi muốn lấy được các đối tượng được tạo thành là tập hợp chọn ss2 (hoặc 1 list2 các ename, hoặc 1 list2 các vla-object), điều kiện là không dùng hàm (command "copy"...). Ai biết xin chỉ giùm hàm hoặc phương pháp thực hiện, thanks!
P/S (11:09 PM): Thank Ketxu! Tự nhiên quên mất chức năng tìm kiếm, làm tốn đất CADViet.
  • 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.


#959 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 16 November 2011 - 10:17 PM

Phương thức lấy entlast trước khi thực hiện hàm, rồi sau khi thực hiện xong hàm thì làm vòng lặp duyệt entnext đến entity cuối cùng bác ạ. => thu về danh sách ename. Trên diễn đàn đã có mấy bài về vấn đề "chọn lại đối tượng vừa copy" + lisp trong đó r
  • 1

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


#960 Detailing

Detailing

    biết lệnh imageclip

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

Đã gửi 16 November 2011 - 10:26 PM

Tôi có 1 tập hợp chọn ss1 (hoặc 1 list1 các ename, hoặc 1 list1 các vla-object). Tôi muốn copy chúng từ pt1 đến pt2, và sau khi copy tôi muốn lấy được các đối tượng được tạo thành là tập hợp chọn ss2 (hoặc 1 list2 các ename, hoặc 1 list2 các vla-object), điều kiện là không dùng hàm (command "copy"...). Ai biết xin chỉ giùm hàm hoặc phương pháp thực hiện, thanks!

Bạn thử entmake tới đâu lưu tới đó
  • 0

Ideas don't matter, execution does!

1908412_308002392716743_8165279281236341