明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2678|回复: 10

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

[复制链接]
发表于 2008-7-23 13:19:00 | 显示全部楼层 |阅读模式

使用这个(fill_image 0 0 x y -2) 好像不行

-2的颜色说是绘图背景色,可是怎么一直是白色呢。

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2008-7-23 15:11:00 | 显示全部楼层

Dialog box color attribute 

Color number

ADI mnemonic

Meaning

–2

BGLCOLOR

Current background of the AutoCAD graphics screen

–15

DBGLCOLOR

Current dialog box background color

–16

DFGLCOLOR

Current dialog box foreground color (for text)

–18

LINELCOLOR

Current dialog box line color

-2是图形窗口背景色,要一直用黑色,就用7

回复 支持 1 反对 0

使用道具 举报

发表于 2008-7-23 13:59:00 | 显示全部楼层
好像是 -18
发表于 2008-7-23 14:00:00 | 显示全部楼层
(fill_image 0 0 x y 0)
 楼主| 发表于 2008-7-23 17:08:00 | 显示全部楼层
本帖最后由 作者 于 2008-7-23 17:15:58 编辑

0 和 -18 最接近黑色。

7是白色,谢谢各位。

   (setq x (- (dimx_tile "image01") 1)
         y (- (dimy_tile "image01") 1))

      (start_image "image01")
      (fill_image 0 0 x y 0)
      (end_image)

我在试着操作image控件弄一个实时显示图形效果,可根据不同的参数显示不同形状的图形,看能成功不。

只是image的坐标太糟糕啦,只能用整数,图形不够细腻,不能写汉字,也不能支持缩放。

发表于 2008-7-23 17:38:00 | 显示全部楼层

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

 楼主| 发表于 2008-7-23 18:03:00 | 显示全部楼层

(defun c:dxs()
   (setq dcl_id (load_dialog "dxs.dcl"))
   (if (not (new_dialog "dxs1" dcl_id)) (exit))
   (setq x (- (dimx_tile "im01") 1)
         y (- (dimy_tile "im01") 1))
   (start_image "im01")
   (fill_image 0 0 x y 0)
   (vector_image 0 0 0 y 7)  ;;左竖
   (vector_image 0 y x y 8)  ;;下横
   (vector_image x y x 0 8)  ;;右竖
   (vector_image x 0 0 0 7)  ;;上横
   (setq a 1 b 1 c 1)
   (repeat (fix (/ y b))
     (vector_image 0 (* a b) x (* a b) c)
     (vector_image (* a b) 0 (* a b) y c)
     (setq a (+ a 1))
     (if (> c 255) (setq c 1)(setq c (+ c 1)))
   )(end_image)

 (start_dialog)(unload_dialog dcl_id)
)

;;dcl文件

dxs1:dialog{label="示例图像框";
:image{key="im01";width=50;height=25;}
ok_only;}

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
 楼主| 发表于 2008-7-23 18:05:00 | 显示全部楼层
本帖最后由 作者 于 2008-7-23 18:11:33 编辑

byghbcx发表于2008-7-23 17:38:00每次对image重画时,先要擦除,图形坐标要重新计算再重新画,支持汉字,要读取汉字形文件(*.shx)后得到汉字的矢量,再通过坐标转换到image坐标中绘制,早期天正中是这样的.

这是个好办法,shx的矢量能读出来?比较困难啊,谁有专门的程序吗,我用ultraedit打开后是乱码,无法分析数据结构啊。找了一篇文章如下:

图形软件中字符书写软件的分析




                                                          高俊
书写字符是绘制工程图纸的一个重要内容。无论是手工绘制工程图纸还是计算机绘制工
程图纸,在图样中书写字符都要耗费大量时间。开发计算机绘制工程图纸系统时,字符书写模
块是一个重要而复杂的模块。它需要具有:
·开发字符书写模块的标准与规范;
·定义字符库的功能,特别是定义汉字字库的功能;
·书写字符的功能;
·修改已书写的字符的功能;
·与上述功能相适应的数据结构;
·与上述功能与结构相适应的操作结构;
·与上述功能与结构相适应的管理功能。
若再详细地分析研究上述课题,还可列出与其相关的诸多问题。例如:书写字符时如何实
现书写多种字体?如何根据绘制图样的需要与具体情况,规定字符串书写基点的类型?……等
等。为了便于叙述,下面以大家熟悉的图形软件AutoCAD为例,讨论绘制工程图纸系统中的字
符书写模块。

