Chuyển đến nội dung
Diễn đàn CADViet

hanam1210

Thành viên
  • Số lượng nội dung

    60
  • Đã tham gia

  • Lần ghé thăm cuối

Bài đăng được đăng bởi hanam1210


  1. hì. Em tìm thì thấy Lisp của anh Tú thì anh ý viết thêm các dòng lệnh load lisp vào file acad2007doc, Nhưng em bắt chước viết cái dòng load lisp của em thì không được, Anh xem chỉnh cho em với !

    (if(findfile "D:/Lisp_all/1_2_3_mee_ee1.lsp")(load "D:/Lisp_all/1_2_3_mee_ee1.lsp")),
    

    dòng lệnh đó đựoc thêm vào file acad2007.doc. Nhưng nó ko load được file đó. hic


  2. Thường mình coppy đoạn code của lsp đó vào phần acad...doc.lsp trong thư mục support. khi mở lên thì nó cũng tư load.

     

    cách đó không ổn, vì có 1 lisp thì có thể làm thế đc. ví dụ 30 cái thì làm thế sẽ hay lỗi ? Em thấy các cao thủ có cách khác sao ý. Giống cái lisp của PHAM_NGOC_Tu chia sẻ trên diễn đàn ý. không bit anh ý làm kiểu gì mà ko cần ap lên mà nó luôn load lên ?


  3. hic. lúc trước em cũng được gợi ý ITOA đó rùi, nhưng không hiểu sao lỗi. E đổi giống bác hướng dẫn nhưng mà bị lỗi ko chạy được ? chẳng hiểu vì sao. Bác xem cho em nhé

    ;; free lisp from cadviet.com
    ;;; this lisp was downloaded from http://www.cadviet.com/forum/index.php?showtopic=27632&pid=175903&st=20entry175903
    ;; free lisp from cadviet.com
    ;;; this lisp was downloaded from http://www.cadviet.com/forum/index.php?showtopic=27632&pid=175482&st=0entry175482
    ;; free lisp from cadviet.com
    ;;; this lisp was downloaded from http://www.cadviet.com/forum/index.php?showtopic=27632&pid=115904&st=0entry115904
    (defun c:noisuy(/ p1 Z1 p2 Z2 p ptg Ztg dis ang Hz m cao oldos a)
    ;;;;copyright by Tue_NV. Contact : tue_nvcc@yahoo.com
     (setq temperr *error*)
     (setq *error* bloi)
     ;;;;;;;;;;;;;;;;;;;
     (setq p1 (getpoint "\n Nhap diem P1 :") L '())
     ;(setq Z1 (getreal "\n Nhap cao do Z1 :"))
    (or *z1* (setq *z1* 10.0))
    (setq z1 (getreal (strcat "\nCao do Z1 <" (rtos *z1* 2) ">: ")))
    (if (not z1) (setq z1 *z1*) (setq *z1* z1))
     (setq p2 (getpoint p1 "\n Nhap diem P2 :"))
    ; (setq Z2 (getreal "\n Nhap cao do Z2 :"))
    (or *z2* (setq *z2* 20.0))
    (setq z2 (getreal (strcat "\nCao do Z2 <" (rtos *z2* 2) ">: ")))
    (if (not z2) (setq z2 *z2*) (setq *z2* z2))
     (setq dis (distance p1 p2)
    ang (angle p1 p2))
     (setq Hz (- Z1 Z2) tana (abs (/ Hz dis)))
    (or *m* (setq *m* 20))
    (setq m (getint (strcat "\nSo phan tu <" (itoa m) ">: ")))
    
    (or cao (setq cao 2)) ; 10 = Khoang cach mac dinh
    (setq cao (cond ((getdist (strcat "\n chieu cao chu:  <" (vl-princ-to-string cao) " > :")))(cao)))
    ; (setq cao (getdist "\n Nhap chieu cao chu :"))  ;
     (Setq oldos (getvar "OSMODE"))
     (SETVAR "OSMODE" 0)
     (Repeat (+ m 2)
     (setq p (polar p1 ang (* i (/ dis (1+ m)))))
     (setq a (distance p p1))
    (if (< Z1 Z2)
    (if (equal (+ (distance p1 p) dis) (distance p p2) 0.000001)   
    (progn (setq Z (+ Z1 (* tana (- a) )))
     (setq L (append L (list (in (rtos Z 2 3) p cao (angle p1 p2)) )))
     )
      (progn (setq Z (+ Z1 (* tana (+ a) )))
      (setq L (append L (list (in (rtos Z 2 3) p cao (angle p1 p2)) )))
     )
    )
    )
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    (if (> Z1 Z2)
    (if (equal (+ (distance p2 p) dis) (distance p p1) 0.000001)   
    (progn (setq Z (+ Z2 (* tana (- a) )))
      (setq L (append L (list (in (rtos Z 2 3) p cao (angle p1 p2)) )))
     )
      (progn (setq Z (+ Z2 (* tana (+ a) )))
      (setq L (append L (list (in (rtos Z 2 3) p cao (angle p1 p2)) )))
     )
    )
    )
    (command "point" p)
    (setq i (1+ i))
     );while
    (COMMAND "LINE" P1 P2 "")
      (if (> (cadr p1) (cadr p2))
    (progn (mapcar '(lambda(x y)
     (vla-put-textstring
    (vla-get-textstring (vlax-ename->vla-object x)) y)
    ) L (reverse L) )))
      (SETVAR "OSMODE" oldos)
     (setq *error* temperr)
    (princ)
    )
    ;;;
    (defun *error* (msg)
    (princ "error: ")
    (princ msg)
    (princ)
    )
    ;;;;;;;;;;;;;;;;
    (defun bloi(errmsg)
    (command "snap" "R" '(0 0 0) 0)
    )
    (defun in(txt p cao ang)
    (while (> ang (/ pi 2))
    (setq  ang (- ang pi))
    )
    (entmakex (list(cons 0 "TEXT") (cons 1 txt) (cons 10 p) (cons 11 p) (cons 40 cao) (cons 50 ang)
     (cons 72 1) (cons 73 1)
     )
    )
    )
    
    

     

    hic. Mà e không hiểu sao cái GETINT mình thay bằng GETREAL không được nhỉ ? e hiểu nôm na thì getreal là tập hợp mẹ của getint mà ? hức !


  4. ghi nhận sự đóng góp của Hoan, CAD 2008 cũng có lệnh đó. Nhưng sau khi đánh lệnh và chọn đối tượng thì các thuộc tính Z vẫn nguyên xi như cũ. Bạn cứ kiểm tra lại xem nhé ! với lại mình chỉ dùng đến CAD 2010 thôi, từ bản 2011 trở nên nặng. và cũng không cải thiện được tính năng gì hơn nên mình không dùng.


  5. E mới check thì rất đúng . Để e dùng một thời gian xem có lỗi j không nhé. Cảm ơn bác nhìu nhìu. Bác thật là Pro, bán 1 ít cái Pro của bác đi ăn cả đời không hết nhỉ ???

    Cái lisp noisuy của a KETXU viết đúng là cái em cần. Em đã thử sửa code để thêm tính năng lưu giá trị cao text và số phần tử của lần nhập trước nhưng không được. Để hoàn thiện hơn thì mình thêm 2 tính năng đó sẽ tiện hơn. Phiền a bổ sung cho anh em dùng ạ ! Cảm ơn anh nhiều !


  6. Hề hề hề,

    Bác ấy đã sửa cho bạn khá nhiều kiểu rùi đó. Nào là chiều dài, nào là hướng, nào là DK.....

    Bạn chỉ cần chịu khó xem kỹ cái bác ấy đã sửa rồi bắt chước bác ấy cày vào chỗ chưa được. Cứ nhá vài lần chắc là sẽ thành công thôi. Với khả năng của bạn mình tin rằng nếu bạn chịu khó ngâm cứu thì ắt hẳn sẽ chả phải chờ lâu để có được cái mình cần. Có thể vài nhát đầu chưa thành công, nhưng bạn hãy cứ làm và post lên cái sự không thành đó để mọi người góp ý cho.

    Cứ vậy chắc sẽ nhanh hơn là việc thay tên đổi họ để chờ giúp đỡ.

    Hề hề hề, vài lời nghịch nhĩ nhưng mong bạn hiểu rằng mọi người chỉ giúp bạn khi bạn thật sự cầu thị, còn nếu cứ ỷ lại thì mọi người cũng sẽ nhanh chán thôi. Tất cả anh em trên diễn đàn đều chả có ai ăn không ngồi rồi để chỉ chờ bạn hỏi rồi giúp cả. Để trả lời và giúp bạn mọi người đều phải nhín chút công việc của mình và vì thế bạn hãy tôn trọng công sức của mọi người bằng cách tự mình hãy cố gắng để hiểu và áp dụng những gì mọi người đã giúp cho dù nó có thể chưa đáp ứng hoàn toàn yêu cầu của bạn. Dù sao đó cũng là những gợi ý để bạn có thể hoàn thành tốt công việc của bạn mà bản thân những người đã giúp bạn chẳng hề vụ lợi trong đó.

    Hãy nhớ rằng việc là của bạn và cho dù chẳng có ai giúp, bạn vẫn phải hoàn thành nó kia mà. Hãy cố gắng tự cứu minh khi còn có thể bạn ạ....

    Hề hề hề.

     

    Cái dòng : ((< ot -7) (setq kc (+ (* (abs ot) hsd) (* 2 (- (fix (/ (abs ot) 5)) 1) ))))

    và dòng : ((> ot 7) (setq kc (+ (* ot 1.5) (* (- (fix (/ ot 5)) 1) 2)))))

    bác DVH viết em thấy đúng mà ko hiểu sao nó chỉ tính được giá trị là : (< ot -7) (setq kc (* (abs ot) hsd))

    và > ot 7) (setq kc (* ot 1.5))

    Điều này quá tầm của em. Mong các anh chỉ giáo !


  7. Vâng, Đúng là (- (fix (/ ot 5)) 1) , do em không biết diễn đạt. Bác ĐVH thông cảm nhé ! hic

    Hic. Anh Hà xem lại giúp em nhé.

    1- Line bị ngược chiều khi A <0 ( ngược chiều P1P2)

    2-Theo yêu cầu chỉnh sửa thì khi TH3: nếu 0=<A< =7, kc= A*1.5

    và TH4: nếuA >7, kc= A*1.5 +( (phần nguyên của A/5 -1 )*2

    Nhưng khi A>7 thì hiện tại lisp vẫn tính kc=A*1.5 ( thiếu ( (phần nguyên của A/5 -1 )*2 ))


  8. @hanam1210 : khó khăn để trình bày quá nhỉ :) ?

    Ngoài ra, dòng này của bạn sai ngay cấu trúc của 1 phép tính thông thường,

     

    Chí ít nó cũng phải có biểu thức gì chứ làm sao máy hiểu ((fix 1 số) 1) là việc gì ???

    Theo ý của bạn đã nói thì nó phải là (- (fix (/ ot 5)) 1)

    và mình thiết nghĩ là nếu bạn chịu khó đọc lại những lời mọi người nói thì đã không tốn thời gian của cả bạn và bác ĐVH đến vậy

    Vâng, Đúng là (- (fix (/ ot 5)) 1) , do em không biết diễn đạt. Bác ĐVH thông cảm nhé ! hic


  9. Chịu, không hiểu nổi bạn!

    Ở trên thì nói chia cho 5, xuống đây nói chia cho 7 ở ý 2. rồi ý 4 thì lại chia cho 5.

    Ở trên nói không có abs, xuống ý 1 nói lấy abs, qua ý 4 lại không có abs.

    Thôi, bạn hãy diễn giải tất cả 6 trường hợp xãy ra bằng công thức toán học đi, chứ cứ trả lời mâu thuẩn nhau kiểu này thì bó tay thôi bạn ạ.

    Hic. Em xin lỗi, cái đầu em post nhầm, em xin đính chính lại như sau :

     

    TH1: nếu A< -7, kc= A*Kđào +( (phần nguyên của A/5) -1 )*2

    TH2: nếu -7 =< A < 0, kc= A*Kđào

    TH3: nếu 0=<A< =7, kc= A*1.5

    TH4: nếuA >7, kc= A*1.5 +( (phần nguyên của A/5 -1 )*2


  10. 1). Cái chuyện abs hay không abs là do bạn nói không rõ.

    2). Chia cho 7 hay chia cho 5 là do đề của bạn chứ tôi không sáng tác ra.

    3). Còn 1 trường hợp ot=0 bạn chưa nói tới.

    4). Lấy (fix (/ ot 5)) rồi trừ đi 1 hay lấy (/ (fix ot) 5) rồi trừ đi 1?

    Tóm lại, bạn không cần sửa lisp mà chỉ cần diễn giải đầy đủ các trường hợp bằng lời và bằng công thức thì tôi mới có thể sửa được.

    Em xin trả lời anh :

    1- Lấy ABS

    2- Chia cho 7

    3- =0 thì ko có line nên ko cần

    4-Lấy (fix (/ ot 5)) rồi trừ đi 1 sau đó nhân với 2 và cộng vào chiều dài line


  11. Đây là lisp viết theo diễn giải, không viết theo lisp bạn ấy post lên (vì mâu thuẩn nhau), chỉ có 1 thắc mắc: cái "A" để tính kc là A hay (abs A) nên tạm lấy (abs A) vậy, nếu không đúng thì sửa lại vậy.
     (defun c:lo (/ kc ot) (setq oldcm (getvar "cmdecho") oldos (getvar "osmode") ) (command "undo" "begin") (if (not (tblsearch "layer" "GRID_TL")) (command "layer" "N" "GRID_TL" "S" "GRID_TL" "color" 3 "" "")) (or *hsd* (setq *hsd* 1.0)) (setq hsd (getreal (strcat "\nHe so dao <" (rtos *hsd* 2) ">: "))) (if (not hsd) (setq hsd *hsd*) (setq *hsd* hsd)) (while (setq p1 (getpoint "\nPick diem 1: ")) (setq p2 (getpoint p1 "\nPick dien 2: ")) (setq ot (read (substr (cdr (assoc 1 (entget (car (entsel "\n Chenh cao: "))))) 1))) (setvar "cmdecho" 0) (setvar "osmode" 0) (cond ((< ot -7) (setq kc (+ (* (abs ot) hsd) (* (fix (/ (abs ot) 7)) 2)))) ((< -7 ot 0) (setq kc (* (abs ot) hsd))) ((< 0 ot 7) (setq kc (* ot 1.5))) ((> ot 7) (setq kc (+ (* ot 1.5) (* (fix (/ ot 5)) 2)))) (T (alert "Chu Thot khong yeu cau!") (exit))) (command "line" p1 (polar p1 (angle p1 p2) kc) "") (setvar "cmdecho" oldcm) (setvar "osmode" oldos)) (command "undo" "end") (princ)) 

     

    Lisp chạy đúng yêu cầu của em ban đầu rồi. Nhưng bi h khi chạy thực tế thì e mới thấy có điều chưa phù hợp, Em tạm chỉnh như sau nhưng nó chưa chạy. Bác chỉnh tiếp theo hướng đó giúp em. ( ở đây bác nhầm 1 chút là lúc thì dùng (* (fix (/ (abs ot) 7)) 2)))), lúc thì (* (( fix (/ ot 5)) 1) 2)))) ==> thống nhất dùng (* (( fix (/ ot 5)) 1) 2))))

    Nhưng ở đây em muốn bớt đi 1 đơn vị của phần nguyên của ot/5, tức là cần cộng thêm vào chiều dài line 1 đoạn = ( (phần nguyên của A)/5 -1 )*2

    (cái phần trừ đi 1 đơn vị e trừ thì nó hiểu thành giá trị âm nên trong code e ko biết trừ thế nào.

    ;; free lisp from cadviet.com
    ;;; this lisp was downloaded from http://www.cadviet.com/forum/index.php?showtopic=56841&pid=173673&st=0entry173673
    (defun c:lo (/ kc ot)
    (setq oldcm (getvar "cmdecho") oldos (getvar "osmode") )
    (command "undo" "begin")
    (if (not (tblsearch "layer" "GRID_TL")) (command "layer" "N" "GRID_TL" "S" "GRID_TL" "color" 3 "" ""))
    (or *hsd* (setq *hsd* 1.0))
    (setq hsd (getreal (strcat "\nHe so dao <" (rtos *hsd* 2) ">: ")))
    (if (not hsd) (setq hsd *hsd*) (setq *hsd* hsd))
    (while (setq p1 (getpoint "\nPick diem 1: "))
     (setq p2 (getpoint p1 "\nPick dien 2: "))
     (setq ot (read (substr (cdr (assoc 1 (entget (car (entsel "\n Chenh cao: "))))) 1)))
     (setvar "cmdecho" 0) (setvar "osmode" 0)
     (cond
      ((< ot -7) (setq kc (+ (* (abs ot) hsd) (* (fix (/ (abs ot) 7)) 2))))
      ((< -7 ot 0) (setq kc (* (abs ot) hsd)))
      ((= ot -7) (setq kc (* (abs ot) hsd)))
      ((< 0 ot 7) (setq kc (* ot 1.5)))
      ((> ot 7) (setq kc (+ (* ot 1.5) (* ((  fix (/ ot 5)) 1) 2))))
      ((= ot 7) (setq kc (+ (* ot 1.5) (* (fix (/ ot 5)) 2))))
     (command "line" p1 (polar p1 (angle p1 p2) kc) "")
     (setvar "cmdecho" oldcm) (setvar "osmode" oldos))
    (command "undo" "end")
    (princ))
    
    


  12. Vâng cảm ơn các anh trên diễn đàn. Thực ra e có biết gì về lisp mấy đâu. E copy đoạn mã ở lisp này lắp sang lisp kia thôi. Anh Doan Van Ha Sửa cho em rồi nhưng mà không đúng như yêu cầu. Qua chạy thử thì chiều dài line sai trong trường hợp -7<A<0,Em không tìm thấy đoạn code so sánh đó đâu nên không biết sửa thế nào. Viết kiểu if kia thì em còn hiểu được, chứ viết kiểu của a thì cao siêu em chịu chết. hức hức. Còn trường hợp A=0 thì ko vẽ, A=7 hay A = -7 thì không có cái đoạn ( phần nguyên của A/5 )*2


  13. Cái lisp này em viết nhằm mục đích vẽ ra 1 line trong các trường hợp riêng phục vụ cho vẽ và tính taluy san nền.

    Cụ thể theo yêu cầu:

    + Lisp lấy giá trị từ text có sẵn ( giá trị là A) và vẽ ra line theo cách pcik điểm P1 và P2 , nó sẽ vẽ ra đoạn P1P2 thuộc layer GRID_TL có màu 3 và chiều dài đoạn P1P2 =kc được tính trong các trường hợp sau:

    TH1: nếu A< -7, kc= A*Kđào +( phần nguyên của A/7 )*2

    TH2: nếu -7 < A < 0, kc= A*Kđào

    TH3: nếu 0<A< 7, kc= A*1.5

    TH4: nếuA >7, kc= A*1.5 +( phần nguyên của A/5 )*2

    D­ưới đây là phần code mà e đã loay hoay viết. Đợt trước nó chạy được. Nhưng đợt này bị lỗi mất trường hợp -7< A <7 không hiểu vì sao. Các anh trên diễn đàn hoàn thiện hoặc viết mới giúp em để nó không bị lỗi nữa ạ. EM xin cảm ơn !

    Hệ số Kđào trong lisp của em viết để mặc định bằng 1, Các anh bổ sung nó giúp em với ạ, K đào do người dùng chỉ cần nhập vào một lần trong cả bản vẽ đó trong mỗi lần mở lên

    .Giống đoạn code này sao ý:

    (if (= Ty_le nil) (progn

    (setq Ty_le (getreal "\n Kđào"))

    (setq He_so (/ 1 Ty_le))

    (setq He_so2 (* He_so He_so))

    )

    )

     

    (defun c:lo (/ kc kc1 ot k1)
    (command "layer" "N" "GRID_TL" "S" "GRID_TL" "color" 3 "" "")
    (repeat 10000
    (setq p1 (getpoint "\n Pick diem: "))
    (setq p2 (getpoint "\n Pick diem: "))
    (setq kc (entget (car (entsel "\n Chenh cao: "))))
    (setq otext (assoc 1 kc))
    (setq ot (cdr otext))
    (setq ot (read (substr ot 1)))
    (setq g (angle p1 p2))
    (if (< ot -7)
    (progn
    (setq KC1 (* (abs ot) 1))
    (setq k1 (* 2 (fix (/ (abs ot) 5))))
    (setq KC1 (+ k1 KC1))
    (setq p3 (polar P1 G KC1))
    (command "line" p1 p3 "")
    )
    )
    (if (and (< ot 0) (> ot -7))
    (progn
    (setq KC1 (* (abs ot) 1))
    (setq k1 (* 2 (fix (/ (abs ot) 5))))
    (setq KC1 (+ k1 KC1))
    (setq p3 (polar P1 G KC1))
    (command "line" p1 p3 "")
    )
    )
    (if (and (> ot 0) (< ot 7))
    (progn
    (setq kc1 (* ot 1.5))
    (setq p3 (polar P1 G KC1))
    (command "line" p1 p3 "")
    )
    )
    (if (> ot 7)
    (progn
    (setq KC1 (* (abs ot) 1))
    (setq k1 (* 2 (fix (/ (abs ot) 5))))
    (setq KC1 (+ k1 KC1))
    (setq p3 (polar P1 G KC1))
    (command "line" p1 p3 "")
    )
    )
    
    (princ)
    )
    
    )
    


  14. (defun c:sn (/ ss tDt tKq dt len hs)
    (defun dxf (code en)(cdr(assoc code (entget en))))
    (defun chdxf (code val en) (entmod (subst (cons code val) (assoc code (entget en)) (entget en))))
    (if
    (and
       	(setq ss (ssget (list (cons 0 "TEXT,MTEXT"))))      
       	(setq tDt (car (entsel "\nText DT :")))
       	(wcmatch (dxf 0 tDt) "TEXT,MTEXT")
       	(setq dt (distof (dxf 1 tDt)))
       	(setq tkQ (car (entsel "\nText kQ :")))
       	(wcmatch (dxf 0 tkQ) "TEXT,MTEXT")
    )
    (progn
    (setq len (sslength ss) hs
       	(cond	((= len 1)3)((= len 2)4)((= len 3)5)((= len 4)4)(T 1))	;gia tri he so
    )  
    (chdxf 1  (rtos (/ (* (apply '+ (mapcar '(lambda(x)(distof (acet-dxf 1 (entget x))))(acet-ss-to-list ss))) dt) hs) 2 2) tkq)
    (chdxf 8 "0" tKq) ;Thay 0 bang Layer khac
    )  
    ))
    

     

    Chuẩn không cần chỉnh. Cảm ơn bác KETXU nhé.hii. Lisp của bác thay cả 4 cái lisp em viết !


  15. Của bạn đây:

    http://www.cadviet.c...inhklsannen.rar

    Bạn giải nén rồi upload 2 file sn.dvb+sn.lsp lên nhé, sau đó sử dụng lệnh SN

     

    Cảm ơn anh REDSE_TQ, lisp chạy đúng yêu cầu nhưng thừa mất cái đơn vị m3, Thực ra là san nền thì em dùng HS rồi. Nhưng mà có nhiều cái bắt buộc phải làm thủ công nên cần lisp để tính ạ. Phiền anh bỏ giúp em cái đơn vị m3 đằng sau đi với ạ. Vì file .DVB nên em chịu ko chỉnh sửa được. Mong anh thông cảm. Chúc anh một ngày tốt lành !


  16. Em hay làm san nền, nhiều khi phải làm hoặc kiểm tra lại thủ công.EM đang rất cần 1 lisp làm được việc như sau:

    - Lisp sẽ lấy giá trị từ các text sẵn có, và xuất kết quả vào 1 text sẵn có ( số chữ số sau dấu phẩy = 2, luôn có số 0 đằng trước dấu phẩy vì nhiều bản vẽ nó bị mất số 0), khi xuất xong kết quả thì text đó được đổi màu thành màu 6, thuộc layer "TINH"

    Khi chạy lisp xảy ra 4 trường hợp như sau ạ :

     

    TH1:

    Command : SN

    chon text: ( 1 text được chọn, giá trị là a, )

    Dien tich: ( chọn vào text diện tích, giá trị là s )

    Ket qua: ( Chọn text chứa kết quả, kết quả = a*s/3)

     

    TH2:

    Command : SN

    chon text: ( 2 text được chọn, giá trị là a,b )

    Dien tich: ( chọn vào text diện tích, giá trị là s )

    Ket qua: ( Chọn text chứa kết quả, kết quả =( a + b ) * s/4)

     

    TH3:

    Command : SN

    chon text: ( 3 text được chọn, giá trị là a,b, c )

    Dien tich: ( chọn vào text diện tích, giá trị là s )

    Ket qua: ( Chọn text chứa kết quả, kết quả =( a + b + c)*s/5)

     

    TH4:

    Command : SN

    chon text: ( 4 text được chọn, giá trị là a,b,c,d )

    Dien tich: ( chọn vào text diện tích, giá trị là s )

    Ket qua: ( Chọn text chứa kết quả, kết quả =( a + b + c +d)*s/4)

     

    Tức là ở đây thì chỉ có 1 lệnh thôi nhưng mà tự động lisp hiểu được các trường hợp xảy ra. Lúc báo Chon text, e chọn 1 text rồi enter thì nó sẽ tình theo trường hợp 1. Rất mong các anh chị trên diễn đàn giúp đỡ . Em xin chân thành cảm ơn.


  17. hức hức ! e bị bác KETXU mắng. Bác nói em mới biết cách chèn CODE vào thẻ CODE đó ạ. Lần sau e sẽ chấp hành đúng nội quy diễn đàn. lần này là e ko bit bác ạ. Còn cái chức năng lưu giá trị cũ kia em copy từ cái lisp bác KETXU viết sang đó ạ. chứ e đâu hiểu đc mà viết ra.Còn cái đường biên kia thì các cao thủ trên diễn đàn có cao kiến nào thì vào xử giúp em với ạ. Chứ thực sự chạy cả mấy lần thì mới đúng đc.Như thế thì mất công quá. hic !


  18. Hề hề hề,

    Tình hình là bạn vẫn không chịu đọc kỹ hay là vẫn không hiểu kỹ cái hướng dẫn sử dụng trước khi sử dụng rồi. Điểm bắt đầu của đường chuẩn là diểm được xác dịnh bởi hàm (vlax-curve-getstartpoint e), tương tự điểm cuối của đường chuẩn là điểm được xác định bởi hàm (vlax-curve-getendpoint e).

    Việc đường kẻ bóng nhấp nho chỉ là do bạn chọn sai mà thôi. Khi đó nếu bạn khôn một tí thì chỉ cần undo và chọn theo trật tự ngược lại là Ok.

    1/- hãy nhập khi lisp hỏi nhập tên lớp là: CADVIET.

    2/- Đã xử lý ở lisp cũ rồi.

    3/- Hãy bổ sung: (if (/= a1 nil) vào trước dòng code (setq a a1) và (setq a 10)) vào sau dòng code (setq a a1) đó.

    4/- Đã xử lý trong lisp cũ rồi.

     

    Hề hề hề, mong rằng bạn hãy cố gắng đọc kỹ những gì mình định post trước khi post yêu cầu nhé.

     

    http://www.cadviet.c...les/3/loi_1.dwg

    Đây là file bản vẽ của bạn mình đã dùng lisp kbg để kẻ bóng. Hoàn toàn không có lỗi như bạn nói.

     

    HIC. Bác Ăn gian, cái điểm N giới hạn thì từ đầu tới h chưa có mà ? hic.Bác có cách nào để nó ổn định hơn ko ? việc chọn đường biên đó rất khó và ko ổn định. mỗi lúc mỗi kiểu và các đường bóng ở gần cuối điểm N hay bị lỗi. BÁc xem hình nhé : http://www.mediafire...ysewzv3aynpzltc

    Và chức năng lưu giá trị cũ..

     

    ;========code
    ;; free lisp from cadviet.com
    ;;; this lisp was downloaded from http://www.cadviet.c...opic=56050&st=0
    (defun c:kbb ( / a k)
    (vl-load-com)
    (command "undo" "be")
    (command "ucs" "w")
    (command "layer" "N" "bong" "S" "bong" "color" 8 "" "")
    (setq e1 (car(entsel "\n Chon goc bien duoi"))
    e2 (car(entsel "\n Chon goc bien tren"))
    e (car (entsel "\n Chon duong ke chuan"))
    )
    (or k (setq k 0.9)) ; 0.9 = he so khoang cach mac dinh
    (setq k (cond ((getdist (strcat "\nhe so khoang cach <" (vl-princ-to-string k) " > :")))(k)))
    (or #inc (setq #inc 1.2))
    (or a (setq a 10)) ; 10 = khoang cach mac dinh
    (setq a (cond ((getdist (strcat "\a0= <" (vl-princ-to-string a) " > :")))(k)))
    (or #inc (setq #inc 1.2))
    (setq
    p (getpoint "\n Chon huong rai duong ke bong")
    dis (distance p (vlax-curve-getClosestPointTo (vlax-ename->vla-object e) p T))
    b 0
    )
    (setq la (getstring "\n Nhap ten layer: "))
    (if (= (tblsearch "layer" la) nil)
    (command "layer" "m" la "c" 8 "" "")
    )
    (setvar "clayer" la)
    (command "change" e "" "p" "la" la "")
    (while (and (< b dis) (> a 0.01))
    (command "offset" a e p "")
    (setq e (entlast)
    a (* k a)
    b (+ b a)
    ;;;;; pd (vlax-curve-getstartpoint e)
    ;;;;;;pc (vlax-curve-getendpoint e)
    )
    (if (setq p1 (acet-geom-intersectwith e e1 0))
    (progn
    (command "break" e (car p1) (vlax-curve-getstartpoint e))
    (setq e (entlast))
    )
    (command "extend" e1 "" (vlax-curve-getstartpoint e) "")
    )
    (if (setq p2 (acet-geom-intersectwith e e2 0))
    (command "break" e (car p2) (vlax-curve-getendpoint e))
    (command "extend" e2 "" (vlax-curve-getendpoint e) "")
    )
    )
    (command "undo" "e")
    (princ)
    )
    

    • Vote tăng 1

  19. Tình hình là lisp chạy ko ổn định bác phamthanhbinh ạ ? khi chạy ở các bản bình đồ( tức là nó phụ thuộc vào định dạng bản vẽ sao ý ) thì lisp thường lỗi ở mục các đường bóng ko fix kín biên( đường dài đường ngắn nhấp nhô)

    Yêu cầu bổ sung chức năng:

    1-Đường bóng thuộc layer CADVIET có màu 8

    2-Lưu các giá trị đã nhập của lần trước

    3-Có gía trị mặc định ban đầu khi ko nhập giá trị mà enter thì tự động chọn =10

    4- Bổ sung điểm N giới hạn phạm vi kẻ đường bóng, ko kẻ đường bóng ngoài phạm vi điểm N ( điểm N thuộc hướng kẻ đường bóng) ( Minh họa trong hình vẽ )

    Dưới đây là file lỗi và yêu cầu cập nhật.

    http://www.mediafire.com/?lwrzao75wx07ml8

    Cảm ơn các anh đã nhiệt tình giúp đỡ !

×