2007年11月27日星期二

用OPENDCL创建自定义工具条

对于CAD自身的DCL,总是无法做的很合心意。
OPENDCL有其特殊之处所在,因而利用其DOCK控件,制作了一些工具栏,自我使用方便一些。主要特点是为了按需加载,就是所有的程序,分为几个级别,第一种是常用的,随系统启动,用lisp或者autohook定义为左手键。第二种是这类DOCK工具,按需要进行加载。第三种是机器里成千上万个lisp程序,按类别分后,用lisplink的ctrl+a来调用。基本足矣。

USB设备删除软件- USB SAFELY REMOVE

总是对WIN自带的USB删除程序不大满意,近日找到一个代替的软件,USB SAFELY REMOVE,且使用一段时间,看看其是否合意。

2007年11月9日星期五

记录几个最近去过的网站

1. www.readfree.net
这个可是软件高手老马也推崇和发帖的地方,网易的玉玲珑兄也赞不绝口之处,前段时间无法注册,11.06刚开放注册。

2. http://forum.cnool.net/thesis.jsp?thesisid=494
东方热线数学论坛。
在当年数学竞赛之时,单墫老师就是我们的偶像,吴建平老师等人都说单墫老师做IMO题目如同喝白开水般容易。如今,单老师的知己叶中豪先生也经常到此发表引人深思的数学文章,令人大开眼界。

3. http://www.ebookee.com/
一个国外查电子书的地方,链接许多是在rapidshare或者deposite等地方。

4. http://drop.io/
xbeta推荐的国外存储地址,除了速度慢之外,也没有什么缺点了。

5. http://dfc77.spaces.live.com/blog/
冲令狐_结构工程师的太极人生,是okok的冲令狐么:)
是清华大学的同行,我要向他好好学习。

2007年11月8日星期四

[python] Numpy、scipy、Matplotlib的学习

今天,重新捡起几个月前用scipy编写的非线性分析程序(主要用他进行非线性方程求解),发现numpy升级了。下载一下,记录一下。

http://www.scipy.org/

现在的numpy是2007.11.7(昨天)更新的1.04版本,而scipy是0.600版本了。python的编程给人以轻松愉快的感觉,安装上numpy和scipy的python更是具有强大的数值计算功能。

国内介绍scipy的并不多,下面是一篇

支持Python系列:Matlab的Python实现Scipy和Matplotlib简介