AutoCAD书写字符的操作结构
AutoCAD书写字符的操作结构包括:字库的定义、字库的调入、字符书写以及已书写字符
的修改。下面分别介绍。

1.定义字符的编码系统
字符的编码系统需定义字符的规定与命令码、一般字符的字库文件、两字节代码字符的
字库文件,如汉字。

2.绘制图形时的字符书写系统
·字库的调入 用STYLE命令调入。该命令参数有:索引参数、字符参数、变形参数、书
写参数等。
·字符的书写 用TEXT命令书写。该命令参数有:基点坐标、字高、字符旋转角度、字
符串等,还包括两个子命令:STYLE和JUSTIFT。
·字符书写的基点类型 AutoCAD字符书写的基点有三种类型,一种类型是按基点位于字
符串书写方向上的位置而分类;另一种是按基点位于字高方向的位置和字符串的书写方向的
位置而分类;第三种是给出确定字符串两端的界点,算出能容纳字符串的长度空间和字符串的
转角,按输入的字符及其个数,计算出字高或者是字宽,将要书写的字符串充满该容纳字符串
的长度空间。
·已书写字符串的修改 用CHANGE命令完成。可修改内容包括:字体、字高、字宽、基
点坐标、转角及字符串等。字符串的修改比较费事,若其中的一个字符错了或漏了,修改时必
须重新输入整个字符。
修改后的字符串的数据存放在实体数据区,原来的字符串的数据移到另外的实体数据区
,这样做是为了便于"Undo"等的操作。
·关于排版 本系统没有排版功能,书写工程图样中文字较多的技术说明或注释时比较
费事。可以用AutoCAD提供的开发工具解决这一问题。例如,可用AutoLISP语言编写一转换书
写程序,将用一般文字编辑软件编排的技术说明文本文件读入AutoCAD,然后按要求将其书写
在指定的范围内。

AutoCAD书写字符的数据结构

1.字库文件的数据结构
字库文件由三部分组成:文件的头部、索引表、字符的编码。

2.字符文件表的数据结构
struct style_table{
unsigned char sty_flag;
/*正常书写,坚直书写及其他*/
char sty_name(32);
unsigned char eof_name(2)={0XFF,0XFF};
double fix_height;
double width_factor;
double oblique_angle;
unsigned char generation_flaf;
/*normal,backward或upside down*/
double last_height;
char primary_font_name(64);
char big_font_name(64);
unsigned char unknown(2);
}; /*字符文件表的长度为198个字节。*/

3.字符实体的数据结构
字符实体的数据结构比较复杂,实体头部为8个字节,实体中具体含有哪些数据需看实体
头部的各个标志位是否置为1。字符实体的数据结构如下图。
@@26189000.GIF;图1@@
从上图可以看出,AutoCAD只存储字符串的字体与字符串的数据、几何参数和属性数据,
不存字符的每个笔画的数据,这些数据从字库文件里读取。这样可以减小存储已书写字符串
数据的空间, 但影响软件的运行速度。
从上图还可以看出,字符实体数据结构的复杂性,其中除了字符的数据外,还有一些属性
数据与其他一些数据的数据结构有关,如实体的扩展数、UCS数据等。
AutoCAD书写字符的管理功能与存在的问题
AutoCAD定义字符与图形符号所用的编码是一样的,字库文件的扩展名与图形符号库文件
的扩展名都是.SHX,为了便于区分字库文件与图形符号库文件,AutoCAD规定字库文件的第一
个编码必须是:
*0,4,Style name(字库文件标识与定义字体的名称) 这是字库文件的特有编码,反映该
字库的特点,包括字体的名称、字符的高度参数(上高和下高)与书写方向参数(只能水平书写
,还是既能水平书写也能竖直书写)。这些信息与字库调入命令STYLE相配。
在AutoCAD里要按Big Font的规定定义汉字库。定义汉字字库文件的第一个记录必须是
*BIGFONT nchars,nranges,b1,e1,b2,e2,... 例如:
*BIGFONT 7050,2,0A0,0A3,0B0,F7 *0,4,song 128,0,0,0 ... ... ... ... ...按
上例定义的汉字库,在某些版本的AutoCAD里书写时,汉字是倒的,在另外的版本里书写时,汉
字则是正的。这是因为在某些版本里将128按-128处理了。AutoCAD的字符编码系统规定X、
Y方向的位移量为相对坐标,类型为signed char。如果能在字库文件的特有编码里增加一个
字段,说明位移量是相对坐标还是绝对坐标,若是绝对坐标,则字高与位移量的类型为unsign
ed char,这样字符的分辨率便为255了,这对定义汉字十分有利。
笔者曾经做了一个包括半宽英文字符的汉字库,为了便于在工程图纸中书写较多文字的
技术说明,使英汉混写时文字能够上下对齐,在AutoCAD的10.0版中使用没有甚么问题;在12.
0版使用时确出现了这样的问题:只要将该汉字库调入AutoCAD,则用其他字体书写的英文全变
为该字库定义的英文字体,任何英文字体都不能用了。
AutoCAD定义的某些功能键与某些汉字机内码的高位一样,这也会给汉字的输入带来麻烦

