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

#2521 snowman.hms

snowman.hms

    biết vẽ ellipse

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

Đã gửi 24 May 2015 - 06:39 PM

(defun C:test (/ l p s spc)
 (setq
  spc (vlax-get (vla-get-activedocument (vlax-get-acad-object))
         (if (eq (getvar 'CVPORT) 1)
          'Paperspace
          'Modelspace
         )
    )
 );;;Đoạn này có tác dung gì ạ???: trả về vla-object, space hiện hành (model hay paper space)
 (if
  (and
   (princ "\nChon cac bulon...")
   (setq l (acet-ss-to-list (ssget '((0 . "CIRCLE") (8 . "Bolt")))))
   (setq l (mapcar '(lambda (x) (cdr (assoc 10 (entget x)))) l))
   (setq l (vl-sort l '(lambda (a b ) (< (car a) (car b ))))
      p1 (car l)
      p2 (car (reverse l)))
  );;Dòng này em hiểu ^
   (progn
    (setq l (f l))
    (setq p (if (< (setq goc (angle p1 p2)) (/ pi 2))
          (polar p2 (+ goc (/ pi 2))     (* 20 (getvar "dimscale")))
          (polar p1  (- goc (* 3 (/ pi 2))) (* 20 (getvar "dimscale")))));;Dòng này em thêm để tự set điểm đặt dimension
    (foreach x l
     (if (< 1 (car x))
      (progn
        (setq s (strcat (itoa (car x)) "@" (rtos (cadr x) 2 0)))
       (_dimaligned spc (car (last x)) (cadr (last x)) p s)
      )
       (progn
       (setq s (rtos (cadr x) 2 0))
       (_dimaligned spc (car (last x)) (cadr (last x)) p "<>");;Dấu "<>" em tự thêm vào để trở về kích thước that nếu số luợng =1,nhưng còn cách nào khác để dim kích thước thật chỗ này nếu ko dung command ko a?? (có thể thêm hàm if trong hàm con để xử lý điều khiển biến đầu vào str của hàm con

      )
     )
    )
   )
 )
 (princ)
)

(defun f (l / a b d tm i l1 x)
 (setq l (mapcar '(lambda (a b ) (list (distance a b ) (list a b )))
         l
         (cdr l)
     )
 );;Tạo list gồm ( dis (tọa độ))

 (while l
  (setq a  (car l);;lấy phần tử đầu của l
     d  (car a);;lấy phần tử đầu của a tức là dis 

    tm (list (caadr a));;;Cái này lấy phần tử thứ 2 của thằng a,nhưng em chưa hiểu cái caadr là gộp của car với gì ,em chưa hiểu nguyên tắc ghép-->anh giải thích giúp em ...

     l  (cdr l);;lấy phần tử từ thứ 2 trở đi của l: lấy phần tử đầu tiên (ca) của phần tử thứ 2 (adr) của a 

     i  1
  )
  (while (= (car a) (caar l)); duyệt phần còn lại của l, với điều kiên lặp là cùng d của phần tử a
   (setq b  (car l)
      i  (1+ i)
      tm (cons (cadadr b ) tm)
      l  (cdr l)
   )
  );;đoạn while ni để tìm số phần tử going nhau đúng ko ạ,nhưng em chưa hiểu cách thức thực hiện... duyệt qua phần còn lại của l, kiểm tra nếu cùng thì kiểm tra tiếp, cho đến khi khác  d thì thôi, mỗi lần nếu tìm được thì tăng biến i và thêm phần tử thứ 2 của phần tử thứ 2 của phần tử tìm thấy (cadadr B) vào tmp, và remove phần tử đầu tiên của l (setq l (cdr l)); trường hợp không tim được thì không làm gì (do nothing)

  (if (< 1 i)
   (setq l1 (cons (list i d (list (last tm) (car tm))) l1))
   (setq l1 (cons (vl-list* 1 a) l1));;;cái vl-list này có tác dung gì ạ??? tạo list từ các phần tử, xem trong help

  )
 )
 (reverse l1)
)
(defun _dimaligned (spc p1 p2 pt str)
 (vlax-put (vlax-invoke spc 'adddimaligned p1 p2 pt) 'textoverride str);;;vl-invoke có tác dung gì hả a?? thực thi một activex method (=vlax-invoke-method)
 (vlax-put-property (vlax-ename->vla-object (entlast)) 'TextInside -1);;cái này em tự thêm vào để trả về dimension luôn giữa 2 đường going kích thước
)


  • 1

#2522 snowman.hms

snowman.hms

    biết vẽ ellipse

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

Đã gửi 24 May 2015 - 09:05 PM

Vlax-invoke, vlax-put, vlax-get:

http://www.theswamp....p?topic=33204.5

 

Cxxxxr

http://www.theswamp....p?topic=31473.0


  • 1

#2523 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 25 May 2015 - 08:16 AM

Lâu ni em toàn tự đọc trên cadviet rồi học theo nên mấy cái snowman.hsm code cao siêu that, (nhưng học được nhiều hàm rất hay ^^)

Cảm ơn anh/chị đã cung cấp kiến thức that hay ,thật bổ ích^^

Chúc anh chị đầu tuần vui vẻ,!


  • 0

#2524 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 27 May 2015 - 08:08 AM

Chào anh chị,

Em có bài toán như sau,mong anh chị giải đáp giúp ạ,

Em có 1 hoặc 2 hàng bolt bất kỳ (bolt trong cad là circle)

Bằng cách nào ta có thể kiểm tra được center point của bolt nằm về phía nào của đường line cho trước không ạ

Nếu bolt thẳng hàng nhau theo phương đứng hoặc phương ngang thì em so sánh toạ đọ rồi suy ra được,nhưng thẳng hàng theo phương nghiêng bất kỳ thì em không biết làm thế nào

Anh chị có thể cho em thuật toán để tìm hoặc có thể code cho em vài dòng tham khảo được không ạ

Do công ty không cho upload file nên mong anh chị thông cảm ,có thể lấy bolt theo file này ạ (bài # 2511)

http://www.cadviet.v...392_do_bolt.dwg


  • 0

#2525 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 May 2015 - 08:53 AM

 Chuyển UCS về để 1 trục của nó trùng với Line, khi đó so sánh X hoặc Y. Chú ý khi chuyển UCS thì phải dùng hàm trans để chuyển tọa độ.


  • 1

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


#2526 snowman.hms

snowman.hms

    biết vẽ ellipse

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

Đã gửi 27 May 2015 - 05:33 PM

(defun c:test (/ s e o i p1 p2 LM:Clockwise-p)
  
  (vl-load-com)
  
  ;; Clockwise-p - Lee Mac
  ;; Returns T if p1,p2,p3 are clockwise oriented

  (defun LM:Clockwise-p	(p1 p2 p3)
    (< (* (- (car p2) (car p1)) (- (cadr p3) (cadr p1)))
       (* (- (cadr p2) (cadr p1)) (- (car p3) (car p1)))
    )
  )
  
  ;;-------------------------------------------------
  
  (if (and (princ "\nSelect Bolds  :")
	   (setq s (ssget '((0 . "CIRCLE"))))
	   (setq e (car (entsel "\nSelect a Line:  ")))
	   (= "LINE" (cdr (assoc 0 (entget e))))
      )
    (progn
      (setq p1 (cdr (assoc 10 (entget e)))
	    p2 (cdr (assoc 11 (entget e)))
	    i  -1
      )
      (while  (setq e (ssname s (setq i (1+ i))))
	(setq o (vlax-ename->vla-object e))
	(if (LM:Clockwise-p (vlax-get o 'center) p1 p2)	    
	    (vlax-put o 'color 1);right
	    (vlax-put o 'color 2);left
	)
      )      
    )
  )
  (princ)
)

  • 1

#2527 snowman.hms

snowman.hms

    biết vẽ ellipse

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

Đã gửi 27 May 2015 - 10:20 PM

Tue_NV có 1 câu hỏi nhìn nó có vẻ đơn giản nhưng chưa biết cách thức xử lý nó

Làm thế nào để tách kí tự "\" ra khỏi chuỗi "\037" -> Kết quả là  "037"    

Mình sử dụng hàm substr để trích chuỗi để xét thì thấy :      

Command: (substr "\037" 1 1) -> "\037". Chỉ lấy 1 ký tự mà nó ra hết

Mong các bác chỉ giáo giúp! Thanks

 

Cho em hỏi bác Tue_NV tạo ra các ký tự đó như thế nào?


  • 0

#2528 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 27 May 2015 - 10:24 PM

 Chuyển UCS về để 1 trục của nó trùng với Line, khi đó so sánh X hoặc Y. Chú ý khi chuyển UCS thì phải dùng hàm trans để chuyển tọa độ.

Cảm ơn anh Hạ nhé,em cũng đang đi theo hướng này 

Biết thêm được hàm trans ^^


  • 0

#2529 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 27 May 2015 - 10:30 PM

(defun c:test (/ s e o i p1 p2 LM:Clockwise-p)
  
  (vl-load-com)
  
  ;; Clockwise-p - Lee Mac
  ;; Returns T if p1,p2,p3 are clockwise oriented

  (defun LM:Clockwise-p	(p1 p2 p3)
    (< (* (- (car p2) (car p1)) (- (cadr p3) (cadr p1)))
       (* (- (cadr p2) (cadr p1)) (- (car p3) (car p1)))
    )
  )
  
  ;;-------------------------------------------------
  
  (if (and (princ "\nSelect Bolds  :")
	   (setq s (ssget '((0 . "CIRCLE"))))
	   (setq e (car (entsel "\nSelect a Line:  ")))
	   (= "LINE" (cdr (assoc 0 (entget e))))
      )
    (progn
      (setq p1 (cdr (assoc 10 (entget e)))
	    p2 (cdr (assoc 11 (entget e)))
	    i  -1
      )
      (while  (setq e (ssname s (setq i (1+ i))))
	(setq o (vlax-ename->vla-object e))
	(if (LM:Clockwise-p (vlax-get o 'center) p1 p2)	    
	    (vlax-put o 'color 1);right
	    (vlax-put o 'color 2);left
	)
      )      
    )
  )
  (princ)
)

Cảm ơn Snowman nhiều,code của bạn hay thật,

Súc tích mà gọn nữa ^^

Cho mình hỏi tí: Cái hàm LM:Clockwise-p mình chửa hiểu cách thức thực hiện của nó ^^

Bạn giải thích giúp mình nhé


  • 0

#2530 snowman.hms

snowman.hms

    biết vẽ ellipse

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

Đã gửi 27 May 2015 - 10:43 PM

Cảm ơn Snowman nhiều,code của bạn hay thật,

Súc tích mà gọn nữa ^^

Cho mình hỏi tí: Cái hàm LM:Clockwise-p mình chửa hiểu cách thức thực hiện của nó ^^

Bạn giải thích giúp mình nhé

LM:Clockwise-p kiểm tra xem 3 điểm p1 p2 p3 theo "chiều kim đồng hồ-hay không?" nếu đúng thì trả về true, tức là điểm p1 sẽ nằm bên phải của điểm đoạn thẳng p2-p3

Một lưu ý là khái niệm trái-phải chỉ là tương đối. nếu hiện tại 1 vật ở bên phải bạn thì khi bạn quay 180 độ thì nó lại nằm bên trái bạn :)


  • 1

#2531 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 29 May 2015 - 03:41 PM

Thay:

(command "_.RECTANGLE")

Bằng:

(command "_.RECTANGLE" (setq p1 (getpoint "\nP1: ")) (getcorner p1 "\nP2: "))

Em cảm ơn a Hạ nhé.

Em tìm hiểu mấy ngày nay và đã thấy lỗi ,không phải do Command  mà do chỗ set biến cục bộ cho Lisp ^.Tại dòng này ạ

(defun c:CM (/ *error* cla ent-last iferror k lay olderr os pause r ve vec)

Dư có mỗi từ này mà Lisp bị lỗi ^^

 Pause ở Lisp này không phải là biến mà nó giống như 1 lệnh trong Lisp dùng để dung chương trình đợi tín hiệu nhập từ chuột hoặc bàn phím ^

Do đó mình sét nó vào biến thì--->Lisp chạy Sai

Anh em khi dùng (command Pause") nhớ chú ý khỏi bị lỗi nhé!

Thân Ái!


  • 0

#2532 khoaspkt

khoaspkt

    biết pan

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

Đã gửi 06 June 2015 - 06:30 PM

Không biết đặt câu hỏi ngớ ngẩn này ở đâu nên đành viết đại ra đây, mong mọi người giúp.
- Mình đang viết cái lisp mà kẹt ở giải thuật. Như thế này. Có 1 góc tạo bởi 3 điểm, A(x1,y1), B(x2,y2), C(x3,y3). Viết phương trình đường thẳng của đường phân giác của góc B. Các số x1, x2,x3,y1,y2,y3 đã biết.
- Mình đọc bài giải trên mạng mà ko hiểu do quên nhiều kiến thức quá. Mong mọi người giải cụ thể giúp. Thanks
  • 0

#2533 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 06 June 2015 - 06:50 PM

Tặng bạn cái này. Tôi viết lâu rồi và đã post lên Caviet nhưng giờ quên link nên post lại. Vẽ đủ thứ trong tam giác luôn.

;----- Ve cac duong dac biet trong tam giac.
;Doan Van Ha CADViet.com
(defun C:HA( / p11 p22 p33 pg12 pg23 pg31)
 (or cal (arxload "geomcal"))
 (command "undo" "begin")
 (setq p1 (getpoint "\nChon dinh thu 1 cua tam giac: ")
           p2 (getpoint "\nChon dinh thu 2 cua tam giac: ")
           p3 (getpoint "\nChon dinh thu 3 cua tam giac: "))
 (if (not (3DTH p1 p2 p3))
  (progn 
   (setq p11 (inters p1 (polar p1 (acet-dtor (- (cal "ang(p1,p2)") (/ (cal "ang(p1,p3,p2)") 2))) 1) p2 p3 nil)
             p22 (inters p2 (polar p2 (acet-dtor (- (cal "ang(p2,p3)") (/ (cal "ang(p2,p1,p3)") 2))) 1) p3 p1 nil)
             p33 (inters p3 (polar p3 (acet-dtor (- (cal "ang(p3,p1)") (/ (cal "ang(p3,p2,p1)") 2))) 1) p1 p2 nil)
             pg12 (acet-geom-midpoint p1 p2)
             pg23 (acet-geom-midpoint p2 p3)
             pg31 (acet-geom-midpoint p3 p1))
   (acet-sysvar-set (list "osmode" 0 "cmdecho" 0))
   (initget "1 2 3 4 5 6")
   (setq kieu (getkword "\nChon kieu ve: 1.Duong cao/2.Phan giac/3.Trung tuyen/4.Trung truc/5.Noi tiep/6.Ngoai tiep: "))
   (cond ((= kieu "1") (VDC p1 p2 p3))
              ((= kieu "2") (VPG p1 p2 p3))
              ((= kieu "3") (VTT p1 p2 p3))
              ((= kieu "4") (VTTR p1 p2 p3))
              ((= kieu "5") (VDTNT p1 p2 p3))
              ((= kieu "6") (VDTNGT p1 p2 p3)))
   (acet-sysvar-restore)
   (command "undo" "end"))
  (alert "3 diem nay thang hang, khong lam gi duoc nua dau!"))
 (princ))
;----- Ve 3 duong trung truc.
(defun VTTR(p1 p2 p3)
 (command "xline" pg12 (polar pg12 (+ (acet-dtor (cal "ang(p1,p2)")) (/ pi 2)) 1) ""
                    "xline" pg23 (polar pg23 (+ (acet-dtor (cal "ang(p2,p3)")) (/ pi 2)) 1) ""
                    "xline" pg31 (polar pg31 (+ (acet-dtor (cal "ang(p3,p1)")) (/ pi 2)) 1) ""))
;----- Ve 3 duong cao.
(defun VDC(p1 p2 p3)
 (command "line" p1 (HA p1 p2 p3) "" "line" p2 (HA p2 p3 p1) "" "line" p3 (HA p3 p1 p2) ""))
;----- Ve 3 duong phan giac.
(defun VPG(p1 p2 p3)
 (command "line" p1 p11 "" "line" p2 p22 "" "line" p3 p33 ""))
;----- Ve 3 duong trung tuyen.
(defun VTT(p1 p2 p3)
 (command "line" p1 pg23 "" "line" p2 pg31 "" "line" p3 pg12 ""))
;----- Ve duong tron noi tiep.
(defun VDTNT(p1 p2 p3)
 (command "circle" (inters p1 p11 p2 p22 nil) (HA (inters p1 p11 p2 p22 nil) p1 p2)))
;----- Ve duong tron ngoai tiep.
(defun VDTNGT(p1 p2 p3)
 (command "circle" "3p" p1 p2 p3))
;----- 
(defun HA(pt p1 p2 / vt pt1) (setq vt (cal "nor(p1,p2)")) (setq pt1 (cal "pt+vt")) (cal "ill(pt,pt1,p1,p2)"))
;----- 
(defun 3DTH ( p1 p2 p3 ) ((lambda ( a b c ) (or (equal (+ a b) c 1e-8) (equal (+ b c) a 1e-8) (equal (+ c a) b 1e-8))) (distance p1 p2) (distance p2 p3) (distance p1 p3)))

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


#2534 khoaspkt

khoaspkt

    biết pan

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

Đã gửi 06 June 2015 - 07:42 PM


Tặng bạn cái này. Tôi viết lâu rồi và đã post lên Caviet nhưng giờ quên link nên post lại. Vẽ đủ thứ trong tam giác luôn.

;----- Ve cac duong dac biet trong tam giac.
;Doan Van Ha CADViet.com
(defun C:HA( / p11 p22 p33 pg12 pg23 pg31)
 (or cal (arxload "geomcal"))
 (command "undo" "begin")
 (setq p1 (getpoint "\nChon dinh thu 1 cua tam giac: ")
           p2 (getpoint "\nChon dinh thu 2 cua tam giac: ")
           p3 (getpoint "\nChon dinh thu 3 cua tam giac: "))
 (if (not (3DTH p1 p2 p3))
  (progn 
   (setq p11 (inters p1 (polar p1 (acet-dtor (- (cal "ang(p1,p2)") (/ (cal "ang(p1,p3,p2)") 2))) 1) p2 p3 nil)
             p22 (inters p2 (polar p2 (acet-dtor (- (cal "ang(p2,p3)") (/ (cal "ang(p2,p1,p3)") 2))) 1) p3 p1 nil)
             p33 (inters p3 (polar p3 (acet-dtor (- (cal "ang(p3,p1)") (/ (cal "ang(p3,p2,p1)") 2))) 1) p1 p2 nil)
             pg12 (acet-geom-midpoint p1 p2)
             pg23 (acet-geom-midpoint p2 p3)
             pg31 (acet-geom-midpoint p3 p1))
   (acet-sysvar-set (list "osmode" 0 "cmdecho" 0))
   (initget "1 2 3 4 5 6")
   (setq kieu (getkword "\nChon kieu ve: 1.Duong cao/2.Phan giac/3.Trung tuyen/4.Trung truc/5.Noi tiep/6.Ngoai tiep: "))
   (cond ((= kieu "1") (VDC p1 p2 p3))
              ((= kieu "2") (VPG p1 p2 p3))
              ((= kieu "3") (VTT p1 p2 p3))
              ((= kieu "4") (VTTR p1 p2 p3))
              ((= kieu "5") (VDTNT p1 p2 p3))
              ((= kieu "6") (VDTNGT p1 p2 p3)))
   (acet-sysvar-restore)
   (command "undo" "end"))
  (alert "3 diem nay thang hang, khong lam gi duoc nua dau!"))
 (princ))
;----- Ve 3 duong trung truc.
(defun VTTR(p1 p2 p3)
 (command "xline" pg12 (polar pg12 (+ (acet-dtor (cal "ang(p1,p2)")) (/ pi 2)) 1) ""
                    "xline" pg23 (polar pg23 (+ (acet-dtor (cal "ang(p2,p3)")) (/ pi 2)) 1) ""
                    "xline" pg31 (polar pg31 (+ (acet-dtor (cal "ang(p3,p1)")) (/ pi 2)) 1) ""))
;----- Ve 3 duong cao.
(defun VDC(p1 p2 p3)
 (command "line" p1 (HA p1 p2 p3) "" "line" p2 (HA p2 p3 p1) "" "line" p3 (HA p3 p1 p2) ""))
;----- Ve 3 duong phan giac.
(defun VPG(p1 p2 p3)
 (command "line" p1 p11 "" "line" p2 p22 "" "line" p3 p33 ""))
;----- Ve 3 duong trung tuyen.
(defun VTT(p1 p2 p3)
 (command "line" p1 pg23 "" "line" p2 pg31 "" "line" p3 pg12 ""))
;----- Ve duong tron noi tiep.
(defun VDTNT(p1 p2 p3)
 (command "circle" (inters p1 p11 p2 p22 nil) (HA (inters p1 p11 p2 p22 nil) p1 p2)))
;----- Ve duong tron ngoai tiep.
(defun VDTNGT(p1 p2 p3)
 (command "circle" "3p" p1 p2 p3))
;----- 
(defun HA(pt p1 p2 / vt pt1) (setq vt (cal "nor(p1,p2)")) (setq pt1 (cal "pt+vt")) (cal "ill(pt,pt1,p1,p2)"))
;----- 
(defun 3DTH ( p1 p2 p3 ) ((lambda ( a b c ) (or (equal (+ a b) c 1e-8) (equal (+ b c) a 1e-8) (equal (+ c a) b 1e-8))) (distance p1 p2) (distance p2 p3) (distance p1 p3)))
Cảm ơn bạn đã quan tâm. Mình xem qua cái lisp, mình chưa hiểu chỗ xác định cái điểm p12,23,31,11,22,33. Ý là lisp thì ok rồi, mình không nghĩ là vẽ tùm lum đường vậy mà có mấy dòng là ok, quá hay. Mình cần cái thuật toán để áp dụng cho trường hợp của mình. Cụ thể là mình xác định 1 điểm trên đường phân giác của 1 góc và cách tâm góc 1 khoảng xác định.
  • 0

#2535 khoaspkt

khoaspkt

    biết pan

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

Đã gửi 06 June 2015 - 08:09 PM

À, mình đã hiểu rồi. Cảm ơn bạn Hà rất nhiều
  • 0

#2536 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 June 2015 - 04:15 PM

Mình đang cần đoạn lisp làm việc như sau:

Kích vào 1 đối tượng att trong Block,

-Kết quả là Tag và Value của att đó.

-Đồng thời mình muốn chọn cả cái block chứa cái att đó thành đối tượng.

Bạn nào giúp mình với! Cám ơn.

 


  • 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


#2537 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 08 June 2015 - 04:53 PM

Chắc là thế này?

(setq lst (entget (car (nentsel))))

(setq tag (cdr (assoc 2 lst)))

(setq val (cdr (assoc 1 lst)))

(setq ent (cdr (assoc 330 lst)))

(sssetfirst nil (ssadd ent))


  • 1

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


#2538 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 20 June 2015 - 07:51 AM

Mình có đoạn lisp tạo block chứa đối tượng ATT như sau:

(defun c:tbl ()
  (entmake '((0 . "BLOCK") (100 . "AcDbEntity") (67 . 0) (8 . "0") (100 . "AcDbBlockReference") (66 . 1) (2 . "bltt") (10 0.0 0.0 0.0) (70 . 0)))
  (entmake '((0 . "CIRCLE") (100 . "AcDbEntity") (67 . 0) (8 . "0") (100 . "AcDbCircle") (10 300.1373959146440 300.1370228494052 0.0) (40 . 300.1373959146440)))
  (entmake '((0 . "ATTDEF") (100 . "AcDbEntity") (67 . 0) (8 . "0") (100 . "AcDbText") (10 88.22203116700306 125.4390094483963 0.0) (40 . 350.0) (1 . "ttt") (50 . 0.0) (41 . 1.0) (51 . 0.0) (7 . "DIM") (71 . 0) (72 . 1) (11 303.1941760137997 15.27187852917632 0.0) (100 . "AcDbAttributeDefinition") (3 . "tt") (2 . "T") (70 . 8) (73 . 0) (74 . 1) (280 . 1)))
  (entmake '((0 . "ENDBLK") (100 . "AcDbBlockEnd") (8 . "0")))
  (princ)
) 

Vấn đề là nó tạo được block nhưng ko hiển thị giá trị ATT trong đó. Khi explode nó ra thì ATT lại hiện ra. Bác nào có cách khắc phục giúp mình 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


#2539 snowman.hms

snowman.hms

    biết vẽ ellipse

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

Đã gửi 20 June 2015 - 09:26 AM

attsync maybe :)


  • 1

#2540 tien2005

tien2005

    biết lệnh properties

  • Members
  • PipPipPipPip
  • 257 Bài viết
Điểm đánh giá: 94 (tàm tạm)

Đã gửi 20 June 2015 - 09:49 AM

Mình có đoạn lisp tạo block chứa đối tượng ATT như sau:

(defun c:tbl ()
  (entmake '((0 . "BLOCK") (100 . "AcDbEntity") (67 . 0) (8 . "0") (100 . "AcDbBlockReference") (66 . 1) (2 . "bltt") (10 0.0 0.0 0.0) (70 . 0)))
  (entmake '((0 . "CIRCLE") (100 . "AcDbEntity") (67 . 0) (8 . "0") (100 . "AcDbCircle") (10 300.1373959146440 300.1370228494052 0.0) (40 . 300.1373959146440)))
  (entmake '((0 . "ATTDEF") (100 . "AcDbEntity") (67 . 0) (8 . "0") (100 . "AcDbText") (10 88.22203116700306 125.4390094483963 0.0) (40 . 350.0) (1 . "ttt") (50 . 0.0) (41 . 1.0) (51 . 0.0) (7 . "DIM") (71 . 0) (72 . 1) (11 303.1941760137997 15.27187852917632 0.0) (100 . "AcDbAttributeDefinition") (3 . "tt") (2 . "T") (70 . 8) (73 . 0) (74 . 1) (280 . 1)))
  (entmake '((0 . "ENDBLK") (100 . "AcDbBlockEnd") (8 . "0")))
  (princ)
) 

Vấn đề là nó tạo được block nhưng ko hiển thị giá trị ATT trong đó. Khi explode nó ra thì ATT lại hiện ra. Bác nào có cách khắc phục giúp mình với! 

(entmake '((0 . "BLOCK")
         (100 . "AcDbEntity")
         (67 . 0)
         (8 . "0")
         (100 . "AcDbBlockReference")
         (66 . 1)
         (2 . "bltt")
         (10 0.0 0.0 0.0)
         (70 . 2)
        )
  )


  • 1