Đế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
2851 replies to this topic

#841 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 17 August 2011 - 09:48 PM

@bác ĐVH : cái thằng grread lằng nhằng lắm ^^

Nó lằng nhằng mới khổ! Khổ thâm niên vì thằng này rồi! Tóm lại, câu hỏi dễ hiểu hơn, dùng hàm GRREAD kiểu gì để nó, hoặc:
- Có thể lấy được điểm khi con chuột di chuyển trên screen?
- Có thể lấy được điểm khi bấm chọn chuột trái vào 1 điểm trên screen?
- Có thể lấy được string nhập từ bàn phím?
Hai bước đầu đã làm được. Thêm bước 3 thì đang bí.
Thân thương!
P/S (11h 18/8/2011): Đã tìm được cách rồi, tuy chưa mỹ mãn lắm.
  • 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.


#842 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 17 August 2011 - 10:06 PM

Nó lằng nhằng mới khổ! Khổ thâm niên vì thằng này rồi! Tóm lại, câu hỏi dễ hiểu hơn, dùng hàm GRREAD kiểu gì để nó, hoặc:
- Có thể lấy được điểm khi con chuột di chuyển trên screen?
- Có thể lấy được điểm khi bấm chọn chuột trái vào 1 điểm trên screen?
- Có thể lấy được string nhập từ bàn phím?
Hai bước đầu đã làm được. Thêm bước 3 thì đang bí.
Thân thương!

Bác thử ngó qua cái lisp này e viết xem có vận dụng được không ? Keypress bắt đầu khi g1 = 2, g2 Integer. E nghiên cứu thằng này hơi ít ^^
My link
  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#843 hochoaivandot

hochoaivandot

    biết dimradius

  • Members
  • PipPipPipPipPip
  • 310 Bài viết
Điểm đánh giá: 107 (tàm tạm)

Đã gửi 19 August 2011 - 01:58 PM

Bác thử ngó qua cái lisp này e viết xem có vận dụng được không ? Keypress bắt đầu khi g1 = 2, g2 Integer. E nghiên cứu thằng này hơi ít ^^
My link


Em xin hỏi làm sao để làm được như lệnh -Hatch

Command: -hatch
Current hatch pattern: ANSI31
Specify internal point or [Properties/Select objects/draW boundary/remove Boundaries/Advanced/DRaw order/Origin]
Tức là nếu mình Pick điểm hoặc bấm keyword để nhập dữ liệu theo cách khác (như select object)
  • 0

Dương Bá Diệp

 

www.cadonline.duyxuyen.vn 

 

Thành viên nhóm CADMAGIC

 


#844 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 19 August 2011 - 02:09 PM

Bạn dùng Iniget. Ví dụ :

(initget 128)
(setq pt (getpoint "\nPick diem hoac nhap key : "))


  • 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


#845 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 19 August 2011 - 03:24 PM

Em xin hỏi làm sao để làm được như lệnh -Hatch


Command: -hatch
Current hatch pattern: ANSI31
Specify internal point or [Properties/Select objects/draW boundary/remove Boundaries/Advanced/DRaw order/Origin]
Tức là nếu mình Pick điểm hoặc bấm keyword để nhập dữ liệu theo cách khác (như select object)

Bạn xem thêm 1 ví dụ ở đây nữa:
Bài viết số 3
  • 1

#846 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 19 August 2011 - 06:11 PM

Bạn xem thêm 1 ví dụ ở đây nữa:
Bài viết số 3

Trong topic đó bác HocHoai cũng tham gia nói chuyện mà ^^ Có lẽ lúc đó bác ý chưa để tâm :)
  • 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


#847 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 27 August 2011 - 09:23 AM

Khi nhập từ command là "Pan" thì screen xuất hiện "bàn tay năm ngón em vẫn kiêu sa" để cho ta di chuyển màn hình.
Nhưng khi dùng (command "pan") thì nó bắt nhập 2 điểm, mà không xuất hiện "tay ngọc tay ngà" nữa.
Vậy, bạn nào biết xin chỉ giùm: cách dùng hàm (command) để có "bàn tay"?
  • 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.


#848 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 27 August 2011 - 09:35 AM

Khi nhập từ command là "Pan" thì screen xuất hiện "bàn tay năm ngón em vẫn kiêu sa" để cho ta di chuyển màn hình.
Nhưng khi dùng (command "pan") thì nó bắt nhập 2 điểm, mà không xuất hiện "tay ngọc tay ngà" nữa.
Vậy, bạn nào biết xin chỉ giùm: cách dùng hàm (command) để có "bàn tay"?

Như vầy bác ạ :
(vla-sendcommand (vla-get-activedocument(vlax-get-acad-object)) "'_pan\r")
  • 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


#849 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 27 August 2011 - 10:09 AM

Như vầy bác ạ :
(vla-sendcommand (vla-get-activedocument(vlax-get-acad-object)) "'_pan\r")

Chà, nhanh như điện! Nhưng lại thêm một câu hỏi nữa:
Tôi đang sử dụng các thứ này trong hàm grread. Câu lệnh của Ket nếu paste vào command thì ok, nhưng khi nó nằm trong grread thì nó lại "câm" luôn. Tôi gởi lên đây 4 đoạn để dễ thấy nhé:

