Đến nội dung


Hình ảnh
- - - - -

[hỏi] vẽ pline theo danh sách.


  • Chủ đề bị khóa Chủ đề bị khóa
8 replies to this topic

#1 dunguss3581

dunguss3581

    biết lệnh rotate

  • Advance Member
  • PipPipPip
  • 139 Bài viết
Điểm đánh giá: 5 (bình thường)

Đã gửi 10 May 2012 - 05:06 PM

các bac giúp em code dể vẽ pline theo list sau:

(setq a(list 7.77200,0.88300 12.22800,-0.14900 -3.15200,0.16800
-1.03500,-0.16900 -4.09600,-0.17100 -7.64400,0.38000 -0.44200,-0.19300
-3.63100,0.27400)
cứ 2 số là một điểm.
thanks!
  • 0

#2 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 10 May 2012 - 06:27 PM

các bac giúp em code dể vẽ pline theo list sau:
(setq a (list 7.77200,0.88300 12.22800,-0.14900 -3.15200,0.16800 -1.03500,-0.16900 -4.09600,-0.17100 -7.64400,0.38000 -0.44200,-0.19300 -3.63100,0.27400)
cứ 2 số là một điểm.
thanks!

Vẽ thì được, nhưng trước hết là cái list của bạn trả về như thế này:
(nil nil nil nil nil nil nil nil)
Bởi các phần tử trong list bạn viết chưa phù hợp.
  • 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.


#3 dunguss3581

dunguss3581

    biết lệnh rotate

  • Advance Member
  • PipPipPip
  • 139 Bài viết
Điểm đánh giá: 5 (bình thường)

Đã gửi 10 May 2012 - 06:38 PM

Vẽ thì được, nhưng trước hết là cái list của bạn trả về như thế này:
(nil nil nil nil nil nil nil nil)
Bởi các phần tử trong list bạn viết chưa phù hợp.

vẽ như thế nào vậy bác? mách nước cho em với. em dùng code : (command "pline" a "") không được. mà khi em copy vào dòng nhắc lệnh lại được là sao vậy các bác?
  • 0

#4 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 10 May 2012 - 07:19 PM

vẽ như thế nào vậy bác? mách nước cho em với. em dùng code : (command "pline" a "") không được. mà khi em copy vào dòng nhắc lệnh lại được là sao vậy các bác?

Copy từng phần tử thì nó chính là toạ độ điểm nên vẽ được. Còn cái list của bạn toàn nil với nil thì vẽ kiểu gì. Hơn nữa, cái cú pháp bạn đưa ra không đúng (phức tạp hơn nhiều).
Hỏi bạn: cái list đó ở đâu ra? Để tôi còn giúp cách tạo list phù hợp.
Và cuối cùng là phải dùng lisp.
  • 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.


#5 dunguss3581

dunguss3581

    biết lệnh rotate

  • Advance Member
  • PipPipPip
  • 139 Bài viết
Điểm đánh giá: 5 (bình thường)

Đã gửi 10 May 2012 - 07:50 PM

Copy từng phần tử thì nó chính là toạ độ điểm nên vẽ được. Còn cái list của bạn toàn nil với nil thì vẽ kiểu gì. Hơn nữa, cái cú pháp bạn đưa ra không đúng (phức tạp hơn nhiều).
Hỏi bạn: cái list đó ở đâu ra? Để tôi còn giúp cách tạo list phù hợp.
Và cuối cùng là phải dùng lisp.

tui dang dùng lisp viết lệnh vẽ trắc ngang. đọc file số liệu ntd. vì list được tạo ra sau nhiều vòng while và khi gặp điều kiện thỏa mãn thì thực hiện lệnh vẽ pline. tui còn đang làm dở dang nhưng cũng up lên cho bác hiểu ý tưởng của tui.http://www.cadviet.c..._dau_vaontd.txt http://www.cadviet.c...6914_ketqua.dwg
(defun c:vtn ( / fn fid strht vt x y z)
(defun pos (sub st / l1 l2 index)
(setq index 1
l1 (strlen sub)
l2 (strlen st)
)
(while
(and (<= (+ index l1 -1) l2) (/= sub (substr st index l1)))
(setq index (1+ index))
)
(if (= sub (substr st index l1))
index
nil
)
)
(princ "\neiPoint &#169; 2007 Cadviet.com")
(setq fn (getfiled "Ten tep de nhap toa do x y z"
(getvar "dwgprefix")
"txt"
2
)
fid (open fn "r")
)
(setq i 0)
(setq point (getpoint "\n chon diem ve tn:"))
(command "_UCS" "N" point "")
(setq taphopdiem nil)
(while (setq strht (read-line fid))
(setq strht (strcat strht "\t\t\t\t"))
(if (/= strht " ")
(progn
(setq
vt (pos "\t" strht)
mot (substr strht 1 (1- vt))
strht (substr strht (1+ vt))

vt (pos "\t" strht)
hai (substr strht 1 (1- vt))
strht (substr strht (1+ vt))

vt (pos "\t" strht)
ba (substr strht 1 (1- vt))
strht (substr strht (1+ vt))
vt (pos "\t" strht)
bon (substr strht 1 (1- vt))
strht (substr strht (1+ vt))
)
;(princ (strcat "\t" mot "\t" hai "\t" ba "\t" bon "\n"))
);het progn
); het if
(cond
((= mot "POLE")
(progn
(if (/= taphopdiem nil)
(progn
(command "pline" taphopdiem "")
;(princ taphopdiem)
)
)
(setq
tencon hai
caodo (atof bon)
taphopdiem "\n"
)
(princ (strcat "\n" mot "\t" hai "\t" ba "\t" bon "\n"))
); het progn
)
((or (= mot "TARGETL") (= mot "TARGETR"))
(progn
(setq
kcl (atof hai)
ccao (atof ba)
taphopdiem(strcat (chr 32) hai "," ba taphopdiem)
; taphopdiem (cons pointi taphopdiem)
)
); het progn
)
); Het cond
(setq i (1+ i))

)
(command "_UCS" "w" "")
(close fid)
)
(princ "\neiPoint da duoc nap. su dung 2 lenh: ExpPnt va ImpPnt de xuat va nhap Point")

  • 0

#6 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 10 May 2012 - 08:09 PM

tui dang dùng lisp viết lệnh vẽ trắc ngang. đọc file số liệu ntd. vì list được tạo ra sau nhiều vòng while và khi gặp điều kiện thỏa mãn thì thực hiện lệnh vẽ pline. tui còn đang làm dở dang nhưng cũng up lên cho bác hiểu ý tưởng của tui.http://www.cadviet.c..._dau_vaontd.txt http://www.cadviet.c...6914_ketqua.dwg

Nếu bạn thấy thuận lợi trong việc thay dấu phẩy bằng dấu cách trong cái list đầu tiên thì tôi sẽ viết cho bạn?
  • 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.


#7 dunguss3581

dunguss3581

    biết lệnh rotate

  • Advance Member
  • PipPipPip
  • 139 Bài viết
Điểm đánh giá: 5 (bình thường)

Đã gửi 10 May 2012 - 08:14 PM

Nếu bạn thấy thuận lợi trong việc thay dấu phẩy bằng dấu cách trong cái list đầu tiên thì tôi sẽ viết cho bạn?

ok. anh viết giúp tui đi. điều tui cần là cú pháp làm công việc đó mà.
  • 0

#8 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 10 May 2012 - 08:23 PM

ok. anh viết giúp tui đi. điều tui cần là cú pháp làm công việc đó mà.


(defun C:HA( / z lst)
(setq a (list 7.77200 0.88300 12.22800 -0.14900 -3.15200 0.16800 -1.03500 -0.16900 -4.09600 -0.17100 -7.64400 0.38000 -0.44200 -0.19300 -3.63100 0.27400))
(setq z 0)
(repeat (/ (length a) 2)
(setq lst (cons (list (nth z a) (nth (1+ z) a)) lst))
(setq z (+ z 2)))
(Lwpoly lst)
(princ))
(defun LWPoly (lst)
(entmake (append (list (cons 0 "LWPOLYLINE") (cons 100 "AcDbEntity") (cons 100 "AcDbPolyline") (cons 90 (length lst)))
(mapcar (function (lambda (p) (cons 10 p))) lst))))

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


#9 dunguss3581

dunguss3581

    biết lệnh rotate

  • Advance Member
  • PipPipPip
  • 139 Bài viết
Điểm đánh giá: 5 (bình thường)

Đã gửi 11 May 2012 - 04:33 PM


(defun C:HA( / z lst)
(setq a (list 7.77200 0.88300 12.22800 -0.14900 -3.15200 0.16800 -1.03500 -0.16900 -4.09600 -0.17100 -7.64400 0.38000 -0.44200 -0.19300 -3.63100 0.27400))
(setq z 0)
(repeat (/ (length a) 2)
(setq lst (cons (list (nth z a) (nth (1+ z) a)) lst))
(setq z (+ z 2)))
(Lwpoly lst)
(princ))
(defun LWPoly (lst)
(entmake (append (list (cons 0 "LWPOLYLINE") (cons 100 "AcDbEntity") (cons 100 "AcDbPolyline") (cons 90 (length lst)))
(mapcar (function (lambda (p) (cons 10 p))) lst))))

cam on anh nhe
  • 0