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

#2561 quocmanh04tt

quocmanh04tt

    biết lệnh imageclip

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

Đã gửi 27 June 2015 - 10:41 PM

Mình đang ở ngoài k có CAD để xem, n trong code của bạn chỗ nào chỉ định BlockObj ID ??

Uh, đúng vậy nhưng chưa biết nhét nó vào bằng cách nào. Nhờ bác trợ giúp. Em dùng vlax-put-property object ContentBlockName để nhét nhưng nókhông vào. :)


  • 0

#2562 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 28 June 2015 - 09:16 AM

ContentBlockName bạn lấy ở đâu vậy. Theo mình với những đối tượng lằng nhằng như thế này nên dùng thuần VL cho dễ đọc.

Nếu bạn dump 1 object mleaderstyle thì bạn sẽ thấy 2  property cần chỉnh là ContenType (= 1) và Block (= tên Block)

Thử lại lần nữa xem sao nào ^^


  • 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


#2563 quocmanh04tt

quocmanh04tt

    biết lệnh imageclip

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

Đã gửi 28 June 2015 - 01:58 PM

ContentBlockName bạn lấy ở đâu vậy. Theo mình với những đối tượng lằng nhằng như thế này nên dùng thuần VL cho dễ đọc.

Nếu bạn dump 1 object mleaderstyle thì bạn sẽ thấy 2  property cần chỉnh là ContenType (= 1) và Block (= tên Block)

Thử lại lần nữa xem sao nào ^^

Cám ơn bác chỉ dẫn! Em làm được rồi. Do cái ngớ ngẩn của em là không dump  object mleaderstyle, mà dump vào  object mleader mới tòi ra cái sản phẩm ContentBlockName.


  • 0

#2564 nhoclangbac

nhoclangbac

    biết vẽ circle

  • Members
  • PipPip
  • 38 Bài viết
Điểm đánh giá: 3 (bình thường)

Đã gửi 28 June 2015 - 02:44 PM

Cám ơn bác chỉ dẫn! Em làm được rồi. Do cái ngớ ngẩn của em là không dump  object mleaderstyle, mà dump vào  object mleader mới tòi ra cái sản phẩm ContentBlockName.