节选一些
" SciPy 是一个基于 Python 的项目,它旨在再现 MATLAB 的所有功能,优化其性能并简化与其它软件的集成,同时仍保持完全免费以及至少和 MATLAB 一样易于使用。" (http://www-128.ibm.com/developerworks/cn/linux/l-oslab/index.html) Scipy每年都有SciPy Conference,目前的版本还是04年的0.3.2,需要Python2.3 wxPython2.4 Numeric23等支持。Scipy的结构是scipy_core和scipy_lib两个部分,不过自己编译比较麻烦,要C和Fortran编译器。 如果你需要比较完整的Matlab功能支持,可以选择它。建议安装Enhanced Python (http://www.enthought.com/python/) ,一次安装,该有的都有了。…………

而要实现多一些绘图功能,则可以选用MATplotlib。
同样是上面的blog网址,给出了下面的介绍
“Matplotlib 是一个由 John Hunter 等开发的,用以绘制二维图形的 Python 模块。它利用了 Python 下的数值计算模块 Numeric 及 Numarray,克隆了许多 Matlab 中的函数, 用以帮助用户轻松地获得高质量的二维图形。Matplotlib 可以绘制多种形式的图形包括普通的线图,直方图,饼图,散点图以及误差线图等;可以比较方便的定制图形的各种属性比如图线的类型,颜色,粗细,字体的大小 等;它能够很好地支持一部分 TeX 排版命令,可以比较美观地显示图形中的数学公式。Matplotlib 掌握起来也很容易,由于 Matplotlib 使用的大部分函数都与 Matlab 中对应的函数同名,且各种参数的含义,使用方法也一致,这就使得熟悉 Matlab 的用户使用起来感到得心应手。对那些不熟悉的 Matlab 的用户而言,这些函数的意义往往也是一目了然的,因此只要花很少的时间就可以掌握。”

此处更有韦建明,蔡晓睿 (wei@uni-duisburg.de)给出的实例
http://www-128.ibm.com/developerworks/cn/linux/l-matplotlib/?ca=dwcn-newsletter-linux

还可以支持部分的latex,很不错。
转载贴图

2007年11月6日星期二

[autolisp] 增加Autolisp相关网站链接

1. http://www.cadesigner.com/Downloads.htm

2. http://paracadd.com/lisp.htm
http://paracadd.com/lisp/lisp_lst.htm
有一个叫http://paracadd.com/lisp/lsplst.lsp的程序挺好的,自动生成html页面
http://paracadd.com/lisp/

3.一个韩国的网站,收集了大量不错的lisp程序,可以发现,其不少程序是来自于theswamp。
http://www.acadvba.com/zero/zboard.php?id=codelisp

4. MP- Michael Puckett -一个国际知名autolisp高手的主页,有好些精彩的函数。他的主页做的非常精致,层次结构很好。
http://tiddlyspot.com/cadlabs/

2007年11月5日星期一

备份blogspot的文章

blogspot当然是非常好的博客网站,但是其不断的被封让人颇为沮丧。每年开放的时间比不开放还短。虽然可以通过一定的方法进来,但总是无趣。

前几天把blogspot备份到了http://qjchen.yo2.cn
做法和网上的介绍类似。

首先,到blogbackupOnline
https://www.blogbackuponline.com/techrigy/signup.aspx
注册一个账号,然后添加个人的blogspot,则其会把整个博客的文章导出为一个xml文件,这个文件很全,包括了文章和评论。
有了这个xml文件,就可以在某些其他网站中导入了,比如wordpress.com
就支持的最好,具体可见 http://qjchen.wordpress.com 。可惜这个站点也马上被封了。于是寻找国内可以导入xml文件的网站,发现yo2网站口碑不错,于是,在yo2里面导入了这个xml文件,可是评论导入不了。地址在: http://qjchen.yo2.cn。发现现在各个博客网站拼命的可以搬入各种其他网站的,但是在搬出方面还是很有点问题的。yo2还是很不错的,具有大量的插件,特别是代码高亮方面已经自己集成了,就比blogspot方便,唯一比较麻烦的是标签没有导入到,不如wordpress.com

不过还是会以blogspot为主,毕竟,google的声誉还是不错的。

2007年11月4日星期日

[autolisp] 将圆内的文字移动到圆中心处

[autolisp] 将圆内的文字移动到圆中心处


;;; -----------------------------------------------------------------;
;;; Purpose: move the text inside circle to the center of the circle ;
;;; write by qjchen ;
;;; http://qjchen.yo2.cn ;
;;; http://chenqj.blogspot.com ;
;;; -----------------------------------------------------------------;
(defun c:test (/ std-sslist movetocenter)
(command "_undo" "_be")
(setting)

(defun std-sslist (ss / n lst)
(if (eq 'pickset (type ss))
(repeat (setq n (fix (sslength ss))) ; fixed
(setq lst (cons (ssname ss (setq n (1- n))) lst))
)
)
)
(defun movetocenter (/ a x txtobj center_circle outline b bobject objss
res midpoint
)
(setq a (ssget '((0 . "circle"))))
(setq a (std-sslist a))
(foreach x a
(setq txtobj nil)
(setq pub x)
(setq center_circle (assoc 10 (entget x)))
(setq outline (objectpoint (entget x)))
(setq b (ssget "_cp" outline '((0 . "TEXT"))))
(setq bobject (ssname b 0))
(setq objss (vlax-ename->vla-object bobject))
(setq res (xyval1 objss))
(setq midpoint (midp (list (nth 0 res) (nth 1 res)) (list
(nth 2 res)
(nth 3 res)
)
)
)
(command "move" bobject "" midpoint (cdr center_circle))
)
)
(movetocenter)
(resetting)
(command "_undo" "_e")
)

;;; the subrountine is write by qjchen to get selection by circle
;;; and lwpolyline
(defun objectpoint (obj / name ori i r w_pl_lst wlist)
(setq name (cdr (assoc 0 obj)))
(cond
((= name "CIRCLE")
(setq ori (cdr (assoc 10 obj)))
(setq r (cdr (assoc 40 obj)))
(setq i 0)
(repeat 30
(setq wlist (append
wlist
(list (polar ori (* 2 pi (/ i 30.0)) r))
)
)
(setq i (1+ i))
)
)
((= name "LWPOLYLINE")
(defun w_pl_lst (ent / pt_list)
(foreach x ent
(if (= (car x) 10)
(setq pt_list (append
(list (cdr x))
pt_list
)
)
)
)
pt_list
)
(setq wlist (w_pl_lst obj))
)
)
wlist
)
;;; _ end of xyval
;;; ---The following codes are copy from Tony Hotchkiss at cadalyst
;;; Get the boundingbox of one object
(defun xyval1 (obj / minpt maxpt topy bottmy leftx rightx)
(vla-GetBoundingBox obj 'minpt 'maxpt)
(setq pt1 (vlax-safearray->list minpt)
pt2 (vlax-safearray->list maxpt)
topy (cadr pt2)
bottmy (cadr pt1)
leftx (car pt1)
rightx (car pt2)
) ; _ end of setq
(list leftx bottmy rightx topy)
)
;;; The error function
(defun err (s)
(if (= s "Function cancelled")
(princ "\nALIGNIT - cancelled: ")
(progn
(princ "\nALIGNIT - Error: ")
(princ s)
(terpri)
) ; _ end of progn
) ; _ end of if
(resetting)
(princ "SYSTEM VARIABLES have been reset\n")
(princ)
)
;;; err
;;; setting and resetting the system variables
(defun setv (systvar newval / x)
(setq x (read (strcat systvar "1")))
(set x (getvar systvar))
(setvar systvar newval)
)
;;; setv
(defun setting ()
(setq oerr *error*)
(setq *error* err)
(setv "BLIPMODE" 0)
(setv "CMDECHO" 0)
(setv "OSMODE" 0)
)
;;; setting
(defun rsetv (systvar)
(setq x (read (strcat systvar "1")))
(setvar systvar (eval x))
)
;;; rsetv
(defun resetting ()
(rsetv "BLIPMODE")
(rsetv "CMDECHO")
(rsetv "OSMODE")
(setq *error* oerr)
)
;;; -------------------------------------------------------
(defun midp (p1 p2)
(mapcar
'(lambda (x)
(/ x 2.)
)
(mapcar
'+
p1
p2
)
)
)
;;; The following code taken from Mr.Tony Hotchkiss at Cadalyst
(defun err (s)
(if (= s "Function cancelled")
(princ "\nregion clean - cancelled: ")
(progn
(princ "\nregion clean - Error: ")
(princ s)
(terpri)
) ; _ end of progn
) ; _ end of if
(resetting)
(princ "SYSTEM VARIABLES have been reset\n")
(princ)
)
;;; err
;;; setting and resetting the system variables
(defun setv (systvar newval / x)
(setq x (read (strcat systvar "1")))
(set x (getvar systvar))
(setvar systvar newval)
)
;;; setv
(defun setting ()
(setq oerr *error*)
(setq *error* err)
(setv "BLIPMODE" 0)
(setv "CMDECHO" 0)
(setv "OSMODE" 0)
)
;;; setting
(defun rsetv (systvar)
(setq x (read (strcat systvar "1")))
(setvar systvar (eval x))
)
;;; rsetv
(defun resetting ()
(rsetv "BLIPMODE")
(rsetv "CMDECHO")
(rsetv "OSMODE")
(setq *error* oerr)
)