明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 7287|回复: 15

[原创]DCL中实现:块动态预览

  [复制链接]
发表于 2009-4-24 18:30:00 | 显示全部楼层 |阅读模式
本帖最后由 作者 于 2009-4-24 19:48:43 编辑

因为要写个小程序用到了DCL对话框和块,

打算着搞个DCL中的块动态预览,就写了个出来,

先传上给大家PP一下哈!

下面是主程序:

还有个别函数在这个库中,

下载有飞诗CAD程序管理大一统的可以不用下载这个了.

本帖子中包含更多资源

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

x
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2009-4-24 22:21:00 | 显示全部楼层

飞诗,能说说思路不?

DCL的image这块,一直在想着怎么把SLD集合到LISP中。就像DCL一样。

虽然vector_image可以实现,但是感觉还是太麻烦。。。

发表于 2009-4-24 23:14:00 | 显示全部楼层

看看程序是先输出wmf文件.再显示的

wmf如何可以在dcl显示?转换为sld?不明白.

SHOWOBJSS 
INSERT 
GETWMF
GETALLBLK
DRAWLINE

C:\Documents and Settings\xxx\Local Settings\Temp\oxn.wmf

test:dialog {
    label = "块预览测试" ;
    :row {
        :image_button {
            aspect_ratio = 1.2 ;
            color = black ;
            height = 20 ;
            key = "pic" ;
        }
        :list_box {
            height = 25 ;
            key = "style" ;
            width = 30 ;
        }
    }
    ok_only;
}

猜想..:点取块后.在图中插入块.输出wmf文件.再读取wmf文件数据.再dcl中画出来.
核心.读取wmf数据转换为vector_image所需要的点数据.

 楼主| 发表于 2009-4-24 23:44:00 | 显示全部楼层

是的啊!~GETWMF 函数就是读入wmf,

INSERT函数就是插入块!

发表于 2009-4-24 23:57:00 | 显示全部楼层

是读取wmf文件用vector_image画出来的??

发表于 2009-4-25 15:21:00 | 显示全部楼层

程序思路猜想如下:

先把DCL输出到Temp,启用对话框

里面列举所有块名

点击某个块名,则将该块导出为WMF

再将WMF导入回来,缩小后放到对话框的后面(飞诗缩的不够小啊),删除WMF

因为WMF格式导入后 里面所有的图元都转换为POLYLINE!

根据GetBoundingBox返回的结果和image大小做高宽比调整

(修改了程序的DCL后发现飞诗的程序依然可以将图像居中显示 所以不是按照固定image高宽计算)

这样可以很方便的获得所有的线(vertex)

使用vector_image函数绘制在DCL-image里面即可

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

本来自己也可以计算转换所有的图元为PLINE然后用vector_image绘制

但是飞诗通过WMF巧妙的完成这一步,快速实现DCL预览图块

程序的进一步改进可以实现:

把image改为带有任意图像和文字的按钮来用。(分析WMF后自动生成DCL对应代码即可)

 楼主| 发表于 2009-4-25 16:28:00 | 显示全部楼层

就是这样的:

1.插入块(隐藏的)

2.再[缩放+移到]中窗口中心

缩放比我是按CAD窗口大小的比例计算的,

大小可以用参数控制.太大了就不够美观,太小了则输出的WMF精度不够.

3.输出wfm.

4.读入wfm.并读出里面的PLINE点与颜色参数.

5.换算一下坐标,用vector_image绘制到image.

==============

carrot1983:

如果只是当作固定的"幻灯片"用,只要保存一下[换算后的坐标],

输出成txt文件,再复制到Lisp程序中,以后就不用打包幻灯片了.

发表于 2009-4-25 16:36:00 | 显示全部楼层

飞诗有空的话可以试试导入WMF是否可以用DBX实现隐藏处理

发表于 2009-4-25 17:02:00 | 显示全部楼层
fsxm发表于2009-4-25 16:28:00就是这样的:1.插入块(隐藏的)2.再中窗口中心缩放比我是按CAD窗口大小的比例计算的,大小可以用参数控制.太大了就不够美观,太小了则输出的WMF精度不够.3.输出wfm.4.读入wfm.并读出里面的PLINE点与

 谢谢。

vector_image 确实不会用。

(vector_image x1 y1 x2 y2 color)

我尝试过把x1 y1 x2 y2 采用实数类型的数字。不行。是否只能为整数。(向量的特性)

如果是这样子,又如何实现PLINE_PT_LIST -> vector_image ???

这个困扰很长时间,一直扔着没解决的问题,望能指点迷津。

发表于 2009-4-25 17:09:00 | 显示全部楼层
在布局空间无效哦
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-21 22:12 , Processed in 0.186567 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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