...
((equal '(11 1339) GRVAL) (vla-sendcommand (vla-get-activedocument (vlax-get-acad-object)) "'_pan\r")) ;NO
((equal '(11 1340) GRVAL) (command "_.zoom" "")) ;OK
((equal '(11 1417) GRVAL) (command "_.zoom" "w" pause pause)) ;OK
((equal '(11 1342) GRVAL) (command "_.zoom" "p")) ;OK
...

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


#850 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 27 August 2011 - 10:21 AM

Ồ, câu nào biết thì trả lời nhanh thôi ^^ Ví dụ như câu này thì trả lời ngay được : Em không biết :|
Có lẽ đã dùg grread thì phải theo luật chơi của nó thôi ^^
  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#851 hochoaivandot

hochoaivandot

    biết dimradius

  • Members
  • PipPipPipPipPip
  • 310 Bài viết
Điểm đánh giá: 107 (tàm tạm)

Đã gửi 31 August 2011 - 10:57 AM

hochoaivandot xin hỏi về cách lấy units của 1 bản vẽ đang đóng.
Em đang ở bản vẽ hiện hành.
Em có đường dẫn 1 bản vẽ "C:Drawing1"
Bản vẽ này đang đóng (tức là không đang open)
Mọi người chỉ giúp 1 đoạn lisp lấy units của bản vẽ này.
Nếu làm thủ công thì phải mở bản vẽ lên, lấy biến INSINITS.
Copy rồi qua bản vẽ hiện thời Paste vào. Sau cùng phải đóng bản vẽ kia lại.

Cái này em giải quyết vấn đề Insert block từ đường dẫn (C:Drawing1) nhưng units trong (C:Drawing1) và units trong bản vẽ hiện hành không giống nhau thì tỷ lệ Insert không như ý được

Mong mọi người cho hướng giải quyết!

  • 0

Dương Bá Diệp

 

www.cadonline.duyxuyen.vn 

 

Thành viên nhóm CADMAGIC

 


#852 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 31 August 2011 - 11:12 AM

E tưởng bác đã biết bản vẽ bác tạo Block có cái sysvar kia bằng bao nhiêu rồi chứ ^^ Không thì bật 1 lần lên là bít rùi mà. Rồi lưu vào registry, env, file, userr, thậm chí gán luôn vào Xdata của Block .... Những lần sau ta đọc lại thôi ^^
Nếu không thì đành dùng DBx
  • 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


#853 hochoaivandot

hochoaivandot

    biết dimradius

  • Members
  • PipPipPipPipPip
  • 310 Bài viết
Điểm đánh giá: 107 (tàm tạm)

Đã gửi 31 August 2011 - 03:07 PM

E tưởng bác đã biết bản vẽ bác tạo Block có cái sysvar kia bằng bao nhiêu rồi chứ ^^ Không thì bật 1 lần lên là bít rùi mà. Rồi lưu vào registry, env, file, userr, thậm chí gán luôn vào Xdata của Block .... Những lần sau ta đọc lại thôi ^^
Nếu không thì đành dùng DBx

ketxu có thể nói rõ hơn về cái gán luôn vào Xdata của Block không?
Mình mới nghe lần đầu thấy tò mò quá.
  • 0

Dương Bá Diệp

 

www.cadonline.duyxuyen.vn 

 

Thành viên nhóm CADMAGIC

 


#854 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 31 August 2011 - 03:12 PM

Cái gán Xdata e chưa test, vì chưa rõ phương thức WBlock thì còn lưu trữ Xdata được không ^^
  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#855 Detailing

Detailing

    biết lệnh imageclip

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

Đã gửi 31 August 2011 - 03:30 PM

Cái gán Xdata e chưa test, vì chưa rõ phương thức WBlock thì còn lưu trữ Xdata được không ^^


cần phân biệt Block Table của 1 Block (lưu trong data bản vẽ)Instance của Block Table (hiện trên bản vẽ).
có thể gán XData cho instance của Block Table nhưng ko thể gán Xdata cho Block Table dc.
Khi insert Block từ bản vẽ này sang bản vẽ khác thực chất là copy Block Table.
Có sai sót gì mọi ng góp ý thêm nha. Thân!

@Hochoai: nếu insert Block do mình tạo ra thì mình đã biết unit rồi, nếu insert từ Block bất kì thì cứ insert vào rồi kiểm tra unit -> scale vậy
  • 0

Ideas don't matter, execution does!

1908412_308002392716743_8165279281236341


#856 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 31 August 2011 - 03:40 PM

cần phân biệt Block Table của 1 Block (lưu trong data bản vẽ)Instance của Block Table (hiện trên bản vẽ).

Khi insert Block từ bản vẽ này sang bản vẽ khác thực chất là copy Block Table.
Có sai sót gì mọi ng góp ý thêm nha. Thân!

Đoạn này chuẩn. Cũng chính là sự khác nhau giữa Insert và Block. Tuy nhiên đoạn có hay không gán được Xdata cho 1 item trong Block Collection thì chưa có test nên không dám nói ^^
  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#857 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 31 August 2011 - 09:52 PM

E tưởng bác đã biết bản vẽ bác tạo Block có cái sysvar kia bằng bao nhiêu rồi chứ ^^ Không thì bật 1 lần lên là bít rùi mà. Rồi lưu vào registry, env, file, userr, thậm chí gán luôn vào Xdata của Block .... Những lần sau ta đọc lại thôi ^^
Nếu không thì đành dùng DBx

Xin lỗi mọi người em xin rút lại dòng dùng DBx (không thể / chưa thể lấy sysvar qua cách này) và gán Xdata (chưa test) ^^
Cách khả dĩ nhất vẫn là tìm chỗ lưu giá trị đó ngay lúc đầu ^^
  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#858 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 01 September 2011 - 07:46 AM

Xin lỗi mọi người em xin rút lại dòng dùng DBx (không thể / chưa thể lấy sysvar qua cách này) và gán Xdata (chưa test) ^^
Cách khả dĩ nhất vẫn là tìm chỗ lưu giá trị đó ngay lúc đầu ^^

Chính xác là không thể lấy sysvar bằng cách dùng dbx Ketxu à.
  • 1

#859 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 01 September 2011 - 08:21 AM

Chính xác là không thể lấy sysvar bằng cách dùng dbx Ketxu à.

Dump Object DBx :

; IAxDbDocument: IAxDbDocument Interface
; Property values:
; Application (RO) = Exception occurred
; Blocks (RO) = #<VLA-OBJECT IAcadBlocks 108fd374>
; Database (RO) = #<VLA-OBJECT IAcadDatabase 10e71234>
; Dictionaries (RO) = #<VLA-OBJECT IAcadDictionaries 108fd054>
; DimStyles (RO) = #<VLA-OBJECT IAcadDimStyles 108fd324>
; ElevationModelSpace = 0.0
; ElevationPaperSpace = 0.0
; FileDependencies (RO) = #<VLA-OBJECT IAcadFileDependencies 0952a274>
; Groups (RO) = #<VLA-OBJECT IAcadGroups 108fd2d4>
; Layers (RO) = #<VLA-OBJECT IAcadLayers 108fd3c4>
; Layouts (RO) = #<VLA-OBJECT IAcadLayouts 108fd464>
; Limits = (0.0 0.0 1.2e+006 900000.0)
; Linetypes (RO) = #<VLA-OBJECT IAcadLineTypes 108fd144>
; Materials (RO) = #<VLA-OBJECT IAcadMaterials 108fd414>
; ModelSpace (RO) = #<VLA-OBJECT IAcadModelSpace2 108fd4b4>
; Name = "D:\\Test.dwg"
; PaperSpace (RO) = #<VLA-OBJECT IAcadPaperSpace2 108fdaa4>
; PlotConfigurations (RO) = #<VLA-OBJECT IAcadPlotConfigurations 108fdaf4>
; Preferences (RO) = #<VLA-OBJECT IAcadDatabasePreferences 0952c40c>
; RegisteredApplications (RO) = #<VLA-OBJECT IAcadRegisteredApplications
108fdb44>
; SectionManager (RO) = Exception occurred
; SummaryInfo (RO) = #<VLA-OBJECT IAcadSummaryInfo 0952a6d4>
; TextStyles (RO) = #<VLA-OBJECT IAcadTextStyles 108fdcd4>
; UserCoordinateSystems (RO) = #<VLA-OBJECT IAcadUCSs 108fdc84>
; Viewports (RO) = #<VLA-OBJECT IAcadViewports 108fdc34>
; Views (RO) = #<VLA-OBJECT IAcadViews 108fdbe4>
; Methods supported:
; CopyObjects (3)
; DxfIn (2)
; DxfOut (3)
; HandleToObject (1)
; ObjectIdToObject (1)
; Open (2)
; Save ()
; SaveAs (2)

Lấy được dwgname + dwgprefix :lol: (gian chưa ^_^ )
  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#860 Detailing

Detailing

    biết lệnh imageclip

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

Đã gửi 01 September 2011 - 08:30 AM

Xin lỗi mọi người em xin rút lại dòng dùng DBx (không thể / chưa thể lấy sysvar qua cách này) và gán Xdata (chưa test) ^^
Cách khả dĩ nhất vẫn là tìm chỗ lưu giá trị đó ngay lúc đầu ^^


Chính xác là không thể lấy sysvar bằng cách dùng dbx Ketxu à.


2 bạn có thể nói sơ qua cách dùng DBx là như thế nào ko? DBx là gì và dùng để làm những gì?

Theo mình biết thì DBx là custom entity được viết bằng C++ và đi kèm với nó là 1 hàm arx để tạo ra entity đó.
Nếu bản vẽ có ObjectDBX mà file .dbx ko được load thì nó sẽ được biểu diễn thành ACAD_PROXY_ENTITY
Có gì chưa đúng mong dc bổ sung thêm. Thanks!
  • 0

Ideas don't matter, execution does!

1908412_308002392716743_8165279281236341