明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1769|回复: 11

[求助]遇到了一个很怪的事情

  [复制链接]
发表于 2007-10-2 17:04 | 显示全部楼层 |阅读模式

写了一个给文字外面加外框的程序,发现文字在窗口中所占的比例竟然会对程序产生影响

不知道这个程序怎么该才能把这个bug给去掉。

本帖子中包含更多资源

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

x
发表于 2007-10-2 17:38 | 显示全部楼层

很奇怪,从没有见过!

 楼主| 发表于 2007-10-2 17:43 | 显示全部楼层
唉!郁闷ing
发表于 2007-10-2 18:29 | 显示全部楼层
我给你回复了,看到了吗
发表于 2007-10-2 18:36 | 显示全部楼层

我试了你的程序,我的没有你说的问题,我用的是cad2006,可能是你的CAD 的问题。

另外,你的程序还要考虑捕捉的问题。不然画出来的矩形会有问题的。

发表于 2007-10-2 21:19 | 显示全部楼层
是特征点捕捉的问题。在画方框前要关捕捉。
 楼主| 发表于 2007-10-2 21:36 | 显示全部楼层
怎么考虑捕捉问题?是把捕捉关掉?希望您能指点一下
发表于 2007-10-2 21:50 | 显示全部楼层
在程序开头将变量OSMODE的值保存,在调用RECTANG命令前将OSMODE值设成零,在调用RECTANG命令后将OSMODE恢复。
  1. (defun wk(/ wz crdzbx crdzby wzgd pyx1 pyx2 pyx3 pt1x pt1 pt2x pt2y pt2 )
  2.    (graphscr)
  3.    (setq oce (getvar "cmdecho"))
  4.    (setvar "cmdecho" 0)
  5.    (setq oldos (getvar "OSMODE"))
  6.    (setvar "OSMODE" 0)
  7.    (setq wz (entget (car (entsel "\n请选择一个文字:"))))
  8.    
  9.    //找到插入点的x y坐标
  10.    (setq
  11.       
  12.       crdzbx (car (cdr (assoc 10 wz)))
  13.       crdzby (cadr (cdr (assoc 10 wz)))
  14.    )
  15.    //找到字高
  16.       
  17.    (setq wzgd (cdr (assoc 40 wz)))
  18.    
  19.    //寻找偏移量
  20.    (setq      
  21.       pyx1 (car (car (textbox wz)))
  22.       pyx2 (car (cadr (textbox wz)))
  23.       pyx3 (- pyx2 pyx1)
  24.    )
  25.    //寻找矩形的两个点
  26.    (setq
  27.       pt1x (+ crdzbx pyx1)
  28.       pt1 (list pt1x crdzby)
  29.       pt2x (+ pt1x pyx3)
  30.       pt2y (+ crdzby wzgd)
  31.       pt2 (list pt2x pt2y)
  32.    )
  33.    (command ".RECTANG" pt1 pt2)
  34.    (setvar "OSMODE" OLDOS)
  35.    (setvar "cmdecho" oce)
  36.    (princ)
  37. )
发表于 2007-10-2 22:06 | 显示全部楼层
本帖最后由 作者 于 2007-10-2 22:08:28 编辑

在没有把对象捕捉关闭前,程序运行时比如你画的文字的边框,会捕捉到一点去,画出来的四边形就变成一个点了。

你试试运行你自编的程序时,把捕捉打开,而且把CAD的窗口缩小,再执行你的命令,看看有什么效果,你就会明白的。

一般是在程序的开始就这样做(也不一定的,看你的程序的具体安排)

(setq oldosmode (getvar "osmode"));读取原有的变量设置
(setvar "osmode" 0);关闭对象捕捉(可以根据需求设置不同的捕捉值)

程序的结尾一般是要把原有的变量设置恢复过来,

(setvar "osmode" oldosmode)

OSMODE变量设置值:(来自CAD的help文件)

设置执行的对象捕捉模式。 系统将使用下列位码值之和将该设置存储为一个位码:

0

1

END(端点)

2

MID(中点)

4

CEN(圆心)

8

NOD(节点)

16

QUA(象限点)

32

INT(交点)

64

INS(插入点)

128

PER(垂足)

256

TAN(切点)

512

NEA(最近点)

1024

清除所有对象捕捉

2048

APP(外观交点)

4096

EXT(延伸)

8192

PAR(平行)

要指定多个对象捕捉方式,请输入各位码值之和。 例如,输入 3 可指定“端点”(位码 1) 和“中点”(位码 2) 对象捕捉模式。 输入 16383 可指定所有对象捕捉模式。

使用状态行的“对象捕捉”按钮关闭对象捕捉模式,除了返回 OSMODE 的普通值,还将返回位码 16384 (0x4000)。 使用该附加值,开发人员可以将此模式与“草图设置”对话框中已关闭的对象捕捉模式区别开来。 设置此位码值将关闭对象捕捉。 在该位码值关闭时将 OSMODE 设置为其他值可以打开对象捕捉。

 楼主| 发表于 2007-10-2 22:38 | 显示全部楼层

谢谢!就是这个问题!

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-18 05:17 , Processed in 0.233836 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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