Nhoc thắc mắc object mleaderstyle ko biết là gì và tạo bằng lệnh gì  :wacko: , có thể cho Nhoc 1 file minh họa về nó?  Nhoc chỉ biết có object Multileader :(


  • 0

#2565 quocmanh04tt

quocmanh04tt

    biết lệnh imageclip

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

Đã gửi 28 June 2015 - 03:27 PM

Thế này nhoclangbac nhé:
Đây là hàm dump:
(defun LM:dump (obj)
(cond ((or (= 'ename (type obj)) (and (listp obj) (= 'ename (type (setq obj (cdr (assoc -1 obj)))))))
(vlax-dump-object (vlax-ename->vla-object obj) t))
((= 'vla-object (type obj)) (vlax-dump-object obj t)))
(princ))

Ví dụ dump cái object mleaderstyle:
(LM:dump (dictsearch (cdr (assoc -1 (dictsearch (namedobjdict) "ACAD_MLEADERSTYLE"))) "Mleaderstyle_Name"))
  • 0

#2566 nhoclangbac

nhoclangbac

    biết vẽ circle

  • Members
  • PipPip
  • 38 Bài viết
Điểm đánh giá: 3 (bình thường)

Đã gửi 28 June 2015 - 04:06 PM

Dump thì Nhoc bit rùi nhưng Nhoc đang tắc mắc là cái object mleaderstyle tạo ra bằng lệnh gì của Cad í :unsure: , và nó chỉ có ở Cad 2012 trở lên sao í :wacko: , anh quocmanh04tt có thể cho 1 file .dwg để Nhoc Test :)


  • 0

#2567 quocmanh04tt

quocmanh04tt

    biết lệnh imageclip

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

Đã gửi 28 June 2015 - 04:09 PM

Thì dùng đúng lệnh mleaderstyle, nó chính là 1 style của mleader. Chẳng phải ở trên có: "Mleaderstyle_Name" đó sao!


  • 1

#2568 nhoclangbac

nhoclangbac

    biết vẽ circle

  • Members
  • PipPip
  • 38 Bài viết
Điểm đánh giá: 3 (bình thường)

Đã gửi 28 June 2015 - 04:16 PM

Kakaka, thì ra là tạo một style của mleader trước khi tạo Multileader, Nhoc hỉu rùi :P


  • 0

#2569 Tr.CongSon

Tr.CongSon

    biết lệnh array

  • Members
  • PipPipPip
  • 183 Bài viết
Điểm đánh giá: 40 (tàm tạm)

Đã gửi 06 July 2015 - 10:49 AM

Chào các anh chị,

Em mới học Lisp,mong mọi người giúp đỡ nhiều ạ

Em có đoạn Code sau

(defun c:CM (/ *error* cla ent-last iferror k lay olderr os  r ve vec);;;; tao cloud mark;
(setvar "modemacro" "CREATE CLOUD_MARK")
;;; (setvar "CMDECHO" 0)
(command "undo" "BE")
(defun iferror (msg)
(if (= cla nil)
(setq cla "3"))
(if cla (setvar "CLAYER" cla))
(if os (setvar "OSMODE" os))
(setvar "CMDECHO" 1)
(setq *error* olderr)
(princ)
)
(setq lay (tblsearch "layer" "Cloud mark"))
(if (= lay nil)
(command "_layer" "_n" "Cloud mark" "_c" "6" "Cloud mark" ""))
(setq olderr *error*)
(setq *error* iferror)
(graphscr)
(setq os (getvar "OSMODE"))
(setvar "OSMODE" 0)
(setq cla (getvar "CLAYER"))
(setq r (* (getvar "DIMSCALE") 5))
(setq k T)
(while k
(terpri)
(if (= ve nil) (setq ve "Hinh chu nhat"))
(setq vec (strcat "\nVe hinh chu nhat hay duong line? <" ve ">: "))
(setq vec (getstring vec))
(if (= vec "")
(command "_.RECTANGLE")
(command "_.pline"))
(while (= 1 (getvar "cmdactive")) (command pause))
(setq ent-last (entlast))
(setvar "clayer" "Cloud mark")
(command "_.REVCLOUD" "_A" r r "_Object" ent-last "")
)
(setvar "CLAYER" cla)
(setq *error* olderr)
(setvar "OSMODE" os)
(command "undo" "End")
;;; (setvar "CMDECHO" 1)
(princ)
)
 

 

Chào các anh chị,

Lâu nay e dùng Lisp này khi tạo đám mây nó sẽ tự xóa đối tượng cũ đi ,Tự nhiên mấy hôm ni không biết nghịch dại,không biết sao nó ko tự Delete đối tượng cũ khi tạo đám mây đi ạ,

Mong anh chị giải đáp giúp để  em có thể học hỏi thêm  !

P/s:Nếu dùng Lisp  để xóa thì em làm được,như ng em nghĩ do thay đổi biến hệ thống nào đó liên quan đến Lệnh REVCLOUD nên nó mới thay đổi thế ạ,

File đây ạ : http://www.cadviet.c...2_cloudmark.dwg


  • 0

#2570 gia_bach

gia_bach

    biết lệnh adcenter

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

Đã gửi 06 July 2015 - 12:42 PM

Chào các anh chị,

Lâu nay e dùng Lisp này khi tạo đám mây nó sẽ tự xóa đối tượng cũ đi ,Tự nhiên mấy hôm ni không biết nghịch dại,không biết sao nó ko tự Delete đối tượng cũ khi tạo đám mây đi ạ,

Mong anh chị giải đáp giúp để  em có thể học hỏi thêm  !

P/s:Nếu dùng Lisp  để xóa thì em làm được,như ng em nghĩ do thay đổi biến hệ thống nào đó liên quan đến Lệnh REVCLOUD nên nó mới thay đổi thế ạ,

File đây ạ : http://www.cadviet.c...2_cloudmark.dwg

Thử biến hệ thống DelObj xem sao :

15454_delobj.png


  • 2

#2571 Tr.CongSon

Tr.CongSon

    biết lệnh array

  • Members
  • PipPipPip
  • 183 Bài viết
Điểm đánh giá: 40 (tàm tạm)

Đã gửi 06 July 2015 - 01:02 PM

Thử biến hệ thống DelObj xem sao :

 

Em cảm ơn gia_bach nhiều ^^ Like a phát liền ^^

Em cũng nghi nghi có cái biến hệ thống nào đó mà tìm hoài ko ra ^^ nên mới đành nhờ anh chị Cadviet giúp.


  • 0

#2572 duy782006

duy782006

    PHẠM QUỐC DUY

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

Đã gửi 08 July 2015 - 09:33 AM

Tình hình là mới ngồi đẻo gọt cái đống lisp bây giờ chạy lệnh nó báo như này

Hard error occurred ***

internal stack limit reached (simulated)

Bác nào có kinh nghiệm diển giãi ra giúp mình là lỗi gì với.


  • 0

Cứ ngỡ trần gian là cõi thật.Cho nên tất bật đến bây giờ.
Tạo hộp thoại bằng lisp My blog QUY ĐỊNH ĐẶT TÊN TOPIC TRONG CHUYÊN MỤC LISPD http://ktsduy.wordpress.com/
Để cám ơn chỉ cần nhấn rep_up.png
(Là nhấn vào nút đó phía bài viết của người ta í chứ đừng có nhè cái hình này mà nhấn miết đi nha :-D


#2573 gia_bach

gia_bach

    biết lệnh adcenter

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

Đã gửi 08 July 2015 - 09:50 AM

Tình hình là mới ngồi đẻo gọt cái đống lisp bây giờ chạy lệnh nó báo như này

Hard error occurred ***

internal stack limit reached (simulated)

Bác nào có kinh nghiệm diển giãi ra giúp mình là lỗi gì với.

Lỗi này thường do 1 "vòng lặp vô hạn" gây ra hết bộ nhớ tạm,

Duy kiểm tra lại các điều kiện thoát của vòng lặp (while , repeat, ...)

 

một số link tham khảo :

 - không biết có phải là Ketxu CadViet : http://www.cadtutor....d80cf843ee3a685

 - http://forums.augi.c...hed-(simulated)

 - http://www.theswamp....p?topic=31159.0


  • 1

#2574 duy782006

duy782006

    PHẠM QUỐC DUY

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

Đã gửi 08 July 2015 - 12:34 PM

Đúng là hàm chuyễn mã từ vni sang unicode chạy hơi ì ạch. Duy dùng cho hộp thoại chắc là nhiều quá nên tràn chứ áp dụng cho lisp chuyễn mã thì ko lỗi. Chắc lại phải dùng chuyễn tcvn3 sang unicode cho hộp thoại như cũ thôi.
  • 0

Cứ ngỡ trần gian là cõi thật.Cho nên tất bật đến bây giờ.
Tạo hộp thoại bằng lisp My blog QUY ĐỊNH ĐẶT TÊN TOPIC TRONG CHUYÊN MỤC LISPD http://ktsduy.wordpress.com/
Để cám ơn chỉ cần nhấn rep_up.png
(Là nhấn vào nút đó phía bài viết của người ta í chứ đừng có nhè cái hình này mà nhấn miết đi nha :-D


#2575 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 08 July 2015 - 06:07 PM

Ô đúng là câu hỏi của ketxu đó.
Lâu lắm r k dám học đòi để đệ quy trong code nữa ^^
https://en.m.wikiped.../Stack_overflow
  • 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


#2576 Tr.CongSon

Tr.CongSon

    biết lệnh array

  • Members
  • PipPipPip
  • 183 Bài viết
Điểm đánh giá: 40 (tàm tạm)

Đã gửi 10 July 2015 - 10:53 AM

Chào các anh chị,

Hiện em đang viết 1 đoạn Lisp ,trong đó có đoạn Quét chon đối tượng theo vùng (dùng ssget)

Do có nhiều vùng chọn nên em muốn đánh dấu vùng chọn đó để tiện cho việc theo dõi ,sử dụng , cách thức đánh đấu giống như lệnh MSTRETCH vậy

Anh chị có thể Code cho em vài dòng tham khảo với ạ

Em cảm ơn!


  • 0

#2577 duy782006

duy782006

    PHẠM QUỐC DUY

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

Đã gửi 10 July 2015 - 12:31 PM

Theo mình biết thì msttetch dùng grdraw để vẽ mà đối tượng này là vectơ sẽ biến mất khi zoom pan nên mình đoán sẽ ko khả thi cho trường hơđp của ban
  • 0

Cứ ngỡ trần gian là cõi thật.Cho nên tất bật đến bây giờ.
Tạo hộp thoại bằng lisp My blog QUY ĐỊNH ĐẶT TÊN TOPIC TRONG CHUYÊN MỤC LISPD http://ktsduy.wordpress.com/
Để cám ơn chỉ cần nhấn rep_up.png
(Là nhấn vào nút đó phía bài viết của người ta í chứ đừng có nhè cái hình này mà nhấn miết đi nha :-D


#2578 Tr.CongSon

Tr.CongSon

    biết lệnh array

  • Members
  • PipPipPip
  • 183 Bài viết
Điểm đánh giá: 40 (tàm tạm)

Đã gửi 10 July 2015 - 01:05 PM

Theo mình biết thì msttetch dùng grdraw để vẽ mà đối tượng này là vectơ sẽ biến mất khi zoom pan nên mình đoán sẽ ko khả thi cho trường hơđp của ban

Vậy có cách nào để nó hiểu xong lệnh lisp nó mới mất gdraw không a Duy???

Vì sau mỗi lần chon em đều ENter or Space để hiểu nó là 1 vùng nên cái gdraw như a nói cũng sẽ biến mất


  • 0

#2579 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 11 July 2015 - 07:57 PM

Vậy có cách nào để nó hiểu xong lệnh lisp nó mới mất gdraw không a Duy???

Vì sau mỗi lần chon em đều ENter or Space để hiểu nó là 1 vùng nên cái gdraw như a nói cũng sẽ biến mất

 

Cái này thì anh Duy đã nhầm. Lệnh Mstretch sử dụng đường chọn bằng đối tượng PLINE

Bạn Tr.Cong Son có thể tham khảo thêm lisp Mstretch.lsp trong Express


  • 2

#2580 snowman.hms

snowman.hms

    biết vẽ ellipse

  • Members
  • PipPip
  • 54 Bài viết
Điểm đánh giá: 26 (tàm tạm)

Đã gửi 12 July 2015 - 12:20 AM

Chào các anh chị,

Hiện em đang viết 1 đoạn Lisp ,trong đó có đoạn Quét chon đối tượng theo vùng (dùng ssget)

Do có nhiều vùng chọn nên em muốn đánh dấu vùng chọn đó để tiện cho việc theo dõi ,sử dụng , cách thức đánh đấu giống như lệnh MSTRETCH vậy

Anh chị có thể Code cho em vài dòng tham khảo với ạ

Em cảm ơn!

 

Like this?

(defun c:test ( / gr_rec gr gr1 gr2 p1 p2 tm lst s)
  (defun gr_rec (p1 p2 / l)
    (mapcar '(lambda (a b) (grdraw a b 6 1))
	    (setq l (list p1 (list (car p1) (cadr p2))
			  p2 (list (car p2) (cadr p1))))
	    (cons (last l) l)))
  (while
    (progn
      (setq gr1	(grread t 15 0)
	    gr2	(cadr gr1)
	    gr1	(car gr1)
      )
      (princ (strcat "\nSpecify the First point ..."
		     "\nPress [SPACE/ENTER] to EXIT"
	     )
      )
      (cond
	((= 5 gr1)
	 (redraw)
	 (if lst (mapcar '(lambda (x) (gr_rec (car x) (cadr x))) lst) t)
	)
	((= 3 gr1)
	 (setq p1 gr2)
	 (while
	   (progn
	     (setq gr1 (grread t 15 0)
		   gr2 (cadr gr1)
		   gr1 (car gr1)
	     )
	     (princ "\nSpecify the Second point ...")
	     (cond
	       ((= 5 gr1)
		(redraw)
		(if lst (mapcar '(lambda (x) (gr_rec (car x) (cadr x))) lst) t)
		(setq tm gr2)
		(gr_rec p1 tm)
	       )
	       ((= 3 gr1)
		(setq p2 gr2)
		(setq lst (cons (list p1 p2) lst))
		nil
	       )
	     )
	   )
	 )
	 t
	)
	((and (= 2 gr1) (member gr2 '(13 32))) nil)
	(t)
      )
    )
  )
  (if lst
    (progn
      (setq s (ss_union (mapcar '(lambda (x) (ssget "_C" (car x) (cadr x))) lst)))
      (redraw)
      (sssetfirst nil s)
    )
  )
  (princ)
)

(defun ss_union	(lst / i s)
  (setq	lst (vl-sort lst '(lambda (a b) (> (sslength a) (sslength b))))
	s   (car lst)
  )
  (foreach x (cdr lst)
    (repeat (setq i (sslength x))
      (ssadd (ssname x (setq i (1- i))) s)
    )
  )
  s
) 
;|«Visual LISP© Format Options»
(70 2 1 2 nil "_eof " 100 9 0 0 1 T T T T)
;*** DO NOT add text below the comment! ***|;


  • 1