AutoCAD没有排版功能,但连续使用书写字符命令TEXT书写字符串也还方便。第一次用T
EXT命令,需要输入书写字符的基点坐标。输完字符串,按回车键后,该字符串便按要求书写在
指定的地方。再键入TEXT命令或回车,出现提示要求输入基点坐标等提示时,直接按回车键,
AutoCAD便要求直接输入要书写的字符串。输完字符串,按回车键后,刚输的字符串便写在上
次所写字符串的下面。AutoCAD之所以能这样完成字符的书写,是因为在字库文件里定义了下
面的编码:
*1,2,sot(压栈操作) 5,0 *10,5,lf(换行操作) 2,8,(0,字符的上高 +字符的下高+
行间距),0 *13,2,cr(回车操作,即弹栈操作) 6,0 第一次键入TEXT时,所输入的书写字符
的基点坐标被压栈,输入完字符串及回车后,AutoCAD将压栈的基点坐标弹出,并执行换行操作
,第二次要书写字符串的基点便确定了。因此,连续使用TEXT命令,只需要在第一次键入TEXT
命令时输入书写字符的基点坐标。
AutoCAD在字符书写方面提供如下功能:
·在同一张图纸里可书写多种字体。所用字体存于字体表里与字符实体数据里的字体序
号变量。
·在同一张图纸里可以按正常与竖直两种方式书写字符。书写方式存于字符表里的书写
方式变量:unsigned char sty_flag; /*正常书写,竖直书写及其他*/ ·支持多种字符定
位。定位方式存于字符实体数据里的对齐标志与基线标志变量。
·提供下列字符变换功能:
剪切变换,要求输入的参数为oblique angle,其值存于字符实体数据里的字体斜角变
量。
反写字符串,由字符实体数据里的反倒书写标志表示。
倒着写字符串,由字符实体数据里的反倒书写标志表示。
AutoCAD软件在这方面存在的唯一问题是:如果某一字体的某些字符串先按正常方式书写
,该字体的另一字符串要按竖直方式书写,则先要用STYLE命令修改书写方式。一旦该命令结
束,则前面按正常方式书写的那些字符串将都变为竖直方式书写了,反之亦然。其原因在于A
utoCAD软件是将书写方式变量存于字体表里,而不是存于字符实体数据里,只要将其移到字符
实体数据中的反倒书写标志里,问题便迎刃而解,程序的修改量也不会大。

发表于 2008-7-23 21:15:00 | 显示全部楼层
可以先搞清楚*.SHX的文件结构,再用程序读取,不过用VLISP打开,读取文件,功能还不是很全,用VBA可能会好操作点
发表于 2012-12-30 10:45:46 | 显示全部楼层
yxp 发表于 2008-7-23 18:03
(defun c:dxs()   (setq dcl_id (load_dialog "dxs.dcl"))   (if (not (new_dialog "d ...

请问这个sld幻灯片时如何刚好填充image控件的框框的啊  我的填充不完全啊  请加QQ 1210207653 姚申
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-26 01:26 , Processed in 0.220763 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表