yxp 发表于 2008-7-23 13:19:00

如何使用fill_image将一个image填充成黑色

<p>使用这个(fill_image 0 0 x y -2) 好像不行</p><p>-2的颜色说是绘图背景色,可是怎么一直是白色呢。</p>

byghbcx 发表于 2008-7-23 15:11:00

<table class="BasicLeft" cellspacing="0" rules="cols"><tbody><tr class="row_0"><th class="BasicLeft_CELL" colspan="3"><p class="table_title">Dialog box color attribute&nbsp; </p></th></tr><tr class="row_0"><th class="BasicLeft_CELL"><p class="table_heading">Color number </p></th><th class="BasicLeft_CELL"><p class="table_heading">ADI mnemonic </p></th><th class="BasicLeft_CELL"><p class="table_heading">Meaning </p></th></tr><tr class="row_2"><td class="BasicLeft_CELL"><p class="table_body">–2 </p></td><td class="BasicLeft_CELL"><p class="table_body">BGLCOLOR </p></td><td class="BasicLeft_CELL"><p class="table_body">Current background of the AutoCAD graphics screen </p></td></tr><tr class="row_1"><td class="BasicLeft_CELL"><p class="table_body">–15 </p></td><td class="BasicLeft_CELL"><p class="table_body">DBGLCOLOR </p></td><td class="BasicLeft_CELL"><p class="table_body">Current dialog box background color </p></td></tr><tr class="row_2"><td class="BasicLeft_CELL"><p class="table_body">–16 </p></td><td class="BasicLeft_CELL"><p class="table_body">DFGLCOLOR </p></td><td class="BasicLeft_CELL"><p class="table_body">Current dialog box foreground color (for text) </p></td></tr><tr class="row_1"><td class="BasicLeft_CELL"><p class="table_body">–18 </p></td><td class="BasicLeft_CELL"><p class="table_body">LINELCOLOR </p></td><td class="BasicLeft_CELL"><p class="table_body">Current dialog box line color </p></td></tr></tbody></table><p></p><p>-2是图形窗口背景色,要一直用黑色,就用7</p>

caoyin 发表于 2008-7-23 13:59:00

好像是 -18

ZZXXQQ 发表于 2008-7-23 14:00:00

(fill_image 0 0 x y 0)

yxp 发表于 2008-7-23 17:08:00

