cheng5276
发表于 2012-1-1 23:03:12
今天刚好在头痛这个咋写这种函数呢,嘿嘿,省事了
拜读大作
xcroy
发表于 2012-4-12 16:11:55
请问那位朋友能传我一份无痕的正则式函数啊(他的空间进不去了),
xczsb@163.com 或者发消息给我,不胜感谢!!
hvac_wh
发表于 2012-5-22 16:28:53
我觉得不在乎采用哪种语言进行编程,而是在于你设计的程序是否完整、设计的体系是否有缺陷。本案例中,我觉得还有多种情况没有考虑。如文本中含%%p、%%DC、\U+0201等。在实际使用中经常碰到,按照作者设计的程序,%%p会分解成 "%"、 “%”、“ p”,但实际上它就是一个正负号。另外对于不同的字型文件,还有作者自定义的一些特殊符合,表达特殊的含义。作者就曾经对字库文件把%%242定义为m2(平方米),这些情况可能就是编程的重点。atolisp发展到现在,功能也已经十分强大了,在AutoCAD后续高版本里,VB.NET可能不会再做主要的开发语言给予支持。但AUTOCAD不会抛弃AUtoLisp。我认为,作者提供的函数运算,就没有考虑这些情况的变化。
qq229918602
发表于 2012-5-22 20:29:47
有点复杂、、、
pop159
发表于 2012-5-22 21:49:54
zhongys
发表于 2012-5-23 01:06:40
好贴,收藏了。
阿霸99
发表于 2012-6-29 22:30:31
谢谢楼主,这个很强大,但是你的空间要密码才能进去
pimgu
发表于 2012-6-30 12:42:16
膜拜!膜拜!膜拜!
chlh_jd
发表于 2012-7-6 22:09:14
geomcal.arx的cal自带四则运算功能,使用举例如下;
批量四则运算
(vl-load-com)
;;加载geomcal.arx
(if (not(member "GEOMCAL.ARX" (mapcar (function strcase) (arx))))
(arxload (findfile "geomcal.arx"))
)
(defun c:szys (/ ws ss ssen cal_str ent str x)
(prompt
"\n计算表达式文字自身数值为变量x,形如x-0.05、(x^2-1)/2"
)
(setq ws (getint "\n请输入小数点后位数<3>"))
(if (not ws)
(setq ws 3)
)
(prompt "\n选择需要数值运算的文字")
(setq ss (ssget (list (cons 0 "TEXT"))))
;_(svos)
(if
(and ss
(setq ssen (ss2lst ss nil))
(setq ssen (vl-remove-if-not
(function(lambda(x)
(numberp (read (dxf 1 x)))
)
)
ssen
)
)
)
(if
(and (setq cal_str (vl-string-trim " " (LM:GetString "x-0.05")))
(/= cal_str "")
)
(foreach a ssen
(setqent (entget a)
str (dxf 1 ent)
x (atof str)
)
(if x
(setq x (vl-catch-all-apply (function cal) (list cal_str)))
)
(if (vl-catch-all-error-p x)
(princ (vl-catch-all-error-message x))
(progn
(setq str (rtos x 2 ws))
(setq ent (ch-en (cons 1 str) ent))
(entmod ent)
)
)
)
(princ "\n未输入表达式")
)
(princ "\n选择错误.")
)
;_(clos)
(princ)
)
;;;by Lee Mac
(defun LM:GetString (#Default / dcTag result)
(cond ((<= (setq dcTag (load_dialog "ACAD")) 0))
((not (new_dialog "acad_txtedit" dcTag)))
(t
(set_tile "text_edit" #Default)
(action_tile "accept" "(setq result (get_tile \"text_edit\")) (done_dialog)")
(action_tile "cancel" "(done_dialog)")
(start_dialog)
(unload_dialog dcTag)))
result)
;;;转换选择集为表
(defun ss2lst (ss vla / a e i)
(if (= (type ss) (quote PICKSET))
(progn
(setq i -1)
(while (setq e (ssname ss (setq i (1+ i))))
(if vla
(setq e (vlax-ename->vla-object e))
nil
)
(setq a (cons e a))
)
)
nil
)
)
;;索引点表值
(defun dxf (co en)
(if(eq(type en)(quote ENAME))(setq en(entget en(quote("*")))))
(if(vl-consp co)(mapcar (function (lambda (x)(cdr (assoc x en))))co)
(cdr (assoc co en))))
;;点表替换
(defun ch-en (co en /)
(if (eq (type en) (quote ename))
(setq en (entget en (list "*")))
)
(if (assoc (car co) en)
(subst co (assoc (car co) en) en)
(reverse (cons co (reverse en)))
)
)
freeok
发表于 2012-11-16 21:58:53
大师 之作,看不懂。。