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

[Hỏi] Cùng nhau học LISP

Các bài được khuyến nghị

Đến lúc dùng thử hàm (dtr A) mới biết k có
Converts a value from one unit of measurement to another

(cvunit value from-unit to-unit)

Cái này giờ e mới biết.

Còn dùng hàm con thì e dùng (loadline đối số)..SR bác vì lúc ví dụ e typ thiếu.Càng ngày càng bị sai sót trong cách diễn đạt :(

Đây là trong nhiệm vụ cụ thể e đặt ra lúc lập topic,giờ đang làm đến phần dim cạnh thì tắt lịm :( Thao tác dim sau khi kick 2 đầu mút tìphải kick điểm thứ 3 đặt điểm nằm của chân dim.Nhưng e không biết dùng như thế nào để thể hiện việc ấy.(cụ thể là trong dòng ;1,;2 bên dưới ạ).Em đang nghĩ đến việc dim với object,nhưng HCN của e là pl,không biết có đưuọc không nữa.Mong mọi người giúp đỡ

(defun C:dvc (/ GOC1 dx dy temp-1 temp-2 GOC2 TRUC1 TRUC2 TRUC3 TRUC4 TAM temp3 temp4)
  
;;;;;;Khoi Tao cac layer can thiet
(loadLinetype (vla-get-activedocument (vlax-get-acad-object)) "center2" "acad.lin");load linetype center2
(taolayer "KCVN-CAT" "30" "0.3" "Continuous");Chuyen layer Cat ve cot
(taolayer "KCVN-HATCH" "251" "0.09" "Continuous")
(taolayer "KCVN-TRUC" "251" "0.15" "center2")

;;dinh nghia ham doi do ra radian
(defun DTR (A) (* pi (/ A 180.0)))
;;;;;;;Gan bien
(setq dx     (getdist "\nChieu dai canh theo truc x: ")
    dy     (getdist "\nChieu dai canh theo theo truc y: ")
GOC1 (getpoint "\nDiem dat.: ");Lay diem goc trai ben duoi HCN
    GOC2     (list (+ (car GOC1) dx) (+ (cadr GOC1) dy) 0);Gan diem goc phai tren cung HCN
GOC3 (list (+(car GOC1) dx) (cadr GOC1) 0)
    TAM     (list (+ (car GOC1) (/ dx 2)) (+ (cadr GOC1) (/ dy 2)) 0);Tam HCN
TRUC1  (list (-(car GOC1) 100 ) (+(cadr GOC1) (/ dy 2)) 0);Dau mut center line
TRUC2  (LIST (+(car GOC1) dx 100) (+(cadr GOC1) (/ dy 2)) 0);Dau mut center line
dtemp   (list (+ (car GOC1) (/ dx 2) 1) (+ (cadr GOC1) (/ dy 2) 1) 0);diem lay goc 45
    )


(setvar "clayer" "KCVN-CAT");Chuyen ve layer CAT
   (vl-cmdf "._RECTANGLE" "_non" GOC1 "D" dx dy "_non" GOC2);Ve HCN
   (setq temp3 (entlast));2 Lay bien HCN
(setvar "clayer" "KCVN-HATCH");Chuyen ve layer hatch
   (vl-cmdf "hatch" "ansi31" "15" "" temp3 "");hatch
   (setq temp4 (entlast));4 Lay bien net hatch
(setvar "clayer" "KCVN-TRUC");Chuyen ve layer TRUC
  (command "._line" TRUC1 TRUC2 "")
  (setq temp5 (entlast)); Lay net truc
  (command "._mirror" temp5 "" TAM dtemp "" "N")
  (setq temp6 (entlast)); Lay net truc
(setq dtemp1 (polar GOC3 (dtr 90) 5)));;----------1 Lay diem keo chan dim
(command "._dimlinear" GOC1 GOC3 dtemp1);;------2 kick lan luot 3 diem trong thao tac dim
(setq temp7 (entlast)); Lay net DIM
 (vl-cmdf  "_.copy" temp3 temp4 temp5 temp6 temp7"" "m" TAM pause);5
);End main defun


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;Tao layer neu chua co;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun Taolayer(layr_name color lw lt / tbl t1 t2 key)
(setvar "Cmdecho" 0)
  (setq tbl(tblnext "LAYER" 1));khoi tao bien
  (while tbl
  (setq t1(strcase layr_name) t2 (cdr(car(cdr tbl))) )
  (if (equal t1 t2) (setq key 1));kiem tra ten layer co ton tai
  (setq tbl(tblnext "LAYER"))
  )  
  (if(/= key 1)
  (progn (setq tbl NIL );giai phong bien
	 (command "_.LAYER" "N" layr_name "C" color layr_name "LW" lw layr_name "L" lt layr_name "" )
		   )
  )
  (setq layr_name NIL);giai phong bien
  (princ)
);end sub defun

;;;;;;;;;;;;;;;;;;;;;;;;;Kiem tra va load linetype,code by Jimmy
;;; (loadLinetype (vla-get-activedocument (vlax-get-acad-object)) "Divide" "acadiso.lin")
;;; returns: T if loaded else nil
(defun loadLinetype (doc LineTypeName FileName)
 (if (and
	(not (existLinetype doc LineTypeName))
	(vl-catch-all-error-p
	  (vl-catch-all-apply
		'vla-load
		(list
		  (vla-get-Linetypes doc)
		  LineTypeName
		  FileName
		)
	  )
	)
  )
nil
T
 )
)

;;; (existLinetype (vla-get-activedocument (vlax-get-acad-object)) "Divide")
(defun existLinetype (doc LineTypeName / item loaded)
 (vlax-for item (vla-get-linetypes doc)
(if (= (strcase (vla-get-name item)) (strcase LineTypeName))
  (setq loaded T)
)
 )
);end sub defun

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
.................

Sao không sử dụng?

(cvunit 180 "degree" "radian")

...........

Tại sao " Trời đã sinh ra Du sao còn sinh ra Lượng" ?

Câu trả lời :

(defun c:test(/ buoc goc time)

 (setq goc 180
buoc 100000)
 (princ (strcat  "\nSo sanh toc do khi chay " (itoa buoc) " lan."))
 (princ "\nDang thuc hien. Vui long doi ... ")

 (setq time (getvar "MILLISECS"))
 (repeat buoc
   (* pi (/ goc 180.0))    )    
 (setq time (/ (- (getvar "MILLISECS") time) 1000.0))
 (princ (strcat "\nThoi gian thuc hien (giay) :" (rtos time)))


 (setq time (getvar "MILLISECS"))
 (repeat buoc
   (cvunit goc "degree" "radian")    )    
 (setq time (/ (- (getvar "MILLISECS") time) 1000.0))
 (princ (strcat "\nThoi gian thuc hien (giay) :" (rtos time)))

 (princ )
)

  • Vote tăng 3

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
(cụ thể là trong dòng ;1,;2 bên dưới ạ)

(defun C:dvc (/ GOC1 dx dy temp-1 temp-2 GOC2 TRUC1 TRUC2 TRUC3 TRUC4 TAM temp3 temp4)
  (setq dtemp1 (polar GOC3 (dtr 90) 5)));;----------1 Lay diem keo chan dim

Dòng này dư một)

thay gì phài dùng hàm DTR tại sao không sử dụng trực tiếp đơn vị RADIAN trong các trường hợp 0.0 0.5pi pi 1.5pi ...

(setq dtemp1 (polar GOC3 (* 0.5 pi) 5))

Càng ngày càng bị sai sót trong cách diễn đạt

4 ngày post hơn 100 bài thì sai sót cũng bình thường

"Làm nhiều sai nhiều làm ít thì sai ít" :(

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Tại sao " Trời đã sinh ra Du sao còn sinh ra Lượng" ?

Câu trả lời :

(defun c:test(/ buoc goc time)

 (setq goc 180
buoc 100000)
 (princ (strcat  "\nSo sanh toc do khi chay " (itoa buoc) " lan."))
 (princ "\nDang thuc hien. Vui long doi ... ")

 (setq time (getvar "MILLISECS"))
 (repeat buoc
   (* pi (/ goc 180.0))    )    
 (setq time (/ (- (getvar "MILLISECS") time) 1000.0))
 (princ (strcat "\nThoi gian thuc hien (giay) :" (rtos time)))
 (setq time (getvar "MILLISECS"))
 (repeat buoc
   (cvunit goc "degree" "radian")    )    
 (setq time (/ (- (getvar "MILLISECS") time) 1000.0))
 (princ (strcat "\nThoi gian thuc hien (giay) :" (rtos time)))

 (princ )
)

Bác trả lời thuyết phục quá..Phải dùng cái này như lá bùa mới được.^^ Như em mới chỉ dừng ở mức "làm sao đạt đc mục đích",chứ chưa cải thiện được việc "một cách tối ưu"..Tks bác ^^

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Dòng này dư một)