本帖最后由 作者 于 2008-7-23 17:15:58 编辑 <br /><br /> <p>0 和 -18 最接近黑色。</p><p>7是白色,谢谢各位。</p><p></p><p>&nbsp;&nbsp; (setq x (- (dimx_tile "image01") 1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; y (- (dimy_tile "image01") 1))</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (start_image "image01")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (fill_image 0 0 x y 0)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (end_image)</p><p>我在试着操作image控件弄一个实时显示图形效果,可根据不同的参数显示不同形状的图形,看能成功不。</p><p>只是image的坐标太糟糕啦,只能用整数,图形不够细腻,不能写汉字,也不能支持缩放。</p>

byghbcx 发表于 2008-7-23 17:38:00

<p>每次对image重画时,先要擦除,图形坐标要重新计算再重新画,支持汉字,要读取汉字形文件(*.shx)后得到汉字的矢量,再通过坐标转换到image坐标中绘制,早期天正中是这样的.</p>

yxp 发表于 2008-7-23 18:03:00

<p>(defun c:dxs()<br/>&nbsp;&nbsp; (setq dcl_id (load_dialog "dxs.dcl"))<br/>&nbsp;&nbsp; (if (not (new_dialog "dxs1" dcl_id)) (exit))<br/>&nbsp;&nbsp; (setq x (- (dimx_tile "im01") 1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; y (- (dimy_tile "im01") 1))<br/>&nbsp;&nbsp; (start_image "im01")<br/>&nbsp;&nbsp; (fill_image 0 0 x y 0)<br/>&nbsp;&nbsp; (vector_image 0 0 0 y 7)&nbsp; ;;左竖<br/>&nbsp;&nbsp; (vector_image 0 y x y 8)&nbsp; ;;下横<br/>&nbsp;&nbsp; (vector_image x y x 0 8)&nbsp; ;;右竖<br/>&nbsp;&nbsp; (vector_image x 0 0 0 7)&nbsp; ;;上横<br/>&nbsp;&nbsp; (setq a 1 b 1 c 1)<br/>&nbsp;&nbsp; (repeat (fix (/ y b))<br/>&nbsp;&nbsp;&nbsp;&nbsp; (vector_image 0 (* a b) x (* a b) c)<br/>&nbsp;&nbsp;&nbsp;&nbsp; (vector_image (* a b) 0 (* a b) y c)<br/>&nbsp;&nbsp;&nbsp;&nbsp; (setq a (+ a 1))<br/>&nbsp;&nbsp;&nbsp;&nbsp; (if (&gt; c 255) (setq c 1)(setq c (+ c 1)))<br/>&nbsp;&nbsp; )(end_image)</p><p>&nbsp;(start_dialog)(unload_dialog dcl_id)<br/>)</p><p>;;dcl文件</p><p>dxs1:dialog{label="示例图像框";<br/>:image{key="im01";width=50;height=25;}<br/>ok_only;}</p>

yxp 发表于 2008-7-23 18:05:00

本帖最后由 作者 于 2008-7-23 18:11:33 编辑 <br /><br /> byghbcx发表于2008-7-23 17:38:00static/image/common/back.gif每次对image重画时,先要擦除,图形坐标要重新计算再重新画,支持汉字,要读取汉字形文件(*.shx)后得到汉字的矢量,再通过坐标转换到image坐标中绘制,早期天正中是这样的.

<p>这是个好办法,shx的矢量能读出来?比较困难啊,谁有专门的程序吗,我用ultraedit打开后是乱码,无法分析数据结构啊。找了一篇文章如下:<br/></p><p></p><p><table width="680" align="center"><tbody><tr><td align="center"><h2><font color="#0f3ccd">图形软件中字符书写软件的分析 </font></h2><b></b><br/><hr width="660" size="1"/><hr/></td></tr></tbody></table><table width="620" align="center"><tbody><tr><td style="FONT-SIZE: 14px; TEXT-INDENT: 25px; LINE-HEIGHT: 20px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;高俊<br/>书写字符是绘制工程图纸的一个重要内容。无论是手工绘制工程图纸还是计算机绘制工<br/>程图纸,在图样中书写字符都要耗费大量时间。开发计算机绘制工程图纸系统时,字符书写模<br/>块是一个重要而复杂的模块。它需要具有:<br/>·开发字符书写模块的标准与规范;<br/>·定义字符库的功能,特别是定义汉字字库的功能;<br/>·书写字符的功能;<br/>·修改已书写的字符的功能;<br/>·与上述功能相适应的数据结构;<br/>·与上述功能与结构相适应的操作结构;<br/>·与上述功能与结构相适应的管理功能。<br/>若再详细地分析研究上述课题,还可列出与其相关的诸多问题。例如:书写字符时如何实<br/>现书写多种字体?如何根据绘制图样的需要与具体情况,规定字符串书写基点的类型?……等<br/>等。为了便于叙述,下面以大家熟悉的图形软件AutoCAD为例,讨论绘制工程图纸系统中的字<br/>符书写模块。<br/><br/>AutoCAD书写字符的操作结构<br/>AutoCAD书写字符的操作结构包括:字库的定义、字库的调入、字符书写以及已书写字符<br/>的修改。下面分别介绍。<br/><br/>1.定义字符的编码系统<br/>字符的编码系统需定义字符的规定与命令码、一般字符的字库文件、两字节代码字符的<br/>字库文件,如汉字。<br/><br/>2.绘制图形时的字符书写系统<br/>·字库的调入 用STYLE命令调入。该命令参数有:索引参数、字符参数、变形参数、书<br/>写参数等。<br/>·字符的书写 用TEXT命令书写。该命令参数有:基点坐标、字高、字符旋转角度、字<br/>符串等,还包括两个子命令:STYLE和JUSTIFT。<br/>·字符书写的基点类型 AutoCAD字符书写的基点有三种类型,一种类型是按基点位于字<br/>符串书写方向上的位置而分类;另一种是按基点位于字高方向的位置和字符串的书写方向的<br/>位置而分类;第三种是给出确定字符串两端的界点,算出能容纳字符串的长度空间和字符串的<br/>转角,按输入的字符及其个数,计算出字高或者是字宽,将要书写的字符串充满该容纳字符串<br/>的长度空间。<br/>·已书写字符串的修改 用CHANGE命令完成。可修改内容包括:字体、字高、字宽、基<br/>点坐标、转角及字符串等。字符串的修改比较费事,若其中的一个字符错了或漏了,修改时必<br/>须重新输入整个字符。<br/>修改后的字符串的数据存放在实体数据区,原来的字符串的数据移到另外的实体数据区<br/>,这样做是为了便于"Undo"等的操作。<br/>·关于排版 本系统没有排版功能,书写工程图样中文字较多的技术说明或注释时比较<br/>费事。可以用AutoCAD提供的开发工具解决这一问题。例如,可用AutoLISP语言编写一转换书<br/>写程序,将用一般文字编辑软件编排的技术说明文本文件读入AutoCAD,然后按要求将其书写<br/>在指定的范围内。<br/><br/>AutoCAD书写字符的数据结构<br/><br/>1.字库文件的数据结构<br/>字库文件由三部分组成:文件的头部、索引表、字符的编码。<br/><br/>2.字符文件表的数据结构<br/>struct style_table{<br/>unsigned char sty_flag;<br/>/*正常书写,坚直书写及其他*/<br/>char sty_name(32);<br/>unsigned char eof_name(2)={0XFF,0XFF};<br/>double fix_height;<br/>double width_factor;<br/>double oblique_angle;<br/>unsigned char generation_flaf;<br/>/*normal,backward或upside down*/<br/>double last_height;<br/>char primary_font_name(64);<br/>char big_font_name(64);<br/>unsigned char unknown(2);<br/>}; /*字符文件表的长度为198个字节。*/<br/><br/>3.字符实体的数据结构<br/>字符实体的数据结构比较复杂,实体头部为8个字节,实体中具体含有哪些数据需看实体<br/>头部的各个标志位是否置为1。字符实体的数据结构如下图。<br/>@@26189000.GIF;图1@@<br/>从上图可以看出,AutoCAD只存储字符串的字体与字符串的数据、几何参数和属性数据,<br/>不存字符的每个笔画的数据,这些数据从字库文件里读取。这样可以减小存储已书写字符串<br/>数据的空间, 但影响软件的运行速度。<br/>从上图还可以看出,字符实体数据结构的复杂性,其中除了字符的数据外,还有一些属性<br/>数据与其他一些数据的数据结构有关,如实体的扩展数、UCS数据等。<br/>AutoCAD书写字符的管理功能与存在的问题<br/>AutoCAD定义字符与图形符号所用的编码是一样的,字库文件的扩展名与图形符号库文件<br/>的扩展名都是.SHX,为了便于区分字库文件与图形符号库文件,AutoCAD规定字库文件的第一<br/>个编码必须是:<br/>*0,4,Style name(字库文件标识与定义字体的名称) 这是字库文件的特有编码,反映该<br/>字库的特点,包括字体的名称、字符的高度参数(上高和下高)与书写方向参数(只能水平书写<br/>,还是既能水平书写也能竖直书写)。这些信息与字库调入命令STYLE相配。<br/>在AutoCAD里要按Big Font的规定定义汉字库。定义汉字字库文件的第一个记录必须是<br/>*BIGFONT nchars,nranges,b1,e1,b2,e2,... 例如:<br/>*BIGFONT 7050,2,0A0,0A3,0B0,F7 *0,4,song 128,0,0,0 ... ... ... ... ...按<br/>上例定义的汉字库,在某些版本的AutoCAD里书写时,汉字是倒的,在另外的版本里书写时,汉<br/>字则是正的。这是因为在某些版本里将128按-128处理了。AutoCAD的字符编码系统规定X、<br/>Y方向的位移量为相对坐标,类型为signed char。如果能在字库文件的特有编码里增加一个<br/>字段,说明位移量是相对坐标还是绝对坐标,若是绝对坐标,则字高与位移量的类型为unsign<br/>ed char,这样字符的分辨率便为255了,这对定义汉字十分有利。<br/>笔者曾经做了一个包括半宽英文字符的汉字库,为了便于在工程图纸中书写较多文字的<br/>技术说明,使英汉混写时文字能够上下对齐,在AutoCAD的10.0版中使用没有甚么问题;在12.<br/>0版使用时确出现了这样的问题:只要将该汉字库调入AutoCAD,则用其他字体书写的英文全变<br/>为该字库定义的英文字体,任何英文字体都不能用了。<br/>AutoCAD定义的某些功能键与某些汉字机内码的高位一样,这也会给汉字的输入带来麻烦<br/>。<br/>AutoCAD没有排版功能,但连续使用书写字符命令TEXT书写字符串也还方便。第一次用T<br/>EXT命令,需要输入书写字符的基点坐标。输完字符串,按回车键后,该字符串便按要求书写在<br/>指定的地方。再键入TEXT命令或回车,出现提示要求输入基点坐标等提示时,直接按回车键,<br/>AutoCAD便要求直接输入要书写的字符串。输完字符串,按回车键后,刚输的字符串便写在上<br/>次所写字符串的下面。AutoCAD之所以能这样完成字符的书写,是因为在字库文件里定义了下<br/>面的编码:<br/>*1,2,sot(压栈操作) 5,0 *10,5,lf(换行操作) 2,8,(0,字符的上高 +字符的下高+<br/>行间距),0 *13,2,cr(回车操作,即弹栈操作) 6,0 第一次键入TEXT时,所输入的书写字符<br/>的基点坐标被压栈,输入完字符串及回车后,AutoCAD将压栈的基点坐标弹出,并执行换行操作<br/>,第二次要书写字符串的基点便确定了。因此,连续使用TEXT命令,只需要在第一次键入TEXT<br/>命令时输入书写字符的基点坐标。<br/>AutoCAD在字符书写方面提供如下功能:<br/>·在同一张图纸里可书写多种字体。所用字体存于字体表里与字符实体数据里的字体序<br/>号变量。<br/>·在同一张图纸里可以按正常与竖直两种方式书写字符。书写方式存于字符表里的书写<br/>方式变量:unsigned char sty_flag; /*正常书写,竖直书写及其他*/ ·支持多种字符定<br/>位。定位方式存于字符实体数据里的对齐标志与基线标志变量。<br/>·提供下列字符变换功能:<br/>剪切变换,要求输入的参数为oblique angle,其值存于字符实体数据里的字体斜角变<br/>量。<br/>反写字符串,由字符实体数据里的反倒书写标志表示。<br/>倒着写字符串,由字符实体数据里的反倒书写标志表示。<br/>AutoCAD软件在这方面存在的唯一问题是:如果某一字体的某些字符串先按正常方式书写<br/>,该字体的另一字符串要按竖直方式书写,则先要用STYLE命令修改书写方式。一旦该命令结<br/>束,则前面按正常方式书写的那些字符串将都变为竖直方式书写了,反之亦然。其原因在于A<br/>utoCAD软件是将书写方式变量存于字体表里,而不是存于字符实体数据里,只要将其移到字符<br/>实体数据中的反倒书写标志里,问题便迎刃而解,程序的修改量也不会大。<br/></td></tr></tbody></table></p>

byghbcx 发表于 2008-7-23 21:15:00

可以先搞清楚*.SHX的文件结构,再用程序读取,不过用VLISP打开,读取文件,功能还不是很全,用VBA可能会好操作点

猪是的读着倒 发表于 2012-12-30 10:45:46

yxp 发表于 2008-7-23 18:03 static/image/common/back.gif
(defun c:dxs()&nbsp;&nbsp; (setq dcl_id (load_dialog "dxs.dcl"))&nbsp;&nbsp; (if (not (new_dialog "d ...

请问这个sld幻灯片时如何刚好填充image控件的框框的啊我的填充不完全啊请加QQ 1210207653 姚申
页: [1] 2
查看完整版本: 如何使用fill_image将一个image填充成黑色