thay gì phài dùng hàm DTR tại sao không sử dụng trực tiếp đơn vị RADIAN trong các trường hợp 0.0 0.5pi pi 1.5pi ...

(setq dtemp1 (polar GOC3 (* 0.5 pi) 5))

 

4 ngày post hơn 100 bài thì sai sót cũng bình thường

"Làm nhiều sai nhiều làm ít thì sai ít" :(

 

Trời ơi đất hỡi.Hic..Sai cơ bản.Tự kiểm điểm và khiển trách :( Cám ơn bác đã tìm giúp e.Có lẽ phải chuyển qua dùng N++ thôi,trình còi mà dùng Notepad,thi thoảng ngồi đếm dấu ngoặc đóng,mở cũng vẫn sai ^^

À,vì hàm (dtr) e còn dùng ở nhiều chỗ khác,đằng nào cũng load,nên vào code cũng dùng,nhìn cho nó "có vẻ" pro ^^.Chứ trường hợp này đúng là chỉ cần / pi 2 là đc ^^.lại sai ^^

 

PS : sao code bài trên e post lên nó lại dài thồ lồ như vậy nhỉ,sao nó không cuộn cuộn trong cửa sổ như mọi khi nhỉ ^^

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Trời ơi đất hỡi.Hic..Sai cơ bản.Tự kiểm điểm và khiển trách :( Cám ơn bác đã tìm giúp e.Có lẽ phải chuyển qua dùng N++ thôi,trình còi mà dùng Notepad,thi thoảng ngồi đếm dấu ngoặc đóng,mở cũng vẫn sai ^^

À,vì hàm (dtr) e còn dùng ở nhiều chỗ khác,đằng nào cũng load,nên vào code cũng dùng,nhìn cho nó "có vẻ" pro ^^.Chứ trường hợp này đúng là chỉ cần / pi 2 là đc ^^.lại sai ^^

 

PS : sao code bài trên e post lên nó lại dài thồ lồ như vậy nhỉ,sao nó không cuộn cuộn trong cửa sổ như mọi khi nhỉ ^^

Nhắc bạn (/ pi 2) =90 độ. Code dài là đúng rồi bạn phải dùng "codebox" thay vì "code"

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Các bác cho e hỏi nhanh hàm trả từ số về string và hàm ghép 2 string với ^^.Chẳng là sau khi người dùng nhập tỉ lệ,em vừa muốn dùng số đấy để làm đối số cho hàm tạo dim với dimlfac = tile,vừa muốn tạo tên Dim là D-tile ^^

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Các bác cho e hỏi nhanh hàm trả từ số về string và hàm ghép 2 string với ^^.Chẳng là sau khi người dùng nhập tỉ lệ,em vừa muốn dùng số đấy để làm đối số cho hàm tạo dim với dimlfac = tile,vừa muốn tạo tên Dim là D-tile ^^

Hè hề hề,

Hàm trả giá trị số thành chuỗi là (rtos number mode prec) trong đó mode là kiểu thể hiện tỷ như scientific, architechtural.... , prec là độ chính xác sử dụng

Hàm ghép hai chuỗi là (strcat str1 str2....)

Hề hề hề

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Các bác cho e hỏi nhanh hàm trả từ số về string và hàm ghép 2 string với ^^.Chẳng là sau khi người dùng nhập tỉ lệ,em vừa muốn dùng số đấy để làm đối số cho hàm tạo dim với dimlfac = tile,vừa muốn tạo tên Dim là D-tile ^^

hàm:

Converts a number into a string

(rtos number [mode [precision]])

The rtos function returns a string that is the representation of number according to the settings of mode, precision, and the system variables UNITMODE, DIMZIN, LUNITS, and LUPREC.

---------------------------------------------

Converts a string into a real number

(atof string)

----------------------------------------------

Converts a string that represents a real (floating-point) value into a real value

(distof string [mode])

The distof and rtos functions are complementary. If you pass distof a string created by rtos, distof is guaranteed to return a valid value, and vice versa (assuming the mode values are the same).

------------------------------------------------

Converts a string into an integer

(atoi string)

----------------------------------------------

Returns the conversion of an integer into a string

(itoa int)

---------------------------------------------------------------

Returns the conversion of a number into a real number

(float number)

---------------------------------------------------------------------

Returns a string that is the concatenation of multiple strings

(strcat [string[string]...])

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Hì.E cảm ơn 2 bác.E sẽ xúc tiến ngay ^^

Cho e hỏi 1 câu hơi dài là : e đang test 2 hàm tạo dimstyle trên mạng này,nhưng chưa được.Không hiểu là hàm có vấn đề hay lại như lần trước,"cách sử dụng của em sai".

Cái thứ nhất :

(defun vcurvedim (vcurvescale / dstylename)      
     (command "-style" "KCVN-COM" "VNSIMLI.shx" 0 1 0 "" "" "")
     (setvar "DIMADEC" 0)        ;Angular decimal places
     (command "DIMALT" "Off")        ;Alternate units selected
     (setvar "DIMALTD" 3)        ;Alternate unit decimal places
     (setvar "DIMALTF" 0.0394)    ;Alternate unit scale factor
     (setvar "DIMALTRND" 0.0000)    ;Alternate units rounding value
     (setvar "DIMALTTD" 3)        ;Alternate tolerance decimal places
     (setvar "DIMALTTZ" 0)        ;Alternate tolerance zero suppression
     (setvar "DIMALTU" 2)        ;Alternate units
     (setvar "DIMALTZ" 0)        ;Alternate unit zero suppression
     (setvar "DIMAPOST" "")        ;Prefix and suffix for alternate text
     (setvar "DIMARCSYM" 0)        ;Arc length symbol
     (setvar "DIMASZ" 0.8500)        ;Arrow size
     (setvar "DIMATFIT" 3)        ;Arrow and text fit
     (setvar "DIMAUNIT" 0)        ;Angular unit format
     (setvar "DIMAZIN" 0)        ;Angular zero supression
     (setvar "DIMBLK" "ClosedFilled")    ;Arrow block name
     (command "DIMBLK1" "ArchTick")        ;First arrow block name
     (command "DIMBLK2" "ArchTick")        ;Second arrow block name
     (setvar "DIMCEN" 1.8000)        ;Center mark size
     (setvar "DIMCLRD" BYLAYER)        ;Dimension line and leader color
     (setvar "DIMCLRE" BYLAYER)        ;Extension line color
     (setvar "DIMCLRT" 60)        ;Dimension text color
     (setvar "DIMDEC" 0)        ;Decimal places
     (setvar "DIMDLE" 0.0000)        ;Dimension line extension
     (setvar "DIMDLI" 0.0000)        ;Dimension line spacing
     (setvar "DIMDSEP" ".")        ;Decimal separator
     (setvar "DIMEXE" 0.9000)        ;Extension above dimension line
     (setvar "DIMEXO" 0.0000)        ;Extension line origin offset
     (setvar "DIMFRAC" 0)        ;Fraction format
     (setvar "DIMFXL" 1.2500)        ;Fixed Extension Line
     (command "DIMFXLON" "Off")    ;Enable Fixed Extension Line


   (setvar "DIMGAP" 0.6600)    ;Gap from dimension line to text

     (command "DIMJOGANG" 45)        ;Radius dimension jog angle
     (setvar "DIMJUST" 0)        ;Justification of text on dimension line
     (command "DIMLDRBLK" "ClosedFilled")        ;Leader block name
     (setvar "DIMLFAC" vcurvescale)    ;----------------------Note -- Linear unit scale factor
     (command "DIMLIM" "Off")        ;Generate dimension limits
     (command "DIMLTEX1" "BYBLOCK")        ;Linetype extension line 1
     (command "DIMLTEX2" "BYBLOCK")        ;Linetype extension line 2
     (command "DIMLTYPE" "BYBLOCK")        ;Dimension linetype
     (setvar "DIMLUNIT" 2)        ;Linear unit format
     (setvar "DIMLWD" -2)        ;Dimension line and leader lineweight
     (setvar "DIMLWE" -2)        ;Extension line lineweight
     (setvar "DIMPOST" "'")        ;Prefix and suffix for dimension text
     (setvar "DIMRND" 0.0000)        ;Rounding value
     (command "DIMSAH" "On")        ;Separate arrow blocks
     (setvar "DIMSCALE" 1.0000)    ;Overall scale factor
     (command "DIMSD1" "Off")        ;Suppress the first dimension line
     (command "DIMSD2" "Off")        ;Suppress the second dimension line
     (command "DIMSE1" "Off")        ;Suppress the first extension line
     (command "DIMSE2" "Off")        ;Suppress the second extension line
     (command "DIMSOXD" "Off")        ;Suppress outside dimension lines
     (setvar "DIMTAD" 1)        ;Place text above the dimension line
     (setvar "DIMTDEC" 0)        ;Tolerance decimal places
     (setvar "DIMTFAC" 1.0000)        ;Tolerance text height scaling factor
     (setvar "DIMTFILL" 1)        ;Text background enabled
     (setvar "DIMTFILLCLR" "BYBLOCK")        ;Text background color
     (command "DIMTIH" "Off")        ;Text inside extensions is horizontal
     (command "DIMTIX" "On")        ;Place text inside extensions
     (setvar "DIMTM" 0.0000)        ;Minus tolerance
     (setvar "DIMTMOVE" 2)        ;Text movement
     (command "DIMTOFL" "On")        ;Force line inside extension lines
     (command "DIMTOH" "Off")        ;Text outside horizontal
     (command "DIMTOL" "Off")        ;Tolerance dimensioning
     (setvar "DIMTOLJ" 1)        ;Tolerance vertical justification
     (setvar "DIMTP" 0.0000)        ;Plus tolerance
     (setvar "DIMTSZ" 0.0000)        ;Tick size
     (setvar "DIMTVP" 0.0000)        ;Text vertical position
     (setvar "DIMTXSTY" "KCVN-COMM")        ;Text style
     (setvar "DIMTXT" 1.8000)    ;Text height
     (setvar "DIMTZIN" 0)        ;Tolerance zero suppression
     (command "DIMUPT" "Off")        ;User positioned text
     (setvar "DIMZIN" 8)        ;Zero suppression


   (setq dstylename "ENGLISHVC")

     (command "dimstyle"
          "save"
          dstylename
     ) ;_ end of command
   ) ;_ end of defun

Lúc dùng thì em dùng ntnày

; DimStyle Create
;
(defun DSTYLE_DIMSTYLE_CREATE (DSTY$ DSCL# AH$ FSTY$)
 (if (null (tblsearch "dimstyle" DSTY$))
   (progn
     (entmake
       (list
  (cons 0 "DIMSTYLE")                                           ; Entity Type
  (cons 100 "AcDbSymbolTableRecord")                            ; Subclass marker
  (cons 100 "AcDbDimStyleTableRecord")                          ; Subclass marker
  (cons 2 DSTY$)                                                ; Dimstyle name
  (cons 70 0)                                                   ; Standard flag value
  (cons 3 "")                                                   ; DIMPOST
  (cons 4 "")                                                   ; DIMAPOST
  (cons 5  AH$)                                                 ; DIMBLK
  (cons 6  AH$)                                                 ; DIMBLK1
  (cons 7  AH$)                                                 ; DIMBLK2
  (cons 40 DSCL#)                                               ; DIMSCALE
  (cons 41 0.0937)                                              ; DIMASZ
  (cons 42 0.0937)                                              ; DIMEXO
  (cons 43 0.38)                                                ; DIMDLI
  (cons 44 0.0625)                                              ; DIMEXE
  (cons 45 0.0)                                                 ; DIMRND
  (cons 46 0.0625)                                              ; DIMDLE
  (cons 47 0.0)                                                 ; DIMTP
  (cons 48 0.0)                                                 ; DIMTM
  (cons 140 0.0937)                                             ; DIMTXT
  (cons 141 0.09)                                               ; DIMCEN
  (cons 142 0.0)                                                ; DIMTSZ
  (cons 143 25.4)                                               ; DIMALTF
  (cons 144 1.0)                                                ; DIMLFAC
  (cons 145 0.0)                                                ; DIMTVP
  (cons 146 1.0)                                                ; DIMTFAC
  (cons 147 0.0625)                                             ; DIMGAP
  (cons 71 0)                                                   ; DIMTOL
  (cons 72 0)                                                   ; DIMLIM
  (cons 73 0)                                                   ; DIMTIH
  (cons 74 0)                                                   ; DIMTOH
  (cons 75 0)                                                   ; DIMSE1
  (cons 76 0)                                                   ; DIMSE2
  (cons 77 0)                                                   ; DIMTAD
  (cons 78 3)                                                   ; DIMZIM
  (cons 170 0)                                                  ; DIMALT
  (cons 171 2)                                                  ; DIMALTD
  (cons 172 0)                                                  ; DIMTOFL
  (cons 173 0)                                                  ; DIMSAH
  (cons 174 0)                                                  ; DIMTIX
  (cons 175 0)                                                  ; DIMSOXD
  (cons 176 1)                                                  ; DIMCLRD
  (cons 177 1)                                                  ; DIMCLRE
  (cons 178 2)                                                  ; DIMCRRT
  (cons 270 4)                                                  ; DIMUNIT
  (cons 271 4)                                                  ; DIMDEC
  (cons 272 4)                                                  ; DIMTDEC
  (cons 273 2)                                                  ; DIMALTU
  (cons 274 2)                                                  ; DIMALTTD
  (cons 275 0)                                                  ; DIMAUNIT
  (cons 276 2)                                                  ; DIMFRAC
  (cons 277 4)                                                  ; DIMLUNIT
  (cons 279 2)                                                  ; DIMTMOVE
  (cons 280 0)                                                  ; DIMJUST
  (cons 281 0)                                                  ; DIMSD1
  (cons 282 0)                                                  ; DIMSD2
  (cons 283 1)                                                  ; DIMTOLJ
  (cons 284 0)                                                  ; DIMTZIN
  (cons 285 0)                                                  ; DIMALTZ
  (cons 286 0)                                                  ; DIMALTTZ
  (cons 287 5)                                                  ; DIMFIT
  (cons 288 0)                                                  ; DIMUPT
  (cons 340 (tblobjname "style" FSTY$))                         ; DIMTXSTY 
  (cons 342 (cdr (assoc 330 (entget (tblobjname "block" AH$))))); DIMLDRBLK
  (cons 343 (cdr (assoc 330 (entget (tblobjname "block" AH$))))); DIMLDRBLK1
  (cons 344 (cdr (assoc 330 (entget (tblobjname "block" AH$))))); DIMLDRBLK2
       )
     )
   )
 )
 (command "._-dimstyle" "_restore" DSTY$)                              ; Set dimstyle current
 (alert (strcat "\nThe current DimStyle name is "DSTY$"."
                "\nThe current DimScale set to "(rtos DSCL# 2 0)"."))
)
;
;;;/////////////////////////////////////////////////////////

Đến lúc dùng thì :

(defun c:taodim()
(DSTYLE_DIMSTYLE_CREATE "DIM" 1 "." "text")
)

cũng hỏng.Lần này chắc do e k hiểu cách gán đối số.Vì cơ bản e cũng không hiểu $,# là cái j...

Chắc chắn là e sai nhưng đầu óc đang bấn loạn,không tìm đc chỗ sai :( Tạo dimstyle rườm rà quá,nên e định thôi thì dùng template.Nhưng mà ấm ức quá,k chịu đc :)(.Code dài,các bác chịu khó cop về test hàm hộ e với nhé :((

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Cái thứ nhất :

(defun vcurvedim (vcurvescale / dstylename)      
     ....
   (setq dstylename "ENGLISHVC")
     (command "dimstyle"           "save"           dstylename      ) ;_ end of command
   ) ;_ end of defun

Hàm vcurvedim có một đối số vcurvescale.

Lúc dùng thì em dùng ntnày

(defun dimstyle-vidu (/ dimstyle oldvars)
 (setq dimstyle (getvar "dimstyle"))
 (or (tblsearch "dimstyle" "vidu ")
     (progn (setq oldvars (mapcar 'getvar '("cmdecho" "textstyle")))
            (setvar "cmdecho" 0)
            (or (tblsearch "STYLE" "vidu ") (command "-style" "vidu " "cour.ttf" "0.0" "0.8" "0" "No" "No"))
            (mapcar 'setvar '("cmdecho" "textstyle") oldvars)
            (setvar "dimaltd" 2) ;_alt precision
            (setvar "dimapost" "") ;_alt prefix and suffix 
            (setvar "dimaltrnd" 0.0000) ;_alt roundoff
            (setvar "dimaltf" 25.4000) ;_alt scale factor
            (setvar "dimalttd" 2) ;_alt tol precision
            (setvar "dimalttz" 0) ;_alt tol zeroes
            (setvar "dimaltu" 2) ;_alt units
            (setvar "dimaltz" 0) ;_alt zeroes
            (setvar "dimalt" 0) ;_alternate units (on/off)
            (setvar "dimaunit" 0) ;_angle format
            (setvar "dimadec" 0) ;_angle precision
            (setvar "dimazin" 1) ;_angle zero supression
            (setvar "dimarcsym" 0) ;_arc len symbol
            (setvar "dimblk" ".") ;_arrow
            (setvar "dimblk1" ".") ;_arrow 1
            (setvar "dimblk2" ".") ;_arrow 2
            (setvar "dimasz" 0.1) ;_arrow size
            (setvar "dimcen" 0.0900) ;_center mark size
            (setvar "dimdsep" ".") ;_decimal separator
            (setvar "dimclrd" 1) ;_dim line color
            (setvar "dimdle" 0.0000) ;_dim line ext
            (setvar "dimtofl" 1) ;_dim line forced (on/off)
            (setvar "dimltype" "byblock") ;_dim line linetype
            (setvar "dimlwd" -2) ;_dim line lineweight
            (setvar "dimdli" 0.0000) ;_dim line spacing
            (setvar "dimltex1" "byblock") ;_ext line 1 linetype
            (setvar "dimltex2" "byblock") ;_ext line 2 linetype
            (setvar "dimclre" 1) ;_ext line color
            (setvar "dimexe" 0.0100) ;_ext line extension
            (setvar "dimlwe" -2) ;_ext line lineweight
            (setvar "dimexo" 0.0500) ;_ext line offset
            (setvar "dimatfit" 3) ;_fit: arrow and text
            (setvar "dimtmove" 2) ;_fit: text movement
            (setvar "dimfxlon" 0) ;_fixed ext line enabled (on/off)
            (setvar "dimfxl" 0.0100) ;_fixed ext line length
            (setvar "dimfrac" 0) ;_fraction format
            (setvar "dimjogang" (/ (* 90 pi) 180)) ;_large rad dim jog angle
            (setvar "dimldrblk" ".") ;_leader arrow
            (setvar "dimlfac" 100.0000) ;_length scale
            (setvar "dimlunit" 2) ;_length units
            (setvar "dimsd1" 0) ;_no dim line 1 (on/off)
            (setvar "dimsd2" 0) ;_no dim line 2 (on/off)
            (setvar "dimsoxd" 0) ;_no dim lines outside (on/off)
            (setvar "dimse1" 0) ;_no ext line 1 (on/off)
            (setvar "dimse2" 0) ;_no ext line 2 (on/off)
            (setvar "dimscale" 0.0000) ;_overall scale
            (setvar "dimdec" 1) ;_precision
            (setvar "dimrnd" 0.0000) ;_roundoff
            (setvar "dimsah" 1) ;_separate arrows (on/off)
            (setvar "dimtfillclr" 0) ;_text background color
            (setvar "dimtfill" 0) ;_text background enabled
            (setvar "dimclrt" 256) ;_text color
            (setvar "dimtxt" 0.05) ;_text height
            (setvar "dimtix" 1) ;_text inside (on/off)
            (setvar "dimtih" 0) ;_text inside align (on/off)
            (setvar "dimgap" 0.0500) ;_text offset
            (setvar "dimtoh" 0) ;_text outside align (on/off)
            (setvar "dimjust" 0) ;_text pos hor
            (setvar "dimtad" 0) ;_text pos vert
            (setvar "dimpost" "") ;_text prefix and suffix
            (setvar "dimtxsty" "vidu") ;_text style
            (setvar "dimtm" 0.0000) ;_tol dev lower
            (setvar "dimtp" 0.0000) ;_tol dev upper
            (setvar "dimtol" 0) ;_tol deviation (on/off)
            (setvar "dimlim" 0) ;_tol limits (on/off)
            (setvar "dimtolj" 1) ;_tol pos vert
            (setvar "dimtdec" 1) ;_tol precision
            (setvar "dimtfac" 1.0000) ;_tol text scale factor
            (setvar "dimtzin" 8) ;_tol zero suppression
            (setvar "dimzin" 8) ;_zero suppression
            (command ".-dimstyle" "Save" "vidu ")
     ) ;_ end progn
 ) ;_ end or
 (command ".-dimstyle" "Restore" dimstyle)
) ;_ end defun

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Hàm vcurvedim có một đối số vcurvescale.

 

thi cung binh thuong thoi

(command "tenbien" "On") nếu có thể thì bạn nên thay bằng (setvar "tenbien" 1)

(command "tenbien" "Off") nếu có thể thì bạn nên thay bằng (setvar "tenbien" 0)

Nếu không có gì đặc biệt thì bỏ (setq dstylename "ENGLISHVC")

(command "dimstyle" "save" dstylename) -> (command "dimstyle" "save" "ENGLISHVC")

bạn tham khảo cái này nhé

(defun dimstyle-vidu (/ dimstyle oldvars)
 (setq dimstyle (getvar "dimstyle"))
 (or (tblsearch "dimstyle" "vidu ")
     (progn (setq oldvars (mapcar 'getvar '("cmdecho" "textstyle")))
            (setvar "cmdecho" 0)
            (or (tblsearch "STYLE" "vidu ") (command "-style" "vidu " "cour.ttf" "0.0" "0.8" "0" "No" "No"))
            (mapcar 'setvar '("cmdecho" "textstyle") oldvars)
            (setvar "dimaltd" 2) ;_alt precision
            (setvar "dimapost" "") ;_alt prefix and suffix 
            (setvar "dimaltrnd" 0.0000) ;_alt roundoff
            (setvar "dimaltf" 25.4000) ;_alt scale factor
            (setvar "dimalttd" 2) ;_alt tol precision
            (setvar "dimalttz" 0) ;_alt tol zeroes
            (setvar "dimaltu" 2) ;_alt units
            (setvar "dimaltz" 0) ;_alt zeroes
            (setvar "dimalt" 0) ;_alternate units (on/off)
            (setvar "dimaunit" 0) ;_angle format
            (setvar "dimadec" 0) ;_angle precision
            (setvar "dimazin" 1) ;_angle zero supression
            (setvar "dimarcsym" 0) ;_arc len symbol
            (setvar "dimblk" ".") ;_arrow
            (setvar "dimblk1" ".") ;_arrow 1
            (setvar "dimblk2" ".") ;_arrow 2
            (setvar "dimasz" 0.1) ;_arrow size
            (setvar "dimcen" 0.0900) ;_center mark size
            (setvar "dimdsep" ".") ;_decimal separator
            (setvar "dimclrd" 1) ;_dim line color
            (setvar "dimdle" 0.0000) ;_dim line ext
            (setvar "dimtofl" 1) ;_dim line forced (on/off)
            (setvar "dimltype" "byblock") ;_dim line linetype
            (setvar "dimlwd" -2) ;_dim line lineweight
            (setvar "dimdli" 0.0000) ;_dim line spacing
            (setvar "dimltex1" "byblock") ;_ext line 1 linetype
            (setvar "dimltex2" "byblock") ;_ext line 2 linetype
            (setvar "dimclre" 1) ;_ext line color
            (setvar "dimexe" 0.0100) ;_ext line extension
            (setvar "dimlwe" -2) ;_ext line lineweight
            (setvar "dimexo" 0.0500) ;_ext line offset
            (setvar "dimatfit" 3) ;_fit: arrow and text
            (setvar "dimtmove" 2) ;_fit: text movement
            (setvar "dimfxlon" 0) ;_fixed ext line enabled (on/off)
            (setvar "dimfxl" 0.0100) ;_fixed ext line length
            (setvar "dimfrac" 0) ;_fraction format
            (setvar "dimjogang" (/ (* 90 pi) 180)) ;_large rad dim jog angle
            (setvar "dimldrblk" ".") ;_leader arrow
            (setvar "dimlfac" 100.0000) ;_length scale
            (setvar "dimlunit" 2) ;_length units
            (setvar "dimsd1" 0) ;_no dim line 1 (on/off)
            (setvar "dimsd2" 0) ;_no dim line 2 (on/off)
            (setvar "dimsoxd" 0) ;_no dim lines outside (on/off)
            (setvar "dimse1" 0) ;_no ext line 1 (on/off)
            (setvar "dimse2" 0) ;_no ext line 2 (on/off)
            (setvar "dimscale" 0.0000) ;_overall scale
            (setvar "dimdec" 1) ;_precision
            (setvar "dimrnd" 0.0000) ;_roundoff
            (setvar "dimsah" 1) ;_separate arrows (on/off)
            (setvar "dimtfillclr" 0) ;_text background color
            (setvar "dimtfill" 0) ;_text background enabled
            (setvar "dimclrt" 256) ;_text color
            (setvar "dimtxt" 0.05) ;_text height
            (setvar "dimtix" 1) ;_text inside (on/off)
            (setvar "dimtih" 0) ;_text inside align (on/off)
            (setvar "dimgap" 0.0500) ;_text offset
            (setvar "dimtoh" 0) ;_text outside align (on/off)
            (setvar "dimjust" 0) ;_text pos hor
            (setvar "dimtad" 0) ;_text pos vert
            (setvar "dimpost" "") ;_text prefix and suffix
            (setvar "dimtxsty" "vidu") ;_text style
            (setvar "dimtm" 0.0000) ;_tol dev lower
            (setvar "dimtp" 0.0000) ;_tol dev upper
            (setvar "dimtol" 0) ;_tol deviation (on/off)
            (setvar "dimlim" 0) ;_tol limits (on/off)
            (setvar "dimtolj" 1) ;_tol pos vert
            (setvar "dimtdec" 1) ;_tol precision
            (setvar "dimtfac" 1.0000) ;_tol text scale factor
            (setvar "dimtzin" 8) ;_tol zero suppression
            (setvar "dimzin" 8) ;_zero suppression
            (command ".-dimstyle" "Save" "vidu ")
     ) ;_ end progn
 ) ;_ end or
 (command ".-dimstyle" "Restore" dimstyle)
) ;_ end defun

Chết thật.Giờ em mới biết biến cục bộ mất đi thì không sử dụng như đối số đc nữa.Nó free rồi thì hết gọi luôn ^^.E sẽ nghiên cứu tiếp ạ ^^.Còn vấn đề với thằng thứ 2 nữa :|

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Chết thật.Giờ em mới biết biến cục bộ mất đi thì không sử dụng như đối số đc nữa.Nó free rồi thì hết gọi luôn ^^.E sẽ nghiên cứu tiếp ạ ^^.Còn vấn đề với thằng thứ 2 nữa :|

Cần phân biệt rõ đối số, biến toàn cục và biến cục bộ. Trên diễn đàn hình như có nói vấn đề này bạn tim xem nhé

(defun abc (doiso1 doiso2 doiso3 / bien-tutimhieutiepdinha ))

goi (abc doiso1 doiso2 doiso3)

P/S: Cứ từ từ - Không gấp được đâu

Bài thơ chưa biết đặt tên :(

 

Cứ thủng thẳng từ từ

Đừng vội bước thật sâu

Nên đi từ căn bản

Bắt đầu từ đơn giản

Đến điều phức tạp hơn

Và phức tạp hơn nữa

Khi đó, em sẽ hiểu

Em đang đọc những gì?

 

Cuộc sống không chờ đợi

Thời gian lặng lẽ trôi

Hãy bước đi em nhé

Nghị lực và niềm tin

Đồng hành cùng sánh bước

 

Đà Nẵng, sáng ngày 27/8/2010

Tue_NV

Chỉnh sửa theo master_worse
  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Em có thêm 1 thắc mắc nữa,là những biến không khai báo khi đặt tên hàm,sau khi thực hiện xong hàm thì nó còn tồn tại hay cũng mất ạ?

Và việc khai báo biến cục bộ có tương đương với việc khai báo biến toàn cục nhưng cuối hàm có đoạn (setq bien nil) không ạ ?.Lúc đấy thì e hiểu là giá trị về nil rồi,ở hàm khác vẫn gọi nó lên để thay đổi giá trị được,vậy là máy vẫn dành bộ nhớ cho nó?Còn biến cục bộ thì không gọi được lại nữa?

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Em có thêm 1 thắc mắc nữa,là những biến không khai báo khi đặt tên hàm,sau khi thực hiện xong hàm thì nó còn tồn tại hay cũng mất ạ?

Và việc khai báo biến cục bộ có tương đương với việc khai báo biến toàn cục nhưng cuối hàm có đoạn (setq bien nil) không ạ ?.Lúc đấy thì e hiểu là giá trị về nil rồi,ở hàm khác vẫn gọi nó lên để thay đổi giá trị được,vậy là máy vẫn dành bộ nhớ cho nó?Còn biến cục bộ thì không gọi được lại nữa?

Các biến không khai báo thì lisp sẽ hiểu nó là biến toàn cục.

Khi đã set nó về nil thì gọi lại nó vẫn là nil

Biến cục bộ khi gọi lại sau khi nó đã hoàn thành sứ mạng nó cũng sẽ là nil.

Tất cả các biến toàn cục đầu cần có một ko6ng gian dự trữ cho nó ở bộ nhớ, vì thế càng nhiều biến toàn cục lisp càng ì ach....

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Hì.E cảm ơn 2 bác.E sẽ xúc tiến ngay ^^

Cho e hỏi 1 câu hơi dài là : e đang test 2 hàm tạo dimstyle trên mạng này,nhưng chưa được.Không hiểu là hàm có vấn đề hay lại như lần trước,"cách sử dụng của em sai".

Cái thứ nhất :

(defun vcurvedim (vcurvescale / dstylename)      
     (command "-style" "KCVN-COM" "VNSIMLI.shx" 0 1 0 "" "" "")
     (setvar "DIMADEC" 0)        ;Angular decimal places
     (command "DIMALT" "Off")        ;Alternate units selected
     (setvar "DIMALTD" 3)        ;Alternate unit decimal places
     (setvar "DIMALTF" 0.0394)    ;Alternate unit scale factor
     (setvar "DIMALTRND" 0.0000)    ;Alternate units rounding value
     (setvar "DIMALTTD" 3)        ;Alternate tolerance decimal places
     (setvar "DIMALTTZ" 0)        ;Alternate tolerance zero suppression
     (setvar "DIMALTU" 2)        ;Alternate units
     (setvar "DIMALTZ" 0)        ;Alternate unit zero suppression
     (setvar "DIMAPOST" "")        ;Prefix and suffix for alternate text
     (setvar "DIMARCSYM" 0)        ;Arc length symbol
     (setvar "DIMASZ" 0.8500)        ;Arrow size
     (setvar "DIMATFIT" 3)        ;Arrow and text fit
     (setvar "DIMAUNIT" 0)        ;Angular unit format
     (setvar "DIMAZIN" 0)        ;Angular zero supression
     (setvar "DIMBLK" "ClosedFilled")    ;Arrow block name
     (command "DIMBLK1" "ArchTick")        ;First arrow block name
     (command "DIMBLK2" "ArchTick")        ;Second arrow block name
     (setvar "DIMCEN" 1.8000)        ;Center mark size
     (setvar "DIMCLRD" BYLAYER)        ;Dimension line and leader color
     (setvar "DIMCLRE" BYLAYER)        ;Extension line color
     (setvar "DIMCLRT" 60)        ;Dimension text color
     (setvar "DIMDEC" 0)        ;Decimal places
     (setvar "DIMDLE" 0.0000)        ;Dimension line extension
     (setvar "DIMDLI" 0.0000)        ;Dimension line spacing
     (setvar "DIMDSEP" ".")        ;Decimal separator
     (setvar "DIMEXE" 0.9000)        ;Extension above dimension line
     (setvar "DIMEXO" 0.0000)        ;Extension line origin offset
     (setvar "DIMFRAC" 0)        ;Fraction format
     (setvar "DIMFXL" 1.2500)        ;Fixed Extension Line
     (command "DIMFXLON" "Off")    ;Enable Fixed Extension Line


   (setvar "DIMGAP" 0.6600)    ;Gap from dimension line to text

     (command "DIMJOGANG" 45)        ;Radius dimension jog angle
     (setvar "DIMJUST" 0)        ;Justification of text on dimension line
     (command "DIMLDRBLK" "ClosedFilled")        ;Leader block name
     (setvar "DIMLFAC" vcurvescale)    ;----------------------Note -- Linear unit scale factor
     (command "DIMLIM" "Off")        ;Generate dimension limits
     (command "DIMLTEX1" "BYBLOCK")        ;Linetype extension line 1
     (command "DIMLTEX2" "BYBLOCK")        ;Linetype extension line 2
     (command "DIMLTYPE" "BYBLOCK")        ;Dimension linetype
     (setvar "DIMLUNIT" 2)        ;Linear unit format
     (setvar "DIMLWD" -2)        ;Dimension line and leader lineweight
     (setvar "DIMLWE" -2)        ;Extension line lineweight
     (setvar "DIMPOST" "'")        ;Prefix and suffix for dimension text
     (setvar "DIMRND" 0.0000)        ;Rounding value
     (command "DIMSAH" "On")        ;Separate arrow blocks
     (setvar "DIMSCALE" 1.0000)    ;Overall scale factor
     (command "DIMSD1" "Off")        ;Suppress the first dimension line
     (command "DIMSD2" "Off")        ;Suppress the second dimension line
     (command "DIMSE1" "Off")        ;Suppress the first extension line
     (command "DIMSE2" "Off")        ;Suppress the second extension line
     (command "DIMSOXD" "Off")        ;Suppress outside dimension lines
     (setvar "DIMTAD" 1)        ;Place text above the dimension line
     (setvar "DIMTDEC" 0)        ;Tolerance decimal places
     (setvar "DIMTFAC" 1.0000)        ;Tolerance text height scaling factor
     (setvar "DIMTFILL" 1)        ;Text background enabled
     (setvar "DIMTFILLCLR" "BYBLOCK")        ;Text background color
     (command "DIMTIH" "Off")        ;Text inside extensions is horizontal
     (command "DIMTIX" "On")        ;Place text inside extensions
     (setvar "DIMTM" 0.0000)        ;Minus tolerance
     (setvar "DIMTMOVE" 2)        ;Text movement
     (command "DIMTOFL" "On")        ;Force line inside extension lines
     (command "DIMTOH" "Off")        ;Text outside horizontal
     (command "DIMTOL" "Off")        ;Tolerance dimensioning
     (setvar "DIMTOLJ" 1)        ;Tolerance vertical justification
     (setvar "DIMTP" 0.0000)        ;Plus tolerance
     (setvar "DIMTSZ" 0.0000)        ;Tick size
     (setvar "DIMTVP" 0.0000)        ;Text vertical position
     (setvar "DIMTXSTY" "KCVN-COMM")        ;Text style
     (setvar "DIMTXT" 1.8000)    ;Text height
     (setvar "DIMTZIN" 0)        ;Tolerance zero suppression
     (command "DIMUPT" "Off")        ;User positioned text
     (setvar "DIMZIN" 8)        ;Zero suppression
   (setq dstylename "ENGLISHVC")

     (command "dimstyle"
          "save"
          dstylename
     ) ;_ end of command
   ) ;_ end of defun

Lúc dùng thì em dùng ntnày

; DimStyle Create
;
(defun DSTYLE_DIMSTYLE_CREATE (DSTY$ DSCL# AH$ FSTY$)
 (if (null (tblsearch "dimstyle" DSTY$))
   (progn
     (entmake
       (list
  (cons 0 "DIMSTYLE")                                           ; Entity Type
  (cons 100 "AcDbSymbolTableRecord")                            ; Subclass marker
  (cons 100 "AcDbDimStyleTableRecord")                          ; Subclass marker
  (cons 2 DSTY$)                                                ; Dimstyle name
  (cons 70 0)                                                   ; Standard flag value
  (cons 3 "")                                                   ; DIMPOST
  (cons 4 "")                                                   ; DIMAPOST
  (cons 5  AH$)                                                 ; DIMBLK
  (cons 6  AH$)                                                 ; DIMBLK1
  (cons 7  AH$)                                                 ; DIMBLK2
  (cons 40 DSCL#)                                               ; DIMSCALE
  (cons 41 0.0937)                                              ; DIMASZ
  (cons 42 0.0937)                                              ; DIMEXO
  (cons 43 0.38)                                                ; DIMDLI
  (cons 44 0.0625)                                              ; DIMEXE
  (cons 45 0.0)                                                 ; DIMRND
  (cons 46 0.0625)                                              ; DIMDLE
  (cons 47 0.0)                                                 ; DIMTP
  (cons 48 0.0)                                                 ; DIMTM
  (cons 140 0.0937)                                             ; DIMTXT
  (cons 141 0.09)                                               ; DIMCEN
  (cons 142 0.0)                                                ; DIMTSZ
  (cons 143 25.4)                                               ; DIMALTF
  (cons 144 1.0)                                                ; DIMLFAC
  (cons 145 0.0)                                                ; DIMTVP
  (cons 146 1.0)                                                ; DIMTFAC
  (cons 147 0.0625)                                             ; DIMGAP
  (cons 71 0)                                                   ; DIMTOL
  (cons 72 0)                                                   ; DIMLIM
  (cons 73 0)                                                   ; DIMTIH
  (cons 74 0)                                                   ; DIMTOH
  (cons 75 0)                                                   ; DIMSE1
  (cons 76 0)                                                   ; DIMSE2
  (cons 77 0)                                                   ; DIMTAD
  (cons 78 3)                                                   ; DIMZIM
  (cons 170 0)                                                  ; DIMALT
  (cons 171 2)                                                  ; DIMALTD
  (cons 172 0)                                                  ; DIMTOFL
  (cons 173 0)                                                  ; DIMSAH
  (cons 174 0)                                                  ; DIMTIX
  (cons 175 0)                                                  ; DIMSOXD
  (cons 176 1)                                                  ; DIMCLRD
  (cons 177 1)                                                  ; DIMCLRE
  (cons 178 2)                                                  ; DIMCRRT
  (cons 270 4)                                                  ; DIMUNIT
  (cons 271 4)                                                  ; DIMDEC
  (cons 272 4)                                                  ; DIMTDEC
  (cons 273 2)                                                  ; DIMALTU
  (cons 274 2)                                                  ; DIMALTTD
  (cons 275 0)                                                  ; DIMAUNIT
  (cons 276 2)                                                  ; DIMFRAC
  (cons 277 4)                                                  ; DIMLUNIT
  (cons 279 2)                                                  ; DIMTMOVE
  (cons 280 0)                                                  ; DIMJUST
  (cons 281 0)                                                  ; DIMSD1
  (cons 282 0)                                                  ; DIMSD2
  (cons 283 1)                                                  ; DIMTOLJ
  (cons 284 0)                                                  ; DIMTZIN
  (cons 285 0)                                                  ; DIMALTZ
  (cons 286 0)                                                  ; DIMALTTZ
  (cons 287 5)                                                  ; DIMFIT
  (cons 288 0)                                                  ; DIMUPT
  (cons 340 (tblobjname "style" FSTY$))                         ; DIMTXSTY 
  (cons 342 (cdr (assoc 330 (entget (tblobjname "block" AH$))))); DIMLDRBLK
  (cons 343 (cdr (assoc 330 (entget (tblobjname "block" AH$))))); DIMLDRBLK1
  (cons 344 (cdr (assoc 330 (entget (tblobjname "block" AH$))))); DIMLDRBLK2
       )
     )
   )
 )
 (command "._-dimstyle" "_restore" DSTY$)                              ; Set dimstyle current
 (alert (strcat "\nThe current DimStyle name is "DSTY$"."
                "\nThe current DimScale set to "(rtos DSCL# 2 0)"."))
)
;
;;;/////////////////////////////////////////////////////////

Đến lúc dùng thì :

(defun c:taodim()
(DSTYLE_DIMSTYLE_CREATE "DIM" 1 "." "text")
)

cũng hỏng.Lần này chắc do e k hiểu cách gán đối số.Vì cơ bản e cũng không hiểu $,# là cái j...

Chắc chắn là e sai nhưng đầu óc đang bấn loạn,không tìm đc chỗ sai :( Tạo dimstyle rườm rà quá,nên e định thôi thì dùng template.Nhưng mà ấm ức quá,k chịu đc :)(.Code dài,các bác chịu khó cop về test hàm hộ e với nhé :((

Ấy chớ, đừng có ấm ức chi cho nó bể ...... bụng. Cứ phải hề hề thôi bác ơi. Cuộc đời còn lắm thứ mình dốt chứ chả phải riêng gì anh cu lisp này. Cái gì ta chưa biết sẽ từ từ biết, cái gì ta biệt rồi thì sẽ từ từ vọc thêm. Cái gì ta làm được thì ta từ từ mà xài. cái gì ta chưa làm được hay chưa hiểu được ta cũng cứ từ tư chưa xài. Cái gì ta làm chưa ra thì cứ từ từ mà làm ......hề hề .....vì thể nào nó cũng sẽ ra từ từ , lâu mau là do cái cách ta làm mà thôi.

Cứ vậy là lúc nào ta cũng vui như..... Tết bác à.....

Hề hề hề,.....

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Ấy chớ, đừng có ấm ức chi cho nó bể ...... bụng. Cứ phải hề hề thôi bác ơi. Cuộc đời còn lắm thứ mình dốt chứ chả phải riêng gì anh cu lisp này. Cái gì ta chưa biết sẽ từ từ biết, cái gì ta biệt rồi thì sẽ từ từ vọc thêm. Cái gì ta làm được thì ta từ từ mà xài. cái gì ta chưa làm được hay chưa hiểu được ta cũng cứ từ tư chưa xài. Cái gì ta làm chưa ra thì cứ từ từ mà làm ......hề hề .....vì thể nào nó cũng sẽ ra từ từ , lâu mau là do cái cách ta làm mà thôi.

Cứ vậy là lúc nào ta cũng vui như..... Tết bác à.....

Hề hề hề,.....

Vâng tks bác. giờ thì e đã hiểu hơn về việc quản lý biến của Lisp r.Trước h e nghĩ không khai báo gì thì tính toán ra số liệu cho hàm,tự nó "phắn" đi cơ ^^

Hayza,vậy là bài toán trang đầu e đưa ra đã được giải quyết xong và "gần rốt ráo"..Chuẩn bị nghĩ ra bài mới nhờ các bác hướng dẫn thôi.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Mình có đoạn líp như thế này để test mấy cái hàm con dùng cho tiện

 

(defun exec (func ss) 
(setq i 0)	 
(while (< i (sslength ss))
  (setq name_ss (ssname ss i));
    (func)  
(setq i (1+ i))
)
)
;================================ 
(defun moddxf () 
(setq dxf 50)
(entmod (subst (cons dxf newrad) (assoc dxf (entget name_ss)) (entget name_ss))))
;================================
(defun c:rot(/ name_ss newrad)
 (setq ss (ssget '((0 . "*text")))
	newrad (getangle "\nNhap goc quay: ")
 )
(exec moddxf ss);; sua toan bo DXF cho tap chon ss
);_ end defun

 

>> Cha.y ra^'t to^'t

 

Nhưng khi mình muốn khái quát hơn nữa cái hàm moddxf lên 1 bậc bằng cách sửa thành:

 

(defun moddxf (dxf) 
(entmod (subst (cons dxf newrad) (assoc dxf (entget name_ss)) (entget name_ss))))

Và sửa ở hàm rot là:

 

(defun c:rot(/ name_ss newrad)
 ......................
(exec (moddxf 50) ss);; sua toan bo DXF cho tap chon ss
);_ end defun

 

Thì khi chạy nó lại báo lỗi : ; error: bad argument type: lentityp nil

 

Có bác nào sửa giúp mình với.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
......

Nhưng khi mình muốn khái quát hơn nữa cái hàm moddxf lên 1 bậc bằng cách sửa thành:

 

(defun exec (ss) 
(setq i 0)	 
(while (  (setq name_ss (ssname ss i)); 
 (moddxf 50) 
(setq i (1+ i))
)
)
(defun moddxf (dxf) 
(entmod (subst (cons dxf newrad) (assoc dxf (entget name_ss)) (entget name_ss)))
)
(defun c:rot(/ name_ss newrad)
 (setq ss (ssget '((0 . "*text")))
	newrad (getangle "\nNhap goc quay: ")
 )
(exec ss)
);_enddefun

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Mình có đoạn líp như thế này để test mấy cái hàm con dùng cho tiện

 

(defun exec (func ss) 
(setq i 0)	 
(while (  (setq name_ss (ssname ss i));
    (func)  
(setq i (1+ i))
)
)
;================================ 
(defun moddxf () 
(setq dxf 50)
(entmod (subst (cons dxf newrad) (assoc dxf (entget name_ss)) (entget name_ss))))
;================================
(defun c:rot(/ name_ss newrad)
 (setq ss (ssget '((0 . "*text")))
	newrad (getangle "\nNhap goc quay: ")
 )
(exec moddxf ss);; sua toan bo DXF cho tap chon ss
);_ end defun

 

>> Cha.y ra^'t to^'t

 

Nhưng khi mình muốn khái quát hơn nữa cái hàm moddxf lên 1 bậc bằng cách sửa thành:

 

(defun moddxf (dxf) 
(entmod (subst (cons dxf newrad) (assoc dxf (entget name_ss)) (entget name_ss))))

Và sửa ở hàm rot là:

 

(defun c:rot(/ name_ss newrad)
 ......................
(exec (moddxf 50) ss);; sua toan bo DXF cho tap chon ss
);_ end defun

 

Thì khi chạy nó lại báo lỗi : ; error: bad argument type: lentityp nil

 

Có bác nào sửa giúp mình với.

Chào bạn nguyentuyen6,

Bác Tue_NV đã sửa cho bạn rồi. Tuy nhiên mình vẫn muốn nói một chút về lý do cái của bạn không chạy.

1/- Bạn chú ý: Ở hàm

(defun moddxf (dxf)

(entmod (subst (cons dxf newrad) (assoc dxf (entget name_ss)) (entget name_ss))))

Bạn đã xác định nó có một biến toàn cục là dxf. Tuy nhiên hàm này còn sử dụng tới cái biến name_ss nữa mà biến này lại là đối số của hàm entget. Do vậy lisp sẽ hiểu rằng biến này phải là một ename.

Mà vì bạn không khai báo nó là biến cục bộ nên mặc nhiên nó sẽ tồn tại trong toàn bộ chương trình của bạn.

Khi sử dụng vào hàm con (exec ......) thì bạn thấy rằng theo định nghĩa của hàm này cái hàm (func) của nó đâu có biến toàn cục nào trong khi cái (moddxf ...) của bạn lại dùng biến dxf.

Vậy nên lisp mới trả lời bạn là ; error : bad argument type: lentityp nil , nghĩa là lisp bị lỗi vì sai loại đối số giá trị của đối số đưa vào là nil hay là vô nghĩa bạn ạ.

Hy vọng rằng bạn sẽ tránh được cái lỗi này khi làm lisp. Chúc bạn thành công.

  • Vote tăng 2

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Híc,e có ý thế này,khi ngồi đọc code trên,dù khá ngắn,nhưng e cũng phải rất đau đầu.Mọi người không có thói quen chú thích chức năng của từng dòng bên cạnh thì phải :(..Nếu thế thì chỉ có minh dễ học được thôi,chứ "cùng" e hơi khó.Vậy rất rất mong các bác đề chú thích nhỏ nhỏ bên mỗi dòng code dài,để ng đọc mương tượng ra trước cách xử ký của code.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Híc,e có ý thế này,khi ngồi đọc code trên,dù khá ngắn,nhưng e cũng phải rất đau đầu.Mọi người không có thói quen chú thích chức năng của từng dòng bên cạnh thì phải :(..Nếu thế thì chỉ có minh dễ học được thôi,chứ "cùng" e hơi khó.Vậy rất rất mong các bác đề chú thích nhỏ nhỏ bên mỗi dòng code dài,để ng đọc mương tượng ra trước cách xử ký của code.

Hề hề hề,

Quả có thế thật. Thực ra khi mình mới học lisp mình cũng toàn phải ngồi đọc từng dòng code rồi ghi chú ra bên cạnh cái mà mình hiểu. Nhưng dần dần thì cái hiểu ấy nó ngấm vào rồi nên cái bệnh lười nó lại nổi lên, thế là chả thèm ghi chú nữa. Mặt khác quá trình viết lisp hoàn toàn không dễ như khi đọc, vậy nên lười được chút nào hay chút đó (để còn nhanh nhanh được ....... lười mà). Mặc dù cái việc ghi chú ấy nó chả lâu hơn song chả ai ghi chú khi đang viết cả vì có biết là nó đúng hay sai đâu. Vậy nên phải sau khi chạy thử mới có kết luận là lisp có dùng được hay không. Đến lúc đó mà ngồi ghi chú lại cả một trang lisp thì quả là ....không khoái bạn ạ.

Vậy nên có nhẽ cách tốt nhất để học có lẽ lại là chính người học phải tập đọc và hiểu các code cho nó ky kỹ, đừng cưỡi ngựa xem hoa, đừng có đọc lớt phớt rồi tự cho là mình hiểu rồi và cứ thế dùng ẩu mà chả hiểu vì sao lại phải viết như vậy. Có thế mới vỡ dần ra cái chưa biết của mình và mới vận dụng lisp tốt được. Trong quá trình đọc code, chỗ nào đã hiểu thì thôi, còn chỗ nào chưa hiểu thì ghi chú lại và post lên hỏi lại, chắc chắn như vậy sẽ hiệu quả hơn là chỉ đọc những lời ghi chú của người viết (Vì đôi khi người viết cũng ẩu mà). Cứ lấy mình ra làm ví dụ, có nhiều lisp mình viết thừa do quá trình viết phải sửa đi sửa lại, và những chỗ thừa mình cũng ngại xóa nữa, xong rồi chạy thử thấy nó tạm ổn thì post lên thôi chứ cũng ngại ngồi làm lại cho nó ra cái vẻ pro bạn ạ. Và cũng vì vậy, mình mãi mãi vẫn chỉ là thằng học mót chứ chả thể pro tí nào.

Hề hề hề.....

  • Vote tăng 2

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Nhưng dù sao ghi chú cũng là một cách để chính người viết soát lỗi của mình mà ^^

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Các bác cho e hỏi cách lấy cross selection từ trái qua của 2 tọa độ góc.E định lấy tập hợp tất cả đối tượng trong 1 hình CN ấy mà.Chắc cái này chỉ cần quét 1 phát là được.Còn tương lai là e muốn chọn tất cả các tập hợp đối tượng trong 1 hình pl khép kín,hoặc tròn chẳng hạn.Dùng selection theo wpolygon được không ạ (các đối tượng này đã bị tách rời với bên ngoài bởi lệnh extrim).Với hình góc cạnh thì còn lấy được các điểm mút,chứ hình tròn thì ..

Nếu được 1lsp mẫu thì tốt quá :">

Phần này e đã vọc được đến đây thì bí,mong các bác chỉ dẫn tiếp.Tình hình e vướng phải là như sau ạ:

- Với đường tròn e đang xúc tiến,có lẽ mai xong.Hiện tại mới là PL góc cạnhkín đơn thuần.

- Chọn tập các đối tượng trong đường màu vàng.E muốn chọn cả đường màu đỏ nhưng chưa biết xử lý thế nào.Nếu để "CP" thì nó lại chọn thêm cả 2 thằng màu xanh.Để "WP" như hiện tại thì nó bỏ qua thằng đỏ,mặc dù chủ quan thằng đỏ vẫn "ở trong" HCN (có 1 đầu chạm vào thôi)

- E muốn để nó là 1 lệnh độc lập,khi sử dụng xong thì hiện các grid lên cho mình thao tác các bước tiếp theo(giống như Fast select của Express ý ạ), chứ không phải gọi qua transparent,hoặc dùng tham số P khi sử dụng các câu lệnh khác nữa..E k biết có phải lên quan đến các biến pickfirst hay highlight không ạ :( .Mong các bác hướng dẫn e với

captureaz.gif

(defun C:ffs ( / ent i elist ppl)
(BatDau)
(setq ent (car(entsel "\nHay chon duong PL (tru duong tron): ")))
(setq i 0 
	 elist (entget ent)) 
(if (zerop (getvar "CMDACTIVE")) (command "_select" ));Lay trang thai cmd de select khi thuc hien lenh khac
(command "_wp") 
(repeat (length elist) 
  (setq ppl (nth i elist) 
		i (1+ i))
  (if (= (car ppl) 10) (command (trans (cdr ppl) 0 1)));Tranh UCS quay 
 )
(command "")
;(command "'fs" ent)
(KetThuc)
)
;;;;;;;;;;;;;;;;;
(defun BatDau() 
(setq OldOs (getvar "osmode")
	Oldcmd (getvar "cmdecho")) 
(setvar "cmdecho" 0)
(setvar "osmode" 0)
)
(defun KetThuc() 
(setvar "osmode" OldOs) 
(setvar "cmdecho" Oldcmd)
(princ)
)

PS: e "mượn tạm" cái (batdau),(ketthuc) cua bac nguyentuyen6 để đỡ type ^^

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Vấn đề đường tròn e cũng giải quyết tạm thế này..Còn những vấn đề kia vẫn vướng.Không những thế còn thêm 1 vấn đề là :e muoốn chọn nhiều pl chứ không phải chỉ thực hiện 1 lần.mong các bác giúp đỡ :(

(defun C:ffs ( / ent i elist ppl cen rad gocquay)
(BatDau)
(setq ent (car(entsel "\nHay chon duong PL : ")))
(setq i 0 
        elist (entget ent)) 
(if (zerop (getvar "CMDACTIVE")) (command "_select" ));Lay trang thai cmd de select khi thuc hien lenh khac
(command "_wp") 

;;;DUONG TRON
(if (= (cdr(assoc 0 elist)) "CIRCLE")
 (progn
 (setq cen (cdr (assoc 10 elist))
       rad (cdr (assoc 40 elist)) 
 )
 (repeat 360 
  (setq gocquay (polar cen (* i (/ pi 180)) rad)  ;thuc hien 360 lan,moi lan 1 do
           i (1+ i))
  (command (trans gocquay 0 1))
 )); else

;;;;;;;;pl
(repeat (length elist) 
  (setq ppl (nth i elist) 
           i (1+ i))
  (if (= (car ppl) 10) (command (trans (cdr ppl) 0 1)));Tranh UCS quay 
 )
 )
(command "")
;(command "_select" "A" ent)  ;-----> Dong nay e sai ma chua biet o dau
(KetThuc)
)
;;;;;;;;;;;;;;;;;
(defun BatDau() 
(setq OldOs (getvar "osmode")
       Oldcmd (getvar "cmdecho")) 
(setvar "cmdecho" 0)
(setvar "osmode" 0)
)
(defun KetThuc() 
(setvar "osmode" OldOs) 
(setvar "cmdecho" Oldcmd)
(princ)
)

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Tạo một tài khoản hoặc đăng nhập để nhận xét

Bạn cần phải là một thành viên để lại một bình luận

Tạo tài khoản

Đăng ký một tài khoản mới trong cộng đồng của chúng tôi. Điều đó dễ mà.

Đăng ký tài khoản mới

Đăng nhập

Bạn có sẵn sàng để tạo một tài khoản ? Đăng nhập tại đây.

Đăng nhập ngay


×